What are the drivers of good software development that will maximize the chances for successful project outcomes? In the preceding pages we have provided an analysis of the critical issues to which project stakeholders must pay attention to ensure successful outcomes. In particular, we have emphasized the need to maintain a proper balance at all times among the elements that make up the project triangle of resources, features, and schedule. The chapter's focus has not been on processes, because these may vary from one organization to another and from project to project. Instead the thrust of the discussion has been to bring to the fore fundamental issues that have the potential to distort the balance of the project triangle, limiting the likelihood of a successful project outcome.To be successful, software development must begin with a clear focus on the goals and objectives the completed project is expected to achieve. These goals and objectives in turn drive the requirements analysis and determination process. Successful requirements are always the product of a clear, comprehensive understanding of the problem domain by all stakeholders involved in the development effort. Senior management will come to appreciate the resources needed for the project; the technical personnel will come to appreciate the desired systems features as appropriately derived from the requirements analysis and specifications, as will the potential users of the completed system; finally, the schedule will be based on a realistic assessment of the impact of both resources and features on the completion time frame.Once the project is launched, the active involvement in the form of support and commitment of all stakeholders, from senior management to end users, will be needed to maximize the chances of a successful outcome. In putting together the project team, it is important that attention be paid to the "development personalities" of people selected as well as to their technical and/or organizational skills and capabilities to contribute to the work of the team (Howard 2001).Earlier chapters discussed the fundamental need for the appropriate technology infrastructure to provide a foundation for the project development. Lack of the requisite technology infrastructure can create significant obstacles in the development effort, such that the chances for successful outcome are substantially reduced. The technical skills, experience, and capabilities of the design team will, to a great extent, influence or determine the quality of the design, and the design of the software will invariably reflect the existing technology base. However, the work of the team should be guided by sound industry practices and must stay within the technical capabilities of the organization. This means the level of innovation should be such that it can be sustained within the group and supported by the available technology infrastructure. Attempts to reach for the most advanced features are often the source of software development failure. This pragmatic attempt at innovation should not stifle the creativity of the design team in arriving at a design solution that fully satisfies the accepted goals and objectives of the software. The design will undoubtedly be subjected to changes in the course of the development. The critical issue is to be able to manage the change control process so as not to unduly introduce wide variations in the design, which significantly affect the resource requirements and the completion schedule. The schedule must not be dictated from on high but must be set by those actually doing the development working in close consultation with other stakeholders, especially those who control project resources, including the budget. When consultants are used in the development, their selection must be made objectively and their work monitored closely for adherence to the project's requirements.In general, superior designs are likely to lead to superior software if there are processes in place to guide the development. As always, comprehensive knowledge and understanding of the problem domain will be critical to a good design. Good design, though always crucial, will not automatically produce the quality software desired; managing the development process is every bit as important. Because software design is essentially a creative learning process, as the team becomes more familiar with the requirements, incremental steps can be taken to incorporate the various functionalities that need to be satisfied and still maintain the requisite balance among the elements of the project triangle. Project management begins with the selection of projects and the choice of project leadership, whose guidance and ability to maintain the requisite balance among the elements of the project will maximize the chances of a successful outcome. The operating environment for software development is also not devoid of organizational politics. The stakeholder-interaction model makes explicit the political processes associated with software development. An open, flexible environment that encourages the free communication of ideas, problems, and solutions is the crucial ingredient that every software development project needs in order to succeed. Further, the sharing of power, the spreading of responsibilities, and the holding of individuals accountable for their actions are the hallmarks of a good software development team likely to succeed in creating highquality software within budget and on schedule.