Software Project Organization Introduction: Organizing a Software Engineering project involves developing an effective and efficient organizational structure for assigning and completing project tasks and establishing the authority and responsibility relationships among the tasks. Organizing involves: - Itemizing project activities required to achieve project objectives. - Arranging project activities into logical clusters. - Assigning groups of activities to various organizational entities. - Delegating responsibility and authority needed to carry out the activities. Major Issues in organizing: The major issues in organizing a software engineering project are as follows: - It is difficult to determine the best organizational structure for a particular organization and/or environment (for example, project, functional, matrix) to manage the project. - An organizational structure may leave responsibilities for some project activities and tasks undefined or unclear. - A matrix organizational structure is not accepted by many software development personnel. - Many team leaders are expected to perform technically as well as manage his/her team. 1 Organizing Activities for a Software Project: Activity Identify and group project functions, activities, and tasks Select organizational structures Create organizational positions Define responsibilities and authority Establish Position Qualifications Document organizational decisions Definition or Explanation Define, size, and categorize the project work. See Table 1 for example. Select appropriate structures to accomplish the project and to monitor, control, communicate, and coordinate. Establish title, job descriptions, and job relationships for each project role. Define responsibilities for each organizational position and the authority to be granted for fulfillment of those responsibilities. Define qualifications for persons to fill each position. Document titles, positions, job, descriptions, responsibilities, authorities, decisions, relationships, and position qualifications. Project Organization Structures: There are three main types of organizational structures: 1. Functional Project Organization: - The project is organized into a number of functional groups, each group accomplishes its responsibilities and passes the project to the next group to complete other functional activities of the project. (Figure 1) Project management is distributed among functional groups managers. 2 Figure 1. 2. Project Organization: - The project manager creates a project group accomplishing all activities of a given project (Figure 2). Project manager has total authority over project. for Figure 2. 3 3. - Matrix Project Organization (the two boss system): A combination between the project and functional project organizations. (Figure 3) The project manager has the responsibility for managing and completing the project. The functional managers provide the resources (employees) needed to conduct the project. Not a widely acceptable form of project organization. Project authority must be clearly defined by upper management. Figure 3. Software Project Teams: There are three main types of software project teams: 1. The Egoless Programming Team (the democratic team): - Consists of 10 to 12 members 4 - 2. Decisions are made by consensus Group leadership responsibility rotates No permanent central authority Rarely found today, however, sometimes used in research organizations. The Chief Programming Team: - Consists of 3 or 4 permanent team members: chief programmer, backup programmer, and librarian. Other programmers or analysts are assigned as needed. Chief programmer makes all technical and managerial decisions. Rarely used today, because of difficulty in recruiting and training chief programmers. 3. - The Hierarchical Team (the controlled decentralized team, and project team): Has a top-down flow of authority Project leaders manage senior engineers programmers). Senior engineers manage junior engineers (junior programmers). Most commonly used team structure today. (senior 5 Table 1 6