People often struggle with how to apply agile techniques, particularly iterations or sprints, to their situation. They are so entrenched in the ways of waterfall that they cannot envision another way.
Let’s consider a simple example — building a house. The traditional approach looks something like this (simplified):
- Design the house.
- Dig a big hole.
- Pour the foundation.
- Frame the structure, walls, floors, ceilings, and roof.
- Run the plumbing, heating and electrical systems.
- Seal up the structure with the appropriate materials, wallboard, flooring, roofing, etc.
- Install cabinets, appliances, fixtures, etc.
- Paint, wallpaper, carpet, etc. to make it feel like a home.
Many people have a hard time looking at the design of a house and envisioning what it will look and feel like. They often end up disappointed in some respects.
What if you hate disappointment and want to build the house in sections so that you can try it out before completing the project? It’s hard to envision how this could be done using agile techniques. How do you break this down into “stories” where you can build vertical slices?
Think in terms of modular construction. To start, you have must a kitchen, bathroom and bedroom. The rest can be added. You build components and tie them together something like this:
- Design the first components.
- Dig a small hole.
- Pour a foundation for the kitchen, bathroom and bedroom (one story).
- Frame the structure.
- Run plumbing, etc.
- Seal it up.
- Install cabinets, etc.
- Paint, etc.
You can move in and try it out. Want more space? You have two options, add a second floor or enlarge the foundation.
To add a second floor, repeat the above skipping steps 2 and 3. (Of course, you’ll need to remove the roof!) To enlarge the foundation, do not skip steps 2 and 3. (Of course, you’ll need to remove a wall or make a doorway!)
If you used pre-built modular housing sections, this approach would be simpler and faster though your options would be more limited.
Of course, it’s unlikely you’d build a house this way simply due to the inconvenience. But, it could be done and the final result is much more likely to be exactly what you want.
There is some re-work involved but be honest — every project contains re-work. The amount of re-work varies but it is inevitable on all but the simplest of projects. Admit that it happens and plan for it.
Software is easier to “enlarge” than a house so the approach is more practical in the software business. Agile software development really works — you just need to wrap your head around the concepts.