Jeff Patton recently reminded me of two simple strategies for software development that I’ve talked about from time to time—Build Less Software and Start Sooner. I thought I’d follow up on Jeff’s blog and revisit these simple, but powerful strategies.
First, managers and executives complain a lot about not delivering software (or any other product really) in a timely manner. In Preston Smith and Don Reinertsen’s ground-breaking book Developing Products in Half the Time they discussed manufactured products, not software products, but many of their ideas are relevant none-the-less. Their research pointed out that, on average, in the timeframe from initial identification of a need to product ship, over ½ the project’s time was taken up before the development project actually got underway! “The front end is so fuzzy that people tend to forget that it even occurs,” say the authors, and they go on; “we have seen situations where as much as 90 percent of the development cycle elapsed before the team started work.” How many projects, projects with extremely aggressive schedules, have you been on, where everyone knows the project has been under “consideration” for months and months, if not years? Once the development team is appointed, the mantra becomes “hurry, hurry.” Where was all the hurry when management was “considering” the project?
Part of the delay in starting projects is concern about uncertainty. In their unwillingness to start before all questions are answered (and of course many of the answers will still be wrong), project start times slip—again and again. Then when the project does start—well you know the drill. Starting early is a discipline that can greatly improve schedule performance—and at very little cost. Work on ways to get important projects off the ground early. I once worked with a medical software company in Canada that had been “investigating” a new product idea for a year. I finally convinced them to try a few proof-of-concept iterations. The feedback was startling, but all too predictable, “We learned more about our product direction in a few 2-week iterations than we learned in the last 9 months of analysis.”
One time I was asked by a senior manager in a software company, “how can you help us deliver this large product on schedule,” to which I replied, “Do less”—build fewer features. Do less is really the flip side of “focus on what is important.”
“Everyone tries to do too much: solve too many problems, build products with too many features. We say ‘no’ to almost everything. If you include every decent idea that comes along, you’ll just wind up with a half-assed version of your product. What you want to do is build half a product that kicks ass.” (from the founders of 37signals in Taylor, Practically Radical).
Three studies conducted by The Standish Group (Jim Johnson, CEO The Standish Group International, XP2002 conference), the DOD (Crosstalk Journal 2002), and reported by IEEE (IEEE conference 2002) in the early part of this decade indicate that far more than 50% of functionality in software is rarely or never used. These aren’t just marginally valued features; most are no-value features. Think of the benefits from doing less, from eliminating these features. A CIO friend of mine once delivered a CRM application with 25% of the originally requested functionality—and the customer was delighted. In fact, the customer cut off development! The other 75% of features proved to be “nice to have” but not significant contributors to business value. Delighting customers has both a content and a timing dimension. Fifty percent of the features delivered in 6 months may be far more “delighting” that 100% delivered in 18 months.
Doing less should operate at many levels. The practice of allocating value to features is to both “Do the highest valued chunk of work,” but also to “Do Less,” to eliminate marginal valued features and cut functionality on those features with lower value. Reducing work-in-process increases throughput by cutting down on time-wasting multi-tasking. Value stream mapping show us where to cut out non-value adding activities.
So these two strategies, Build Less Software and Start Sooner, sound simple on the surface, but in practice they can be very difficult to implement because of organizational inertia and politics. But they can be very effective and worth the effort to pursue.