As you dive into the world of software development, you'll come across different project management models. These models exist to help teams manage complex software projects and ensure that they are delivered on time and within budget.
Some common project management models in the software industry include Waterfall and Agile. In this lesson, we will explore and compare the execution of these two models in software development.
By the end of this lesson, you will have a better understanding of how these models work and which one might be best suited for your future software projects.
Why do you think different project management models exist in the software industry?
How do you think these models got their names? How do you think these names relate to the way these models work?
This model is based on a style of project management that has been around since the 1950s in manufacturing and construction industries, where projects follow a sequential order of events. First introduced by Dr. Winston W. Royce in 1970, the model was adapted to software development, creating the first formalised project management model in the software industry.
Characteristics:
Sequential phases: Each phase in the Waterfall model must be completed before moving on to the next.
(requirements definition, determining specifications, design, development, integration, testing and debugging, installation, and maintenance)
Detailed planning and documentation: with each phase of the project completed before moving on to the next one.
Limited Flexibility: Little room for changes once a stage is completed
Clear objectives: Clear goals and expectations for each phase.
Suited For:
Well-defined requirements: When the project scope and requirements are clear from the beginning.
Stable technology: When the technology being used is well-known and unlikely to change during the project.
Large projects: When the project is large and requires a structured approach with clear milestones to manage its complexity.
Regulatory compliance: When the project needs to meet strict regulatory requirements, and thorough documentation is essential for compliance purposes.
Pros:
Simplicity: The linear nature of this model makes it easy to understand and manage.
Predictability: The Waterfall model's clear milestones and strict order make it easier to estimate / manage timelines and cost.
Clear milestones: Each phase serves as a clear milestone, making it easier to track progress.
Documentation: The emphasis on documentation can be useful for future reference and maintenance, or if team members change.
Holistic: Designers and engineers can develop every component to fit perfectly with the larger whole.
Cons:
Slow: Much more time is allocated to planning and designing up front which can slow down the process.
Rigidity: The limited flexibility makes it difficult to adapt to changes in requirements or technology.
Late feedback: Testing and debugging occur late in the process, making it harder to identify and fix problems early on.
Less Customer-centric: With less communication, products are designed and built based on what developers think their customers want.
Potential for wasted resources: If an issue is discovered late in the project, it may require significant rework.
Department Siloes: Poor inter-departmental communication can lead to a fragmented product creation.
Agile is a modern and flexible approach to software development, focused on collaboration, customer feedback, and continuous improvement. The Agile approach embraces change and allows teams to adapt quickly to new requirements or unforeseen challenges. Agile methodology emerged in the early 2000s as a response to the limitations of traditional development models like Waterfall. The Agile Manifesto, published in 2001, established the core principles of Agile development, emphasizing collaboration, adaptability, and customer satisfaction.
Characteristics:
Incremental and iterative: Agile projects are divided into small, manageable increments called sprints or iterations, usually lasting 2-4 weeks.
Collaboration: Agile encourages cross-functional team collaboration, regular communication, and input from stakeholders.
Continuous feedback: Agile teams seek feedback from customers and stakeholders regularly to ensure the product meets their needs.
Adaptive planning: Agile planning is flexible and revises priorities as needed, based on feedback and project progress.
Suited for:
Projects with changing or unclear requirements: Agile can adapt to new information or changes in priorities.
Teams looking for frequent feedback: Agile encourages regular communication with stakeholders for continuous improvement.
Fast-paced, competitive environments: Agile enables teams to deliver usable features quickly, providing a competitive edge.
Pros:
Improved customer satisfaction: Agile focuses on delivering features that meet customer needs and provide value.
Faster time to market: Agile teams can release small, usable features quickly, allowing customers to benefit from the product sooner.
Better adaptability: Agile teams can respond quickly to changes in requirements or market conditions.
Enhanced collaboration: Agile promotes communication and cooperation among team members and stakeholders.
Cons:
Requires discipline and commitment: Agile teams must be dedicated to collaboration, communication, and continuous improvement.
Lack of formal documentation: Agile prioritizes working software over comprehensive documentation, which can lead to gaps in documentation.
Not suitable for all projects: Agile may not be the best fit for projects with fixed requirements or heavily regulated industries.
Relationship to the Software Development Process:
The waterfall model is easy - it's linear, so the stesps are just followed from the beginning to the end.
How does the software development process work in the agile model?
Requirements definition and determining specifications:
Agile teams gather and prioritize requirements based on customer needs, and update them as necessary throughout the project.
Design:
Agile teams create an initial design that evolves incrementally with each sprint, based on feedback and requirements adjustments.
Development and integration:
Agile teams develop and integrate features in small increments, allowing for continuous improvement and adaptability.
Testing and debugging:
Agile teams perform testing and debugging throughout the project, ensuring that issues are addressed quickly and efficiently.
Installation and maintenance:
Agile teams deploy features as they're ready, and continuously maintain and improve the product based on user feedback / market changes.
Sprints:
A "sprint" is a short, time-boxed period within the Agile approach, typically lasting 2-4 weeks, during which a specific set of tasks or features are planned, developed, tested, and reviewed. Sprints are the fundamental building blocks of Agile development and help teams focus on small, manageable increments of work. At the end of each sprint, the team delivers a potentially shippable product increment, allowing for continuous improvement and feedback. The sprint cycle also includes regular meetings, such as sprint planning, daily stand-ups, sprint review, and sprint retrospective, to ensure effective communication and collaboration among team members.
Break up into groups of 2 or 3 students.
Each group will be assigned one or two different types of software development projects to consider:
Basic Calculator App: A simple calculator app for smartphones with basic arithmetic functions. The project has a small scope with clear requirements, making it straightforward.
Local Bakery Website: A website for a local bakery showcasing their products, contact information, and customer reviews. The client is highly involved and wants to make iterative changes based on customer feedback.
School Library Management System: A software system to manage book inventory, student borrowing, and book reservations for a high school library. The project has a strict timeline and budget with well-defined requirements.
Fitness Tracking App: A mobile app that tracks user's daily exercise, calorie intake, and sleep patterns, with personalized goals and progress reports. The app's requirements are unclear, as it needs to evolve based on user feedback and market trends.
Emergency Alert System: A software system that sends emergency alerts to registered users in case of natural disasters, weather warnings, or security threats. The project has strict regulatory requirements and needs extensive testing before deployment.
Online Art Gallery: A website where artists can display and sell their artwork, and buyers can browse, purchase, and leave reviews. The project requires continuous development due to changing artist preferences and market trends.
Public Transportation Scheduling System: A software system to manage schedules, routes, and delays for a city's public transportation system. The project is large with well-defined requirements and thorough documentation needed.
Social Media Platform: A new social media platform with features like user profiles, messaging, and sharing multimedia content. The project requires rapid development cycles to stay competitive and respond to user feedback.
Bank Account Management Software: A software system for a small bank to manage customer accounts, transactions, and services. The project has strict security and regulatory requirements with a need for comprehensive documentation.
Recipe Sharing App: A mobile app where users can share, discover, and rate recipes, as well as create shopping lists and meal plans. The project has uncertain requirements and a desire to iterate quickly based on user feedback.
Inventory Management System: A software system for a large retail store to manage inventory, sales, and employee scheduling. The project has a clear scope with well-defined requirements.
Virtual Reality Training Simulations: A series of virtual reality training simulations for medical professionals to practice various procedures and protocols. The project is complex with evolving requirements due to advancements in medical technology and practices.
For your assigned project(s), please complete the following tasks:
Create a list outlining the pros and cons of utilizing the Waterfall and Agile models for the development of your project.
Based on your analysis, determine which model is better suited for your project and provide a justification for your decision.
We will share and discuss our findings as a class.