Introduction to Software Engineering:
In order to organize and manage a software development project successfully, one must combine specific knowledge, skills, efforts, experience, capabilities, and even intuition. They are all necessary in order to be able answer questions such as: What artifacts to manage and control during software development? How to organize the development team? What are the indicators and measures of the product's quality? How to employ a certain set of development practices? How to transition a software development organization to a new modeling and/or development paradigm? How to create and maintain a good relationship with the customers and end-users? What remedial actions to take when something goes wrong in the course of the project? What are the heuristics that can help managers in conducting the software development process
The manager of a software development project should answer the above questions in the context of the project itself. However, there is a vast amount of knowledge the manager should possess that transcends the boundaries of any specific project.
The purpose of this chapter is to provide an extended overview of many important issues around which such knowledge should be structured. The introductory section merely introduces the issues and the context within which the other sections discuss them. Each of the remaining sections covers one of the issues in more detail. The idea has been to provide a balanced coverage of the issues from both the manager's and the developer's perspectives.
Software development is a complex process involving such activities as domain analysis, requirements specification, communication with the customers and end-users, designing and producing different artifacts, adopting new paradigms and technologies, evaluating and testing software products, installing and maintaining the application at the end-user's site, providing customer support, organizing end-user's training, envisioning potential upgrades and negotiating about them with the customers, and many more.
In order to keep everything under control, eliminate delays, always stay within the budget, and prevent project runaways, i.e. situations in which cost and time exceed what was planned, software project managers must exercise control and guidance over the development team throughout the project's lifecycle. In doing so, they apply a number of tools of both economic and managerial nature. The first category of tools includes budgeting, periodic budget monitoring, user chargeback mechanism, continuous cost/benefit analysis, and budget deviation analysis. The managerial toolbox includes both long-range and short-term planning, schedule monitoring, feasibility analysis, software quality assurance, organizing project steering committees, and the like.
All of these activities and tools help manage a number of important issues in the process of software development. Figure 1 illustrates some of the issues, but definitely not all of them. The issues shown in Figure 1 have been selected for an extended overview in the remainder of this chapter based on the following criteria:
their priority in the concerns of most software project managers, according to the managers themselves - this is evident from the case studies, interviews, and reports of many software project managers and consultants in software industry worldwide.
their importance as identified by relevant committees, associations, and consortia of software developers.
The chapter does not address the economic aspects of software project management, such as budgeting, negotiating, outsourcing, and contracts. The goal is to consider some of the important managerial issues specific to software development, not those that appear in other kinds of development projects as well.