Tuesday, July 7, 2015

On the difference between Waterfall and Agile


Waterfall

Perfection

Waterfall believes in Perfection.  The project gathers perfect requirements.  From the perfect requirements it produces perfect specifications.  Code is written to match the specifications perfectly, verified by perfect test coverage.  Finally the customer receives a perfect product.

In practice, the recipients of each stage respond with "If only".  When the developers read the perfect specifications, they think "If only we didn't have to meet requirement X, we could produce a much less complex system"; "If only we could have reused Y rather than reinvent something similar".  When the customer receives the final product they think "If only we had seen A earlier, we would have changed it to B."; "If only we hadn't spent so much money on C when D would have sufficed."

When the developers discover the complexities of the requirements, the customer can be resistant to change.  The customer can think  "We have spent a lot of money producing perfect requirements and specifications, if we change them we'll end up with something less than perfect.".  The customer might prefer to spend more money than give up part way along the path to perfection.

Agile

Compromise

As far as agile is concerned, there is no such thing as perfection.  Everything is Compromise.  The customer accepts from the beginning that it is not going to get a 'perfect' product.

The project has two pools, a money pool and a requirements pool. The project ranks the known requirements by importance.  A short, fixed length of time is spent implementing the highest priority requirements.  The customer looks at the resulting product, and may be provoked to adjust the requirements.  The customer then looks at the what remains in the requirements pool, looks at what remains in the money pool, and Compromises.  Examples of compromises are "Rather than take money from the money pool to fix bug A, we will live with the bug and spend the money implementing requirement B."; "We thought that requirement D was high priority, but now that we've seen requirement C in action we think it would be more valuable to enhance it further."  The requirements are re-prioritized and the iterations continue until the money pool or the requirements pool is empty.

Since the customer is not travelling the path of perfection, it is liberated from the pressure to meet all the requirements.  It only needs to decide how to use the money pool to bring the most value.