For me the most fundamental principle in Agile Development is to reduce feedback time in everything you do. This helps us do the right thing more often and waste less time doing the wrong thing. It’s not just the feedback time that matters, it’s the quality of that feedback and when it comes to building the right thing the best feedback comes from real users using the real product in the real world. We (and our customers) all to easily ignore this because we don’t know what we don’t know and assume that we know what to build.
Whilst being close to your customer and having conversations helps, nothing beats getting the software out there and having people scream about what is missing. Having a process that allows you to quickly respond to those screams, and we are talking hours not weeks or months, is by far the most effective way to build the right thing.
Now this isn’t rocket science, I think it’s widely accepted in the Agile community but perhaps not so much in the business community. The business needs numbers to be convinced, so lately I’ve been thinking about what is the real cost of not using a continuous deployment process.
Building a product with and without continuous delivery requires a strikingly different mindset:
- Build the simplest thing possible that satisfies the story, deliver it to the customer and discover what’s missing. We make as few assumptions as possible and test them as early as possible
- Consider all possible permutations of what the customer might need to deliver the story and ensure that they are all covered, because once it’s out there it will take too long to react to problems. Talking to the customer about what they need helps, but they won’t really know till it’s built.
In my experience of working the second way I think you usually end up building at least twice as much as is used. I think many will argue the figure is much higher. But the cost of delivering twice as much is more than twice the cost. As software becomes more complex and each area of functionality needs to work with other areas the cost of adding new features grows. You also need to spend more time maintaining the features. Good design and engineering practices can help with this but it’s unavoidable that the cost of adding each new story will grow exponentially. If the growth is exponential, and the product lasts long enough, I assume that at some point in its lifecycle the cost of adding a new feature will be 5 times as much as if you were using continuous delivery.
Now that’s the kind of figure that I think could convince organisations to reconsider the way they are working, and treat continuous delivery as essential rather than something just the cool kids do. But is my assumption correct?