A few years back when I was still doing hands-on project management work… I used to teach internal classes on iterative and incremental product development. Officially… we were teaching a very light-weight instantiation of the Rational Unified Process. Unofficially… we were teaching agile values and principles within more of an Agile Unified Process framework.
The audience was always full of hard core waterfall folks… developers… testers… business analysts… project managers… one of the main things we’d try to talk about was the idea of frequent delivery of working software. I’d explain that charters and market requirements documents and detailed design specifications were not what provided value to our customers… all our customers really cared about was the working software.
Inevitably… someone from the audience would raise their hand and ask the question: Are you telling me that these detailed requirements documents… the ones I spend months and months creating… are not valuable? Are you telling me that the only one delivering value on the team were the developers?
I’d have to carefully explain that while those things were valuable… to the extent that they enabled communication… to the extent that they helped people understand… they were not the value that our customer’s expected. If we had to kill the project 3 months in… would you rather have a detailed specification or an increment of potentially shippable code? The potentially shippable code is always going to win.
The same idea holds for organizations with multi-part… multi-step value streams… organizations where it takes the activities of several teams working in coordination to deliver value back to the business. Even the smallest organizations… organizations with the simplest value streams… are going to need sales and marketing and support to deliver a viable product to market. Software doesn’t usually sell all by itself.
More complex businesses… businesses with more complex value streams… are going to need not only sales and marketing and support… but also the ability to integrate the outcomes of many feature teams and component teams to get a product into the hands of their end-users. Does it do us any good to invest in one part of the value stream if the other parts are falling behind? Value is only created when all the parts are integrated into one cohesive whole.
So… when one part of the delivery organization gets too far ahead of the other parts of the delivery organization…. be it by writing all the requirements up front… or by building out one part of the component architecture too far ahead of all the others… it is easy to start confusing valuable activities with real value delivered into the product. It is especially easy when all that activity results in great team velocity and real working… albeit incomplete… software.