Keep your code malleableWritten by Erik Sacré on 06 Apr 2012.
I’ve been practicing agile development for many, many years now. I’ve always liked the rhythm that user story driven development gives you. I also like the constant prioritizing that goes on in agile projects.
Although agile development has worked well for me on many projects, lately I’ve come to realize that agility is essential for my current project. I’m currently involved in creating a new product for an emerging market. Talk about unknowns…
It is absolutely vital for the success of this product that we can adapt to new insights quickly. To make this possible the code must remain malleable. The combination of automated acceptance tests, test driven development and continuous deployment works well for us. We can push out new features and changes to our customers very rapidly. These customers can start using those features immediately, and provide feedback that drives further development.
Most of the time the feedback results in small changes. Sometimes the feedback results in a big insight for this emerging market. It is at those times that malleable code makes a big difference. Having full test coverage makes it safe to change code. Working in baby steps, practicing Test Driven Development as if you meant it, keeps the code in pristine state, and deployable at all times.
Although the team I’m currently working with was experienced, we had to improve some key practices a couple of notches:
- Test driven development as if you meant it
- Delaying decisions until the “last responsible moment”
- Let the design emerge
- You ain’t gonna need it (YAGNI)
- Story mapping
- Always include benefit in a user story: “As a role I want to goal/desire so that benefit”