Key Concepts from Unit 1
Traditional SDLC (Waterfall Model)
The Software Development Life Cycle (SDLC) outlines the phases of software creation. The traditional Waterfall Model follows a strict sequence:
- Requirement Gathering
- System Analysis
- Design
- Coding
- Testing
- Implementation
- Operations & Maintenance
This model is linear and struggles with changes once a phase is complete.
What is Agile Development?
Agile is a group of software development processes based on:
- Iterative: Development occurs in repeating cycles (iterations).
- Incremental: Software is delivered in functional pieces (increments).
- Self-organizing: Teams manage their own work to achieve goals.
It focuses on flexibility, collaboration, and responding to change.
Agile vs. Traditional Methods
A key difference lies in how they handle project constraints:
- Traditional (e.g., Waterfall): Features/Functionality are usually Fixed upfront. Time and Resources are flexible (often leading to delays/overruns).
- Agile: Time (iterations) and Resources (team size) are often Fixed. Functionality is flexible and evolves based on priority and feedback.
This means Agile focuses on delivering the *most valuable* features within a fixed timeframe and budget, while Traditional methods aim to deliver a *fixed set* of features, often at the expense of time and budget predictability.
The Agile Manifesto
Defines the core values guiding Agile development:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
While there is value in the items on the right, Agile values the items on the left more. This is a declaration of priorities, emphasizing people, functionality, partnership, and flexibility.
Agile Principles (Selected)
The Agile Manifesto is supported by 12 principles. Some key ones include:
- Highest priority is to satisfy the customer through early and continuous delivery of valuable software. (Deliver value often)
- Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage. (Embrace change)
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. (Frequent delivery)
- Business people and developers must work together daily throughout the project. (Close collaboration)
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. (Trust individuals)
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. (Efficient communication)
- Working software is the primary measure of progress. (Measure by results)
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. (Sustainable pace)
- Simplicity—the art of maximizing the amount of work not done—is essential. (Keep it simple)
- The best architectures, requirements, and designs emerge from self-organizing teams. (Empower teams)
Agile Characteristics
Key characteristics of Agile development processes:
- Modularity: The overall process is broken down into smaller, manageable parts (iterations/sprints).
- Iterative: Development cycles repeat, allowing for refinement and learning with each cycle.
- Time-bound: Iterations have a fixed duration (typically 1-6 weeks), providing rhythm and predictability.
- Adaptive: The process can easily adjust to changing requirements, new information, or emergent risks.
- People-oriented: Emphasis is placed on individuals, their skills, motivation, and interactions.
- Collaborative: Requires strong communication and teamwork among developers, business people, and customers.
Advantages of Agile
Adopting Agile offers several benefits:
- Early Realization of Value: Due to the incremental nature, functional parts of the software are delivered early, allowing customers to gain value sooner. Example: A working login system might be delivered in the first few sprints, even if other features are missing.
- Visibility & Early Issue Identification: Frequent, small releases make the product visible early and continuously, helping identify defects, misunderstandings, or usability issues much sooner than in traditional models. Example: If the search functionality built in sprint 3 isn't performing as expected, it's caught and fixed within that sprint or the next, not months later during a dedicated testing phase.
- Adaptability to Change: Agile thrives on change. It's built to welcome and incorporate changing requirements throughout the project lifecycle, which is crucial in rapidly evolving markets. Example: If a competitor launches a new feature, an Agile team can quickly pivot to incorporate a similar feature in the next sprint, while a Waterfall team might be stuck on the original, now less competitive, plan.
- Increased Customer Satisfaction: Through continuous collaboration and frequent delivery of working software, customers are more engaged, see progress regularly, and receive a product that better meets their current needs. Example: A customer seeing a new working feature every two weeks feels more involved and satisfied than waiting a year for the entire product.
- Building the Right Product: The iterative process with continuous feedback loops ensures that the development stays aligned with customer needs and market demands, reducing the risk of building a product nobody wants. Example: By showing working software every sprint, the team and customer can verify that the features being built are truly valuable and adjust priorities if needed.
Overview of Agile Methodologies
Agile is an umbrella term. Specific methodologies provide frameworks and practices to implement Agile principles. Examples include:
- Extreme Programming (XP): Known for its engineering practices (pair programming, TDD, continuous integration).
- Scrum: A lightweight framework focused on team collaboration, accountability, and iterative progress (Sprints).
- Dynamic Systems Development Method (DSDM): Focuses on continuous user involvement.
- Feature Driven Development (FDD): Organizes development around "features" that are valuable to the client.
- Crystal Method: A family of methodologies focusing on communication and human factors.
- Adaptive Software Development (ASD): Focuses on continuous adaptation to the unpredictable nature of software development.
- Unified Process (UP) / Agile UP: An iterative and incremental development process framework.
- Lean Software Development (LSD): Based on principles from lean manufacturing, focusing on eliminating waste and delivering value quickly.
These methods share the core Agile values of promoting development, teamwork, collaboration, and adaptability.