Software Development Life Cycle (SDLC) - a note that you need

Master the Key Stages and Models in Software Development such as Agile, SCRUM and Kanban

·

10 min read

Software Development Life Cycle (SDLC) - a note that you need

Software Development Life Cycle (SDLC) is a structured approach followed in software development, that guides the entire process from planning to designing and development to deployment.

It consists of several phases such as Requirement Analysis, Designing, Developing, Testing, Deployment, and Maintenance.

SDLC Phases:

  1. Requirement Gathering

    During the Requirement Gathering phase, the project team identifies the software requirements and documents them considering the needs of stakeholders (the one who owns the software).

  2. System Design

    The design phase of the Software Development Life Cycle (SDLC) is a critical step where the blueprint for the entire system is created. This phase is essential as it sets the foundation for the development process, ensuring that all requirements are gathered. There are two major types of system design.

    • High-Level Design (HLD): Provides an overview of the system’s architecture and its major components. It focuses on how the system will be structured and how the main parts will interact.
      Involves choosing architectural patterns such as MVC, Microservices, etc., defining how major components should work and interact, selecting the tech stack (database, frameworks, libraries, etc.), and considering non-functional requirements such as scalability, performance, security, and maintainability at a high level.

    • Low-Level Design (LLD): Delves into the details of each component/module defined in the HLD. It focuses on the actual implementation details.
      Involves database designs, ER diagrams, workflows, stories, UI/UX designs, etc. It is usually very detailed and specific, focusing on the design of individual components, including database schemas and UI designs.

  1. Development

    The development phase is where the actual coding takes place, turning the design specifications into a working software application. During this phase, developers write code in the programming languages and frameworks chosen during the design phase. They follow the architectural patterns and guidelines established in the High-Level Design (HLD) and implement the detailed plans laid out in the Low-Level Design (LLD).

    Developers work on creating the various components and modules of the system, ensuring that each part functions correctly and integrates seamlessly with the others. This phase often involves several sub-steps, including:

    • Setting Up Development Environments: Configuring the necessary tools, libraries, and environments to ensure that all developers are working in a consistent setup.

    • Writing Code: Implementing the functionality as defined in the design documents. This includes writing new code, modifying existing code, and ensuring that the code adheres to coding standards and best practices.

    • Code Reviews: Conducting peer reviews to ensure code quality, readability, and maintainability. This step helps catch potential issues early and promotes knowledge sharing among team members.

    • Unit Testing: Writing and running tests for individual components to verify that each part works as intended. Unit tests help ensure that changes in one part of the code do not break other parts.

    • Integration: Combining individual components and modules to form a complete system. This step involves ensuring that all parts work together correctly and that data flows smoothly between different components.

Once the development phase is complete, the project moves into the testing phase, where the entire system is thoroughly tested to identify and fix any remaining issues. This ensures that the software meets all requirements and performs reliably in real-world conditions.

  1. Testing

    In the testing phase, the software undergoes a series of rigorous evaluations to ensure it meets the specified requirements and functions correctly.

    During this phase, testers use both automated and manual testing methods to identify and fix bugs, performance issues, and any other defects. Detailed test cases are created and executed to cover all possible scenarios and edge cases. The feedback from this phase is crucial for developers to make necessary adjustments and improvements.

    Once the software passes all these tests and meets the quality standards, it is considered ready for deployment. This thorough testing process ensures that the software performs as expected in real-world conditions and provides a smooth user experience.

  2. Deployment

    During the deployment phase, the team prepares the environment by setting up the necessary hardware and software infrastructure. They also ensure that all dependencies and configurations are correctly in place.

    Once the environment is ready, the actual deployment begins. This may involve transferring files, setting up databases, and configuring network settings.

    After deployment, the software enters the maintenance phase. This phase involves monitoring the software for any issues, applying updates and patches, and making improvements based on user feedback.

  3. Maintenance

    During the maintenance phase, the development team continuously monitors the software to ensure it operates smoothly and efficiently. This phase involves implementing updates, bug fixes, and other enhancements as needed to address any issues that arise. Regular updates might include security patches to protect against vulnerabilities, performance improvements to enhance speed and reliability, and new features to keep the software competitive and aligned with user needs.

SDLC provides a systematic approach to software development, ensuring that projects are completed efficiently with a smoother workflow. It helps in managing risks, maintaining quality, and delivering software solutions that meet the needs of users.


SDLC Models

The industry utilizes a wide range of SDLC models, each with its own set of advantages and disadvantages. Two of the most popular models are the Sequential Model and the Iterative Model.

Sequential SDLC Model

The Sequential Model follows a linear progression from one phase to another. Each phase is completed before moving on to the next. Suitable for projects with well-defined requirements and stable scope that do not have frequent changes in requirements.

The most popular sequential model is the Waterfall Model.

Waterfall Model

The Waterfall Model is a sequential SDLC model where development progresses linearly through several phases: requirements gathering, system design, development, testing, deployment, and maintenance. Each phase is completed before moving on to the next, making it suitable for projects with well-defined requirements and a stable scope. However, it has some disadvantages:

  • Rigid and Inflexible: The Waterfall Model does not accommodate changes well. Once a phase is completed, it is difficult to go back and make changes without disrupting the entire process.

  • Limited User Involvement: User feedback and involvement are minimal until the later stages, which can lead to misalignment with user expectations.

  • Late Bug Discovery: Testing occurs towards the end, which means that bugs and issues may only be discovered late in the process, making them more expensive and time-consuming to fix.


Iterative SDLC Model

The Iterative Model is an SDLC approach that focuses on repetitive cycles of development, testing, and feedback. It aims to deliver working software incrementally and iteratively, allowing for flexibility and adaptation throughout the development process. This model is suitable for projects with evolving requirements and a need for frequent feedback and collaboration.

The most popular iterative model that is widely adopted in the industry is the Agile Model or Agile Methodology.

Agile Model

The Agile Model is one of the most popular iterative SDLC models. It emphasizes adaptive planning, continuous improvement, and rapid delivery. The development process is divided into short iterations called sprints, typically lasting 1-4 weeks. Each sprint involves planning, development, testing, and review activities.

Key Process:

  • Requirements gathering and designing

  • Sprint planning

  • Development of small increments of functionality

  • Continuous integration and testing

  • Sprint review and retrospective

There are several frameworks built using the Agile Methodology. The most important and widely adopted frameworks are SCRUM and Kanban. These frameworks make the development process more structured and controlled.


Scrum

Scrum is an agile framework for managing and organizing complex projects. It emphasizes collaboration, flexibility, and iterative progress. Here are some key points about Scrum:

  1. Product Backlog: The product backlog is a prioritized list of features or user stories, that have to be developed.

  2. Sprints: Scrum divides the development process into small iterations called sprints, usually lasting 1-4 weeks. During each sprint, a selected set of backlogs are addressed, developed, and delivered.

  3. Daily Scrum/Stand-ups: Daily scrum meetings are held to provide project status updates and address any impediments. Team members answer three questions: What did I do yesterday? What will I do today? Are there any obstacles?

  4. Sprint Review: At the end of each sprint, a sprint review is conducted to demonstrate the completed work to stakeholders and gather feedback for future iterations.

  5. Sprint Retrospective: The sprint retrospective is a reflection meeting held after each sprint to discuss what went well and identify areas for improvement.

  6. Roles: Scrum defines three main roles: Product Owner, Scrum Master, and Development Team. Each role has specific responsibilities within the project.

    • Product Owner: The Product Owner is responsible for managing the product backlog, prioritizing features, and ensuring that the team is working on the most valuable items. They collaborate with stakeholders to gather requirements, define the product vision, and make decisions about the product's direction.

    • Scrum Master: The Scrum Master ensures that Scrum practices are followed, removes roadblocks, and supports a productive and collaborative environment. The Scrum Master helps the team understand and apply Scrum principles and supports the team in self-organization and continuous improvement. Responsible for Scrum ceremonies like Sprint Planning, Daily Stand-ups, and Sprint Review.

    • Development Team: The Development Team consists of professionals who do the work on the product, and deliver a potentially releasable product at the end of each sprint. They are responsible for estimating, planning, and delivering the user stories committed to in the sprint backlog. The Development Team collaborates closely, shares knowledge, and works together to achieve the sprint goals.

Advantages of Scrum:

  • Increased transparency and collaboration among team members.

  • Ability to adapt and respond to changing requirements or priorities.

  • Regular feedback loops and opportunities for continuous improvement.

  • Incremental delivery of working software, allowing for early testing and validation.


Kanban

Kanban is another agile framework that focuses on visualizing and optimizing workflow. It originated from lean manufacturing principles and has been adapted for software development. Here are some key points about Kanban:

  1. Visual Board: Kanban utilizes a visual board with columns representing each stage of the workflow. Each task or user story is represented by a card or sticky note that moves across the board as it progresses.

  2. Work-in-Progress (WIP) Limits: Kanban places limits on the number of tasks that can be in progress at each stage of the workflow. This helps prevent overloading and bottlenecks in the system.

  3. Continuous Flow: Kanban aims to achieve a smooth and continuous flow of work. Tasks are pulled into the next stage of the workflow as capacity allows.

  4. Cycle Time: Kanban measures the cycle time, which is the time it takes for a task to move from start to finish. This helps identify bottlenecks and areas for improvement.

  5. No Fixed Time-boxes: Unlike Scrum, Kanban does not use fixed time-boxed iterations. Work is continuously pulled from the backlog based on capacity and priority.

Advantages of Kanban:

  • Clear visualization of the workflow and work progress.

  • Flexibility to handle different types of work and priorities.

  • Focus on optimizing the flow of work, reducing bottlenecks, and improving efficiency.

  • Ability to accommodate changing priorities and handle unpredictable workloads.

  • Kanban doesn’t follow sprints, sprint review, and spring retrospective concepts, the tasks do not have any time limits and the review and retrospective can happen any time whenever it is necessary


Difference between SCRUM and Kanban

  • Scrum is based on time-boxed iterations (sprints), while Kanban focuses on continuous flow without fixed time-boxes.

  • Scrum has defined roles and ceremonies, whereas Kanban has no strict roles and focuses more on optimizing the workflow.

  • Scrum emphasizes collaboration and self-organization within the development team, while Kanban focuses on visualizing and optimizing the workflow across the entire team or organization.

  • Scrum requires more upfront planning and prioritization with a fixed set of features for each sprint, whereas Kanban allows for more flexibility in handling changing priorities and work items.

Both Scrum and Kanban are popular agile frameworks, but they have different approaches and advantages. The choice between the two depends on the specific needs and characteristics of the project or organization.