Goals of Software Development
High-quality, low-cost, and timely delivery are the primary goals for software development. Here, "quality" and "cost" are interpreted broadly. Quality includes, but is not necessarily limited to, functionality, fitness for a purpose, assurance (including reliability, survivability, availability, safety, and information security), efficiency, ease of use, interoperability, future adaptability (including extensibility, maintainability, portability, scalability, and compliance with standards), and development of DOD's software expertise. Cost includes, but is not limited to, full life-cycle monetary costs (i.e., both shortand long-term costs) and the extent of use of other scarce resources such as expert personnel. Cost also includes assessment of program risk and monetary and non-monetary consequences of system failure. Timely delivery, or schedule, is listed as a third goal because it is difficult to classify as either a quality or cost factor. These overriding goals are reflected in the following statements, which the committee believes should serve as guidance for DOD software development.
- Projects will specify and prioritize quality, cost, and schedule goals, and will analyze trade-offs and the business-case for particular decisions. Failure to articulate and prioritize project requirements appropriately, and to analyze them in the context of their impacts on cost and schedule, commonly leads to project failure or inappropriate acquisition decisions. It is not reasonable for DOD to specify a single prioritization of goals, because the importance and relevance of different factors vary widely. However, projects should conduct an analysis and defend it in the review process. Requirements should not be overstated, an approach that often has the effect of ruling out simpler, more cost-effective solutions.
- Projects will not develop new software unless quality, cost, and schedule goals cannot be met with non-developmental items (NDIs). Developing and maintaining new software within projects tend to be more expensive than reusing suitable existing software.
- Commercial items are preferred over other non-developmental items if they meet quality, cost, and schedule constraints. True commercial items will spread the costs of maintenance and improvement over a larger base, leading to cost savings. Issues such as possible "lock-in" to a single source should be considered as constraints to achieving desirable qualities such as adaptability and portability.
- Software development will emphasize good software engineering practice, including the application of management techniques, methodologies, support tools, metrics, and appropriate programming languages. Good practices provide better quality at lower cost, regardless of which programming language is used. Good practices also tend to improve timeliness and reduce risk.
- Software developers should be chosen based on their experience, a criterion that includes, but is not limited to, successful past performance; experience in the software domain or product-line; use of appropriate management techniques, methodologies, support tools, and metrics; and mature software engineering capability and expertise.
- Projects will, when possible, exploit and/or contribute to open system architectures and common product-lines, frameworks, and libraries. Investment in commonality, where feasible, increases portability and opportunities for reuse, and reduces cost.
- Projects will avoid developing project-specific tools and technologies unless the cost, schedule, and/or quality advantage can be defended. Such development is expensive and is seldom justified.