Study Notes on Software Project Management Course

Introduction to the Course

  • Introduction to Software Project Management


Motivations for Software Project Management

Overview of the Need for Process

  • Many courses in computer science and electronic engineering focus mainly on:

    • Technical aspects of software development.

    • Notations for good software practices

    • Examples include writing requirements, testing methodologies, system modeling (UML), and coding languages like Java.

  • A key emphasis is placed on the requirement for a well-defined and managed process to organize activities efficiently and in a controlled manner to build good software.

Importance of Controlled Processes

  • It is highlighted that:

    • Writing good requirements is ineffective without a controlled process for managing changes and tracking revisions.

    • Testing techniques become meaningless without adequate time for testing, potentially resulting in projects running behind schedule.

    • Development involves various activities unrelated to coding, such as:

    • Training users

    • Packaging products

    • Managing publicity and communication

    • Writing user documentation

Delivering Quality Product On Time and Within Budget

  • To successfully deliver a product on time and within budget while meeting agreed-upon quality characteristics, it is necessary to:

    • Establish a process for defining schedules and budgets.

    • Agree upon quality characteristics of the product.

    • Utilize a set of techniques to:

    • Define

    • Agree on

    • Plan

    • Execute

    • Monitor

    • Essential factors include goals, quality, time, and costs.


Skills and Goals of the Course

Competences Required for Managing Software Projects

  • Successful software project management requires specific competences, skills, and techniques.

Key Questions Addressed by the Course

  • At the end of this course, students will be able to answer the following questions:

    • How do I estimate task completion times?

    • How much will I charge for a project?

    • What methods can I use to keep the team motivated and ensure projects facilitate learning and career development?

    • How can I manage project risks effectively?

    • What techniques are used to assess if the project remains on time and within budget?

    • How can I ensure the quality of the final output?


Software Project Management Characteristics

Multidisciplinary Nature of Project Management

  • Project management techniques are inherently multidisciplinary, applicable across virtually all engineering domains.

Unique Characteristics of Software Projects

  • Management of software projects is particularly intriguing due to:

    • Intangibility of the product.

    • Flexibility of the product (e.g., different sizes and constraints).

    • Software projects often being one-off endeavors.

    • Uniquely flexible development processes.

    • Exponential growth in size and complexity of projects.

    • Critical nature of software, particularly in applications where human lives depend on proper function (e.g., airplane control systems).


Complexity in Software Projects

Historical Context of Space Missions and Software Complexity

  • Presentation of data from historical missions highlighting complexity in software development:

    • The computing capacity of the entire Saturn V rocket, including all stages and modules, was less than that of a typical modern cellphone.

    • Source: Apollo by Charles Murray and Catherine Bly Cox.


A Brief History of Software Project Management

Frederick Winslow Taylor's Scientific Management

  • Introduced in the beginning of the 20th century:

    • First theory of work and management.

    • Characterized by a negative view of workers.

    • Features of his theory include:

    • Scientific definition of work.

    • Scientific selection of personnel.

    • Division of responsibilities among workers and management.

    • Incentives and rest periods to boost worker efficiency.

Henry Gantt and the Gantt Chart

  • Developed during World War I:

    • Introduced the Gantt chart for project scheduling and monitoring.

    • Originally utilized for shipbuilding.

    • Helped distinguish between work efforts and progress.

Example of Gantt Chart
  • A sample Gantt chart format showing scheduling of tasks for various machines.

Development in the Fifties and Sixties

  • World War II:

    • Development of process flow diagrams in the Manhattan Project.

  • 1957: Development of the Critical Path Method (CPM)

    • A mathematically based algorithm for scheduling project activities, initiated by DuPont and the Remington Rand UNIVAC team.

  • 1958: Introduction of the Program Evaluation and Review Technique (PERT) during the U.S. Navy Polaris missile program, developed by Booz Allen & Hamilton.

Motivation Behind CPM and PERT

  • The purpose of CPM and PERT is to determine which activities could delay project delivery.

Developments From the 1960s Onwards

  • The 1960s witnessed:

    • Standardization and automation in government contracts due to major projects like Vietnam and NASA Apollo, leading to:

    • Adoption of PERT/COST and WBS in government projects.

    • Introduction of Earned Value Analysis (EVA) for better schedule and cost monitoring.

    • Emergence of project management organizations (PMI, IPMA) to promote professional techniques.

  • 1970 marked the inclusion of software development into project management practices, with:

    • Implementation of EVA for monitoring.

    • Adoption of the Waterfall model of software development and the identification of numerous pitfalls in software development defined in The Mythical Man-Month.

The Computer Revolution

  • 1980s:

    • Significant growth of hardware and software, granting accessibility of project management tools to smaller firms. Exponential growth in hardware capability aligned with Moore’s Law.

  • 1990s:

    • Focus on total quality and responsive organizational structures.

  • Today:

    • Trends in web applications and various new models for application distribution. Emphasis on component and framework development, along with agile methodologies that prioritize quick interactions and continuous feedback.