Simeon Franklin

Agile Development

Agile Development is associated with some specific methodologies in the world of software development. While I appreciate some of those practices, here I mean to convey something a little more general.

Software development takes flexibility, balance, and the ability to adapt to the unexpected. In short, it must be agile. Many clients (and some managers) I have had over the course of my software development career are confident that on the contrary - software development is a simple process whereby all the decisions about the design of the software are made up front, given to the programmer, and the programmer returns some time later with the software that meets the requirements.

This sounds reasonable. Unfortunately, it is my experience that this sort of process rarely results in real satisfaction for the customer or the programmer. Software is an amazingly malleable construction and frequently, perhaps even always, it is impossible for the client to fully specify what they want until they have at least part of the end product to play with. Inevitably the result of seeing the product asked for is a reassessment of the meaning and implications of the requirements. Sometimes it even means recognizing that the previous ideas were flawed in some way and requesting something completely new.

Implications

This process is frustrating and expensive in terms of time and money. And it isn't an isolated occurence - CodingHorror.com points to the Standish report which surveyed 40,000 software projects over 10 years. Over 50% of them were "challenged": over budget and past time. 15% of projects were "failures" - never used, never completed. Amazingly this abysmal record of failure is better than the previous decades failure rate of over 30% - and the report credits a shift to more agile project styles:

projects have gotten a lot smaller. Doing projects with iterative processing as opposed to the waterfall method, which called for all project requirements to be defined up front, is a major step forward.

The research confirms that my experiences are typical, rather than exceptional. And it implies that the sooner the client can give feedback the better off the project will be. It means that the technologies and design decisions made by the programmer must emphasize flexibility; Likely we will be adapting them further along the project lifecycle. It means that communication cycles between client and programmer must be frequent in duration. And it demands that the means for specifying requirements and continuing communication about them must be easy to use and open to all parties involved in the project.

As you can see I have some pronounced ideas about the best way to create great software. And I haven't even started on some of the factors specific to web development! I am passionate about doing things right - If that sounds like the kind of programming help you've been looking for, hit my contact form and tell me what you're interested in. You could also read my ideas web development on my Principles page.