Modern Software Product Development

There are three basic approaches to software development: Waterfall, Agile, and Chaos.

Chaos is when you don’t really have a plan, and you don’t really learn anything, but everybody’s super busy all the time. Chaos is often characterized (or justified, if you want to be more critical) as “firefighting”, and it is suggested that there is no time to plan or learn because there is just so much to do.

Waterfall is when you lay out The Plan in full before you start: every detail, every feature, every meeting, every benchmark, and then you’re wrong on most of them but forge ahead anyway, secure in the knowledge that following The Plan gives air cover in the likely event that the thing you’re building doesn’t work the way you expected it to when you made The Plan.

Agile is different. Agile has an end result in mind, and maybe a timeframe, but it only gets into the details as needed, which allows for change in response to new information.

Think of the three as a road trip from Washington DC to San Francisco:

With Chaos, you just start moving, and hope you wind up in San Francisco eventually. Maybe you go west, maybe not, maybe on foot, maybe by train, whatever, just keep moving!

Waterfall would have you carefully and exactingly mapping out your trip before you leave. Gas stops, meals, sleep, mileage targets, route. This would be fine if there were never traffic delays, weather issues, car problems, or interesting detours and stops along the way. You can change nothing, and if something goes wrong, the whole trip fails.

With Agile, you decide you want to drive from DC to San Francisco and you want it to take five days, and you get in the car and go. You can flex around construction, bypass snow, and even choose to end up in San Diego instead because you heard San Francisco was cold and expensive.

(Some folks say there is a fourth option, “Agilefall”, but that’s really just Waterfall with new names.)