Overview of Software Project Planning
- Software Project: A Software Project is the complete procedure to develop software.
- It starts with requirement gathering and goes through implementation using some methodologies.
- The process is carried out within a specified period of time.
Categorization of Software
The categories of software development projects range from small, simple applications to large, complex
systems. Projects can be classified based on the following criteria:
- Scope and Significance: Projects can be National or International.
- National Project: These projects are undertaken either by the government or
assigned to private entrepreneurs within a country.
- International Project: These projects involve "Foreign investors" and can
take the form of joint ventures, MNCs, and collaborations between two companies.
-
Type: In the context of software projects, the type refers to the nature of the
project, and based on that, projects can be categorized as industrial or non-industrial.
-
Industrial: Industrial projects are undertaken with the primary goal of
contributing to the economic development.
-
Non-Industrial: Non-Industrial projects may focus on aspects related to
welfare and the maintenance of a standard of living.
-
Level of Technology: In the realm of software projects, the level of technology
used plays a crucial role. These projects can be subdivided into four categories based on the
technology employed:
-
Conventional Technology Projects:
These are projects that rely on familiar and well-established technologies, making use of
proven methods and tools.
-
Non-Conventional Technology:
Non-conventional technology projects involve the implementation of the latest or innovative
technologies, often pushing the boundaries of what is currently known and used.
-
High-Tech Project:
High-tech projects necessitate substantial investments in cutting-edge technologies.
Examples include space projects, nuclear power projects, and other ventures at the forefront
of technological advancement.
-
Low-Tech Projects:
Low tech projects, on the other hand, require simpler or more traditional technological
solutions. They may not involve significant investments in advanced technology but rather
focus on practical and cost-effective solutions.
-
Size and Scale of Operations: Projects can be categorized based on the size and
scale of their operations, distinguishing between large scale, medium scale, and small scale
initiatives.
-
Small Scale Projects:
These are projects typically completed within 1-2 years and with an investment below Rs. 5
crores.
-
Medium Scale Projects:
Medium scale projects have a completion timeline within 2-5 years and an investment ranging
from Rs. 5 to Rs. 10 crores.
-
Large Scale Projects:
Large scale projects are characterized by completion periods of 5-10 years and an investment
exceeding Rs. 100 crores.
-
Ownership and Control: Projects can be categorized based on ownership and control,
differentiating between public sector, private sector, and joint sector initiatives.
-
Public Sector Projects:
These are fully owned and controlled by the government, such as projects related to power
generation and mineral extraction.
-
Private Sector Projects:
Private sector projects are fully owned by individuals and companies, such as newspapers and
magazines.
-
Joint Sector Projects:
Projects in this category are run and controlled jointly by both the government and private
individuals.
Introduction to Stepwise Project Planning
Stepwise Project Planning is a structured approach used to manage projects effectively. It involves
several key steps to ensure that the project is well-defined, feasible, and manageable. Let's understand
each steps:
- Project Scope and Feasibility:
- This step involves defining the project's goals, objectives, and boundaries. You determine
what the project aims to achieve and what it will deliver. This includes specifying the
features, functionalities, and outcomes expected from the project. Additionally, you assess
the feasibility of the project by considering factors such as available resources, budget
constraints, technological capabilities, and timeline requirements. The goal is to ensure
that the project is realistic, achievable, and aligned with the organization's objectives.
- Analyze Risk:
- In this step, you identify potential risks and uncertainties that could impact the success
of the project. Risks can arise from various sources, including technological challenges,
market fluctuations, regulatory changes, resource constraints, and external dependencies.
After identifying these risks, you assess their likelihood of occurrence and potential
impact on the project's objectives, timeline, budget, and quality. You then develop risk
mitigation strategies and contingency plans to address and manage these risks effectively
throughout the project lifecycle.
- Define Required Resources:
- This step involves determining the resources needed to execute the project successfully.
Resources include human resources (such as skilled team members and subject matter experts),
financial resources (budget allocation for expenses like salaries, equipment, and
materials), and physical resources (office space, technology infrastructure, software
tools). You identify and allocate resources based on project requirements, timelines, and
budget constraints. Proper resource planning ensures that the project has the necessary
support to meet its objectives efficiently.
- Estimate Cost and Effort:
- In this step, you estimate the total cost and effort required to complete the project. Cost
estimation involves calculating expenses related to labor, materials, equipment, facilities,
overheads, and any other project-related costs. Effort estimation focuses on estimating the
amount of work, time, and resources needed for each task, activity, or phase of the project.
This includes estimating the duration of tasks, identifying dependencies, and allocating
resources appropriately. Accurate cost and effort estimation are crucial for budgeting,
resource allocation, and project scheduling.
- Develop an Initial Project Schedule:
- Here, you create a detailed project schedule that outlines the sequence of tasks,
milestones, and deadlines for completing the project. The schedule includes key activities,
their start and end dates, task dependencies, resource assignments, and critical path
analysis. By developing a clear project schedule, you ensure that all team members
understand their roles and responsibilities, deadlines are met, and progress is tracked
effectively. The schedule serves as a roadmap for project execution and helps in monitoring
and controlling project progress.
- Repeat Steps 1-5 for Each Prototype:
- If your project involves multiple versions, iterations, or prototypes, you repeat the above
steps for each iteration. This iterative approach allows you to refine and improve the
project based on feedback, testing, and lessons learned from previous versions. Each
iteration follows the same structured planning process to ensure that goals are met, risks
are managed, resources are optimized, costs are controlled, and schedules are maintained.
Iterative planning and development lead to continuous improvement and deliver value
incrementally throughout the project lifecycle.
Example: Suppose you're planning to develop a new mobile app. You start by defining the app's scope,
features, and feasibility, ensuring it aligns with user needs and market demands. Then, you analyze
potential risks like technical challenges, competition, and market trends, developing strategies to
mitigate these risks. Next, you identify the required resources such as developers, designers, and
budget allocations for development tools and marketing efforts. After estimating the cost and effort
needed, you create a detailed project schedule with milestones like app design completion, beta testing,
and app launch. If you plan to release updates or new versions, you repeat these planning steps for each
iteration, refining the app based on user feedback and market analysis. This iterative approach ensures
that the app evolves, meets user expectations, and remains competitive in the market.
Project Scope
Project scope encompasses the following aspects:
-
Integration and Constraints:
Determine how accurately the project fits into a larger system and identify any constraints
associated with the project.
-
Desired Output:
Clearly define the desired output that the project should produce.
-
Input Requirements:
Specify the input data required for the project.
-
Transformative Functions:
Identify the functions responsible for transforming input data into the desired output.
-
Example:
An example of the project scope is ensuring that customers can easily navigate the website, search
for products, and complete the checkout process seamlessly.
When defining project scope, it's essential to explicitly state the following information:
- Quantitative Data: Clearly specify any measurable data associated with the project,
such as timelines, budget, or performance metrics.
- Constraints and/or Limitations: Outline any restrictions or limitations that may
impact the project, such as budget constraints, time constraints, or technological limitations.
- Modifying Factors: Identify any factors that could potentially modify or influence
the project's scope, ensuring a comprehensive understanding of the conditions under which the
project will be executed.
Infrastructure
A software development infrastructure typically consists of tools, processes, and services used to
develop, test, deploy, and manage software applications. The most common components include:
- Integrated Development Environment (IDE): An IDE is a software application that
provides a graphical user interface (GUI) to manage the codebase and build applications. Examples
include Visual Studio Code, JetBrains IntelliJ, and Eclipse.
- Issue Tracking and Workflow Management: An issue tracking system helps track and
manage bugs and issues. Examples include JIRA, Asana, and Trello.
- Source Control Management: Source control management systems store and track
changes to the codebase. Examples include Git, GitHub, and BitBucket.
- Code Quality Management: Code quality management systems help developers ensure
that their code meets specific standards. Examples include SonarQube, PMD, and Checkstyle.
- Application Performance Management: APM tools help developers monitor and optimize
the performance of their applications. Examples include New Relic, AppDynamics, and Dynatrace.
- Dependency Management: Dependency management systems help developers manage the
dependencies of their applications. Examples include Apache Maven, Gradle, and Ivy.
- Testing Frameworks: Testing frameworks allow the automatic execution of tests to
ensure code quality standards. Examples include Selenium, WebDriverIO, and Cypress.
- Continuous Integration: Continuous integration build servers automatically detect
code changes, then build and package code changes to produce deployment artifacts. Examples include
Jenkins, GitLab, and TravisCI.
- Continuous Deployment: Deployment pipelines provide a mechanism for automatically
deploying code changes to staging and, if desired, production environments. The tools used for CD
are often the same as those for CI.
- Containerization Tools: Containerization tools help developers package applications
and dependencies into self-contained units. Examples include Docker, Kubernetes, and Apache Mesos.
Resource Allocation
Resource allocation in software engineering involves distributing and utilizing resources effectively to
facilitate successful project development. The three major categories of software engineering resources
are:
- People: Allocate human resources, defining roles and responsibilities for team
members. Consider the skills, expertise, and availability of individuals to form an effective
project team. This includes assessing skills, geographical location, and determining the number of
team members.
- Reusable Software Components: Identify and allocate existing software components
that can be reused in the project. This includes Commercial Off-The-Shelf (COTS) components, new
components, and fully experienced components for faster development. Reusing components helps save
time, effort, and ensures consistency in software development.
- "COTS" stands for "Commercial Off-The-Shelf." COTS
refers to pre-built software products or components that are commercially available and can
be purchased or licensed for use in a project. These are ready-made software solutions
developed by third-party vendors for a wide range of applications.
- Development Environment: Allocate the necessary tools, software, hardware, and
infrastructure required for development, testing, and deployment. This involves provisioning
software tools, hardware resources, and network infrastructure. Create an environment that supports
efficient coding, testing, and collaboration.
Project Plan Execution
Project Plan Execution is a critical phase in project management where the planned activities are carried
out to achieve project objectives. This phase follows project initiation and planning, ensuring that the
project progresses according to the established plan. Effective project plan execution involves
allocating resources, assigning tasks, monitoring progress, and making necessary adjustments to stay on
track. It is a dynamic and hands-on phase that focuses on turning plans into tangible results.
Understanding the key components of project plan execution is essential for successful project delivery
and achieving desired outcomes within scope, time, and budget constraints. Let's delve into the stages
of project plan execution to gain insights into how projects are executed and managed effectively.
-
Project Initiation Stage:
During this stage, the project's purpose, objectives, and feasibility are determined. Key
stakeholders are identified, and their roles and responsibilities are defined. The initial scope
of the project is outlined, and a project initiation document is created. This stage sets the
foundation for the project by clarifying its goals, constraints, and success criteria.
-
Project Planning Stage:
In this stage, the detailed project plan is developed. This includes defining project scope,
objectives, deliverables, milestones, tasks, timelines, resources, and budgets. Risk management
strategies, communication plans, and quality assurance processes are also established. The
project plan serves as a roadmap for the project's execution and guides all activities and
decision-making throughout the project lifecycle.
-
Project Execution Stage:
The execution stage involves implementing the project plan and carrying out the planned
activities. Resources are allocated, tasks are assigned to team members, and work begins
according to the project schedule. Communication channels are established, and progress is
monitored to ensure tasks are completed on time, within budget, and according to quality
standards. This stage is focused on delivering the project's outputs and meeting stakeholder
expectations.
-
Project Monitoring & Controlling Stage:
During this stage, project progress is monitored, and performance is measured against the project
plan. Key performance indicators (KPIs) are tracked to assess progress, identify variances, and
take corrective actions as needed. Changes to the project scope, schedule, or resources are
managed through change control processes. Regular reporting and status updates keep stakeholders
informed about project status and any issues or risks that arise.
-
Project Closure Stage:
The closure stage marks the end of the project and involves finalizing all project activities and
deliverables. Project outcomes are reviewed, and stakeholders evaluate whether project
objectives have been achieved. Lessons learned are documented, and final project reports,
documentation, and approvals are completed. Resources are released, contracts are closed, and
the project is formally closed out. This stage ensures that the project's results are
transitioned appropriately and that organizational knowledge is captured for future projects.
Example: Imagine you're leading the development of a new e-commerce platform. In the initiation stage,
you define the project's goals and requirements, such as user accounts, product listings, and payment
processing. During planning, you create a detailed project plan with development phases, resource
allocations, and testing strategies. As you enter the execution stage, developers start coding backend
functionalities and designers work on UI/UX elements. Simultaneously, testers conduct unit testing and
integration testing. Throughout the project, you use agile methodologies for progress monitoring,
holding regular meetings and using continuous integration tools. Once development is complete, you move
into the closure stage, finalizing documentation, obtaining approvals, and ensuring a smooth handover.
Lessons learned are documented for future software projects, ensuring continuous improvement.
Software Project Estimation
Estimating the cost and effort required for developing a software project is a critical aspect of project
planning and management. Several approaches are used in software project estimation to ensure accurate
and realistic estimations:
-
Delay Estimation until Late in the Project:
Delaying estimation until later stages of the project involves gathering more information and
data as the project progresses. This approach allows for more accurate estimations based on
concrete project details, requirements, and progress metrics. It is particularly useful when
project requirements are unclear or subject to change.
-
Base Estimates on Similar Completed Projects:
Basing estimates on similar completed projects involves leveraging historical data and lessons
learned from past projects with similar characteristics, scope, and complexity. This approach
helps in providing initial estimates based on real-world experiences, project outcomes, and
performance metrics, leading to more reliable estimations.
-
Use Relatively Simple Decomposition Techniques:
Employing relatively simple decomposition techniques involves breaking down the project into
manageable tasks, components, or modules based on a basic decomposition strategy. This approach
is useful for estimating effort, time, and resources required for individual project elements,
ensuring a structured and systematic approach to estimation.
-
Use One or More Empirical Models:
Using empirical models involves applying mathematical models, algorithms, or statistical
techniques to predict project costs, effort, and duration based on historical data, industry
benchmarks, and project parameters. Empirical models incorporate factors such as project size,
complexity, team capabilities, and technology used to generate estimations.
Decomposition Techniques
Decomposition techniques are fundamental strategies used in project management and software development
to break down complex tasks into manageable components. These techniques play a crucial role in
estimating project effort, defining project scope, and allocating resources effectively. Decomposition
techniques involve a divide-and-conquer approach to software project estimation. Let's explore
the key decomposition techniques
1. Software Sizing
Software sizing involves quantifying the size or volume of software components, such as lines of
code, function points, or object-oriented metrics. This technique helps in estimating the effort
required for software development, determining project timelines, and evaluating resource
requirements based on the size and complexity of the software.
2. Problem-based Estimation
Problem-based estimation focuses on breaking down project requirements and tasks based on specific
problems or functionalities. It involves analyzing the project scope, identifying distinct problems
or features, and estimating effort, time, and resources needed to address each problem individually.
This approach enables a more detailed and accurate estimation of project complexity and work effort.
3. Process-based Estimation
Process-based estimation involves decomposing project activities and tasks based on the underlying
processes involved in software development. It breaks down the project into phases, stages, or
workflows, identifying key processes and subprocesses required to complete the project. This
technique helps in planning project activities, allocating resources efficiently, and managing
project dependencies and workflows effectively.
These decomposition techniques are essential tools for project managers, software developers, and
estimation teams to create realistic project plans, set achievable milestones, and optimize resource
utilization throughout the project lifecycle. Understanding and applying these techniques contribute to
successful project execution and delivery of high-quality software solutions.
COCOMO Model
- Developed by scientist Barry Boehm in 1981.
- The COCOMO (Constructive Cost Model) is widely recognized as one of the most popular software cost
estimation models.
- This model relies on the size of the software, which is typically measured by the number of lines of
code, for predicting the effort, total project cost, and scheduled time required for software
product development.
- It aims to estimate the effort needed for a project, the overall project cost, and the scheduled
time for project completion.
Software Project Types
In COCOMO, projects are categorized into three types:
- Organic Type:
- Project is small and simple (2-50 KLOC - Line of Code).
- Few requirements for the project.
- Project team is small with prior experience.
- The problem is well understood and has been solved in the past.
- Examples: Simple inventory management systems and data processing systems.
- Semidetached Type:
- Medium size with mixed rigid requirements (50-300 KLOC).
- Project has moderate complexity.
- Team consists of both experienced and inexperienced members.
- Some known and some unknown modules in the project.
- Examples: Database management system, moderately complex inventory management system.
- Embedded Type:
- Large project with fixed resource requirements (more than 300 KLOC).
- Larger team size with limited previous experience.
- High levels of complexity, creativity, and experience required.
- Examples: ATM software, Air Traffic Control systems, Banking software.
Types of COCOMO Model
- Basic COCOMO Model:
- The Basic COCOMO model is the simplest version. It estimates the software development effort (in person-months) and cost based on the size of the software project in terms of thousands of lines of code (KLOC).
- Example: For a small application with approximately 5,000 lines of
code, the Basic COCOMO model can provide a rough estimate of the development effort and
time required without considering other influencing factors.
- Intermediate COCOMO Model:
- The Intermediate COCOMO model provides a more detailed estimation by considering additional factors that affect software development. These factors, known as cost drivers, include:
- Product attributes: Required software reliability, database size, product complexity.
- Hardware attributes: Execution time constraints, storage constraints, virtual machine volatility, computer turnaround time.
- Personnel attributes: Analyst capability, application experience, programmer capability, virtual machine experience, language and tool experience.
- Project attributes: Use of modern software tools, application of software engineering methods, required development schedule.
- Example: For a medium-sized project, the Intermediate COCOMO model
would take into account factors such as the complexity of the software, the experience
level of the development team, and the constraints of the hardware being used to provide
a more accurate estimation.
- Complete/Detailed COCOMO Model:
- The Detailed COCOMO model is the most comprehensive version. It breaks the software project into different components and applies the Intermediate COCOMO model to each component separately. This model accounts for the influence of various factors on each phase of the development lifecycle, such as design, coding, and testing. It provides the most accurate estimation by considering the interaction between different cost drivers and the specific needs of each project phase.
- Example: For a large-scale enterprise software project, the Detailed
COCOMO model would take into account multiple factors such as the required software
reliability, the size of the database, the experience and capability of the development
team, the complexity of the software, and the tools and methodologies used. This results
in a precise estimation of the effort, cost, and time required for the project.
Cost-Benefit Analysis
A cost-benefit analysis model for reengineering, as proposed by Sneed, involves the consideration of
nine parameters:
- P1: Current annual maintenance cost for an application
- P2: Current annual operations cost for an application
- P3: Current annual business value of an application
- P4: Predicted annual maintenance cost after reengineering. (Reengineering refers to the process of
making significant modifications or enhancements to
the existing system to improve its performance, functionality, or other relevant aspects.)
- P5: Predicted annual operations cost after reengineering
- P6: Predicted annual business value after reengineering
- P7: Estimated reengineering cost
- P8: Estimated reengineering calendar time
- P9: Reengineering risk factor (P9 = 1.0 is nominal)
- L: Expected life of the system
The cost associated with continuing maintenance of a candidate application (i.e., reengineering is not
performed) can be defined as:
C_maint = (P3 - (P1 + P2)) * L
The costs associated with reengineering are defined using the following relationship:
C_reeng = P6 - (P4 + P5) * (L - P8) - (P7 * P9)
Using the costs presented in Equations (1) and (2), the overall benefit of reengineering can be computed
as:
Cost benefit = C_reeng - C_maint