How software gets done Process

Less Process, More Discipline

A lot of people have claimed to adopt "agile methods," when what they really mean is, "Oh we never liked all that software engineering discipline anyway." Real agile methods mean more discipline: discipline in establishing requirements, discipline in setting schedules, and discipline in saying "No."

It started, as these things often do, with someone coming into my office. We’re close to shipping a product after a long struggle with all the usual issues – hardware difficulties, operating system bugs, personnel changes – but we’re beginning to see the light at the end of the tunnel without the chug-chug of an oncoming train.

But from the look on my colleague’s face, I knew it I wasn’t going to like what he had to say.

“Look, we’ve been reviewing this feature… and it just isn’t right.” And yes, I am being cagey about what the feature is and who the person involved is. I have to live with these people.

“Okay, ‘not right’ how?”

“It doesn’t do what we think it should.”

“But it does what we said it would do.”

“Yeah, but …”

“It does what it did when we reviewed it last year.”

“Yes, but it’s not what we wanted.”

“It’s a little late to bring this up now, don’t you think?”

“I thought we were doing ‘Agile’ now. Can’t you just fix it? isn’t that what ‘Agile’ means?”

What Agile Teams Should Avoid in 2012
SmartBear Software Agile Solutions

I’m sure there are places in which agile methods are adopted with general agreement and used with great success, but I don’t seem to work for them. (I suspect the Evil Eye put on me as a baby.) Instead, I end up working in places where people learn the phrase “agile methods” and think they sound cool, but they adopt only some of the window dressing – something I’ve called “cargo cult agile.” There’s this general notion that as long as you do some of the things that “agile people” do, you’re using agile methods.

What can be even more insidious, though, is when people think of “agile” in terms what agile methods don’t do. Agile minimizes upfront design, so obviously you’re being agile if you eliminate upfront design. Agile minimizes process, so you just eliminate process.

The result is what Dilberts boss summarized as “No more planning and no more documentation. Just start programming and complaining.”

So that we do not get down into the weeds, let’s look at agile methods in terms of the Agile Manifesto. The guiding values of Agile, according to the manifesto, are

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

Agile methods, uniformly, work toward these values by reducing documentation to a minimum, shortening delivery cycles as much as possible, and defining requirements in customer terms with customer input. The idea here is to:

●      reduce the overhead involved in building software

●      while adapting to the way requirements change over time

To guide development, every published agile method has its own little proverbs and best practices, like “Do the simplest thing that can possibly work” and the SCRUM Planning Game. These are the keys: Don’t do work you don’t need, and be ready to respond quickly to changes.

But that’s not the whole story. Let’s look at the most extreme of agile methods, Extreme Programming. The core of extreme programming is laid out in a page of simple rules – but now consider those rules.

“User stories are written.”

“All code must have unit tests.”

Not “It would be nice to have user stories” or “Code should have unit tests.” It’s all written in terms of rules that must be followed. If someone wants a feature, it’s described in user stories, scheduled in a release plan, coded including unit tests, and approved through an acceptance test. If no user stories are produced, then the feature never happens. If a customer asks for a last minute change, it shouldn’t be squeezed in at the last minute; it becomes a new user story, and is taken up in another iteration.

The result is that when you start an iteration, you know exactly what is to be built in that iteration. You have an agreement for acceptance and you can measure effectively how close you are to completing the iteration.

This is discipline.

The problem is that discipline is hard. It means saying “No,” and often you’re saying No to your boss. No, you can’t come on Thursday and get an additional feature on Friday; put it into the user stories and we’ll schedule it. No, you can’t shorten the schedule by two weeks unless you choose which user stories you don’t need.

But that’s discipline. Without it, you lose everything agile methods promise. The key to agile methods is this: You may have less process, but you must have more discipline.

Share with your friendsJoin and Stay Current with the Community
JOIN RSS
About Charlie Martin

Charlie Martin has been programming for a living since stone knives and punch cards. He holds a Masters in Computer Science from Duke, is ABD from both Duke and UNC-Chapel Hill, is a certified SCRUM master and Agile proponent.

  • http://twitter.com/MarkWSchumann Mark W. Schumann

    Charlie, you are right ON with this. I have nothing more to add.

  • http://www.pmhut.com/ PM Hut

    Hi Charlie,

    The image from SmartBear is spot on (I do remember I have seen it before on SmartBear’s blog).

    I agree with you on what you’re saying – nowadays, and in many project, the methodology/process matters more than the project itself. Methodologies were created (supposedly) to get projects done, but the problem is that many project managers think differently – they think that they need to follow the process blindly in order to get the project done, without really thinking.

    Project management was all about creativity, now, all these methodologies have killed this creativity.

  • http://powerandcontrol.blogspot.com/ M. Simon

    Charlie,

    I see you are not going to win any popularity contests. OTOH you are rather likely to meet schedule.

  • jimtaylor3

    Absolutely agree.  I believe it is crucial that the organization be educated on what Agile is and isn’t and to focus on the intent and commitments that are being agreed upon.  Too often, business users seem to believe that agile means ‘faster and I can keep changing stuff …. for free and stay on schedule… and not have to bother with specs’

    I am not a fan of strict adherence to any process for the sake of the process.  The process exists to serve the needs of the organization.  Therefore, I am always willing to alter a process to fit an environment – I might, for example forego writing stories on cards in favor of using a word processing application in the case where users are not co-located – whoops, there’s another violation, but the reality is that more and more work is now being accomplished virtually, so I am also OK with using video conference/desktop sharing software and telephones to conduct daily check-ins.  I would not allow the stories to be skipped or put in the format of ‘the system shall,so that the user may…’  or for the check-ins to be done via e-mail as these alterations would undermine the effectiveness of Agile.   Knowing what can flex and how to maintain the integrity of the process while adapting to the environment is key. 

blog comments powered by Disqus