Keys to Improvement: A Balanced Approach
Improvements in the economics of software development have been not only difficult to achieve, but also difficult to measure and substantiate. In software textbooks, trade journals, and market literature, the topic of software economics is plagued by inconsistent jargon, inconsistent units of measure, disagreement among experts, and unending hyperbole. If we examine only one aspect of improving software economics, we are able to draw only narrow conclusions. Likewise, if an organization focuses on improving only one aspect of its software development process, it will not realize any significant economic improvement—even though it may make spectacular improvements in this single aspect of the process.
The key to substantial improvement in business performance is a balanced attack across the four basic parameters of the simplified software cost model: complexity, process, team, and tools. These parameters are in priority order for most software domains. In our experience, the following discriminating approaches have made a difference in improving the economics of software development and integration:
- Reduce the size or complexity of what needs to be developed.
- Reduce the amount of developed code by understanding business needs and delivering only that which is absolutely essential to satisfying those needs.
- Reduce the amount of human-generated code through component-based technology and use of higher levels of abstraction.
- Reuse existing functionality, whether through direct code reuse or use of service-oriented architectures.
- Reduce the amount of functionality delivered in a single release to shorten the release cycle and reduce complexity; deliver increments of functionality in a series of releases.
- Improve the development process.
- Reduce scrap and rework by transitioning from a waterfall process to a modern, iterative development process.
- Attack significant risks early through an architecture-first focus.
- Evaluate areas of inefficiency and ineffectiveness and improve practices in response.
- Create more proficient teams.
- Improve individual skills.
- Improve team interactions.
- Improve organizational capability.
- Use integrated tools that exploit more automation.
- Improve human productivity through advanced levels of automation.
- Eliminate sources of human error.
- Support improvements in areas of process weakness.
Most software experts would also stress the significant dependencies among these trends. For example, new tools enable complexity reduction and process improvements; size-reduction approaches lead to process changes; and process improvements drive tool advances.
In addition, IT executives need to consider other trends in software economics whose importance is increasing. These include the lifecycle effects of commercial components-based solutions and rapid development (often a source of maintenance headaches); the effects of service-oriented architectures; the effects of user priorities and value propositions (often keys to business case analysis and to the management of scope and expectations); and the effects of stakeholder/team collaboration and shared vision achievement (often keys to rapid adaptation to changes in the IT marketplace).