Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
Part 1 of this book described many of the challenges facing software developers today to provision enterprise-scale solutions. By reviewing and distilling the challenges discussed in the previous chapters, we obtain the following goals and objectives for enterprise-scale solutions in the Internet age:
Contain complexity. In any complex situation there are a few basic techniques that can be used to understand and manage that complexity. These are the techniques of abstraction, decomposition, and incremental development. Any solution to application development must provide ways to support these techniques.
Reduce delivery time. The ability to deliver solutions in a timely manner is an essential aspect of any software development project. With the increased rate of change of technology, this aspect is even more critical. This need for reduced delivery time for software-intensive systems is often referred to as working at "Internet speed."
Improve consistency. Most software-intensive systems share significant characteristics with others previously developed, in production, or yet to be produced. It must be possible to take advantage of this commonality to improve consistency and reduce development expense.
Make use of best-in-class. In a number of areas there are well developed solutions offering robust, best-in-class functionality and performance. Taking advantage of these solutions as part of a larger development effort is essential.
Increase productivity. The shortage of software development skills is causing a major backlog for systems users. Any new approaches must improve the productivity of skilled employees to allow them to produce quality results at a faster rate.
Improve quality. As the economic and human impact of failure of software-intensive systems increases, greater attention must be turned to the quality of the deployed systems. A goal must be to support the building of systems correctly the first time, without extensive (and expensive) testing and rewriting.
Increase visibility into project progress. Managing large software projects is a high-risk undertaking. To help this, greater visibility must be possible throughout the software life cycle. This requires an incremental approach to development, delivery, and testing of software artifacts.
Support parallel and distributed development. Distributed development teams require approaches that encourage and enable parallel development of systems. This requires specific attention be given to manage complexity due to the need to partition and resynchronize results.
Reduce maintenance costs. The majority of software costs occur after initial deployment. To reduce maintenance costs it must be possible to more easily identify the need for change, scope the impact of any proposed change, and implement that change with predictable impact on the rest of the system.