Software is playing an increasingly critical role in many industries. Analysts estimate that in the automotive sector, for example, nearly three-quarters of future innovations will be software driven. Companies are investing accordingly. Some now employ more software developers than do dedicated software businesses. Many have software development processes whose sophistication rivals—or even exceeds—that of major software players.
Yet few businesses are fully satisfied with their return on software development spending. And for good reason. Many software projects arrive late, over budget, short on quality, or off target, resulting in a litany of woes that include product launch delays, product recalls, and higher-than-expected support costs. The lack of transparency and accountability often associated with software-related spending adds to the frustration.
When we attempt to diagnose causes of weak performance in a company’s software development, we frequently start by asking the following question: How does the organization decide on and make tradeoffs among features to be included, time to delivery, and resources needed for each release? If the process for making such decisions is unclear, makes excessive demands on senior management’s time, or results in changes to priorities late in the project cycle, the company’s results will likely be unpredictable and disappointing.
Common remedies for such problems, such as well-defined milestones and rigorous stage-gate reviews, are valuable and necessary, but they are not sufficient to produce software that truly delivers on its promise. What’s typically missing—and is the linchpin to successful software development—is the proper organization and approach for driving results. To that end, three actions are essential: dedicating an empowered cross-functional team to the project to bring together all the capabilities necessary for success; establishing strong leadership with the skills and authority necessary to make critical decisions and drive the process end to end across functional boundaries; and developing clear, specific requirements that create an unbroken chain of purpose for all involved parties, from concept through delivery.
Consistent application of those practices is the foundation on which successful software development rests. If they aren’t in place, other remedies for poor software-development productivity will have little impact. (See the exhibit “Three Fundamental Practices Drive Successful Software Development.”)