Ken Schwaber has a great presentation where he talks about the Innovator’s Dillemma and how companies build a (design) dead core.
A typical (success) story
- Management – we need to hit the date.
- Developers – OK, we’ll cut quality but won’t tell you.
- Success! We made the date. We’re heroes!
BUT, this is a horrible long term strategy because you get a design-dead core and can no longer ship product.
Design-dead core
Do you have a design-dead core? Here’s a quick checklist (see mindmap below):
- The code is fragile: difficult to work with and things break unpredictably
- Little or no automated test harness.
- Few experts who really understand the technology.
Innovator’s Dilemma
The purported dilemma is that you need to choose between fast delivery and maintainability. So, if you want to get to market fast you need to take shortcuts that are going to hinder you in the long run.
This is also called the inventor’s dilemma.
Agile to the Rescue
Teams that follow Agile practices avoid this peril in two ways.
By managing features and scope, teams can find the most valuable software to deliver by a certain date.
Technical practices such as automated testing, continuous integration and refactoring keep a code base healthy and maintainable. They also helps teams go faster.
Release Burndown to illustrate the Innovator’s Dilemma
Consider the chart below. Companies start at burndown line A. If they use Agile, they will stay there. Most companies don’t. So, release by release, they accumulate technical debt and the code base decays. After a few years, they build a design-dead core.
As a coach, I like to show teams the chart below and vote on their code base. Many companies are at line C with some area’s that are D.
Help! I have a dead core!
OK, so you’ve got a dead core. Sad news. There are ways to recover. I’d suggest you start with Michael Feather’s book Working Effectively with Legacy Code.