Notes
Programming Best Practices & Further Reading
Software Development Lifecycle

Software Development Lifecycle

What is the SDLC?

​ The Software Development Life Cycle began as the “systems development life cycle” in the 1960s. Large corporations developed the model to help manage complex business systems that required a lot of data processing and analysis. ​

SDLC is a framework that defines the processes involved in the production of software. One of the core aims is to produce the highest quality software, in the shorted timeframe, and for the lowest cost. ​

The 7 stages of the SDLC

​ 1. Feasibility Study

Also referred to as the planning stage. In the initial planning stage, product management and project management will focus on:- ​

  • scheduling
  • capacity planning
  • cost estimation
  • material and human resource allocation
  • provisioning ​

If the planning stage is successful, managers are able to produce detailed costs, plans and schedules.

This stage focuses on the collaboration of developers, clients and operations and security teams to ensure that all the information is readily available to formulate their plans.

In order to access the feasibilty of a project, the following questions should be thoroughly examined: ​

  • Is it necessary?
  • Is it affordable?
  • Is it achievable? ​

If it is decided to proceed, there may be the additional question of whether the costs of developing will be recouped by the final product.

Cost-benefit analysis ​

  • What is the cost of providing the system?
  • What money will be saved by creating and using the system
    • the benefit?

Feasibilty of a project is not always about cost. Military defence systems may be considered a necessity regardless of the cost. Open source software will focus on development for collaboration opportunities rather than ROI (return on investment) ​

2. Requirements Analysis Stage

​ Stakeholders and managers have to collaborate with the development team to communicate their requirements - finding out what the client wants the software to do. ​

Specifications are important to the SDLC - errors in specifications can contribute greatly to testing and maintenance costs. It's been estimated that 50% of bugs arise from poor specifications. But specifications are not frozen, they may adapt and change throughout the process as user requirements are clarified.

​ Ideally specification requirements should demonstrate the following characteristics ​

  • Implementation free
    • what is needed, not how it is achieved
  • Complete
    • no areas missing
  • Consistent
    • no individual requirements contradict another
  • Unambiguous
    • each requirement has a single interpretation
  • Concise
    • stated only once, without duplication
  • Minimal
    • no fuss or extra ingredients
  • Understandable
    • but both clients AND developers
  • Achievable
    • technically possible
  • Testable
    • it can be demonstrated that the requirement is met ​ ​

3. Design Stage ​

The design stage will focus on how the system should set out to achieve the requirements - as a result it may need to cover many different aspects of design.

It should consider the following key areas; ​

  • How do we reach our goal
    • architectural design
  • How do we want our product to look
    • user interface(UI) design ​

Architectural design:

Software systems can be large and complex - almost certainly it is too large to be written as one single program. Architectural design breaks down the overall system into simpler modules. ​ The high-level deliverable from the architectural design stage is a design solution or design specification.

From the user design stage deliverables are more likely to be wireframes and prototypes. ​

4. Code Development Stage

​ Code is written to meet the design specifications - and building the software begins.

When code development begins it is crucial that the initial information from previous stages is implemented, so that the output and created product aligns with expectations of the stakeholders and users.

​ The deliverable from this stage is (working) software that implements the designs and requirements of the client/user. ​

5. Testing Stage ​

During the testing phase development teams should consider the following: ​

  • Are we building the product right?
  • Are we building the right product? ​

When creating complex software projects errors, bugs and glitches may slow down the release of the system - so testing is brought in to ensure “trust” in the product. ​

This stage provides the security and reassurance that everything is working, and crucially, everything is working as it should be. ​

This stage also needs to determine whether the produced software meets the users needs, and can be referred to as acceptance testing. Acceptance testing will come when a product is deemed "complete". - the product will be demonstrated to the client and it is either signed off, or a list of agreed changes/faults may be created. ​

6. Deployment/Implementation Stage ​

If all has gone well with testing the product is ready to be released and can be deployed. The end-product is put into use. ​

The actual methods of deploying software will vary greatly from company to company (and even team to team). ​

Release managers may produce a deployment plan to get the product live. In more modern companies this stage may be managed by CI/CD pipelines. ​

Sometimes deployment happens in stages… From this stage of the SDLC we have an operational system in the live environment. ​

7. Maintenance Stage ​

When software is in use more often than not it will require some form of maintenance to make sure it is functioning as it should. ​

Once customers start using the developed system, following 3 activities occur ​

  • Bug fixing
    • bugs are reported because of some scenarios which are not tested at all
  • Upgrade
    • Upgrading the application to the newer versions of the software
  • Enhancement
    • Adding new features into the existing software ​

Benefits of the Software Development Lifecycle

  • Lowers the cost of software development.
  • Improves the quality of the software that the organization delivers.
  • Shortens development timelines by preventing after-the-fact fixes.
  • Helps developers better understand what they are building and why.
  • Ensures all stakeholders have a chance to give their input in the early stages of development. ​

Drawbacks of the Software Development Lifecycle?

  • It reduces communication and collaboration across departments.
  • Because SDLC is a linear model, and the organization does not advance to the next step until the current step is complete, this approach can have the effect of halting progress and creating information silos. ​