Why is it so Important?
If you are new to the software development and coding world, you may have heard the term Software Development Life Cycle or SDLC. SDLC is a very detailed plan that explains the software being built (or re-vamped) and outlines how to plan, build, and maintain said software. The SDLC helps the development teams stay within the timeframe, cost, and allotted resources. Left unchecked can be used very quickly and cost the customer more money in the long run.
Since so many people handle the design and code, it is considered to have a best practice in place. This acts as a secured source control when working on the code. It is a good idea to keep the code in one place using a secure login or keeping files in a single room. This also tracks work done by individuals or teams.
There are several phases of the SDLC such as planning, implementation, testing, documentation, deployment, and maintenance. Every phase has a method or process and certain steps which delivers information that feeds into the next phase.
1. Planning/Requirement Extraction
This phase gathers as much information as possible from the customer. Usually what the product is, its purpose, how it should work, and if they have current software what are the issues that need to be addressed. A timeframe and the estimated cost are discussed at this time with the customer.
2. Feasibility Analysis
Everyone has an idea of what they want and how they want it to work, but whether that is possible is another matter. Once the required information is gathered, an analysis is done to check if the product development is feasible and then outline the steps to reach the result. But to outline those steps, certain questions must be answered.
Economic: Can this stay within budget?
Legal: Is this project in compliance with cyber law?
Operation feasibility: Can we create what is expected?
Technical: Can the current computer system support the new software?
Schedule: Can this be completed within the timeframe?
When there is a clear understanding on both sides of what is wanted and what can be developed, the Software Requirement Specification (SRS) document is created. The SRS defines what needs to be designed and developed, and how to navigate risks when they arrive. This will become a reference point for all developers and the customer.
Using the specifications, a design document is created outlining the coding guidelines and defining the interaction in the overall system. The design document contains a High-level design (HLD) and a Low-level design (LLD). The HLD is the whole system, how every module works, and the interface relationships between the modules. The LLD is the logic of individual modules, showing the inputs and outputs of every module, and addressing all dependency issues. Once this document is completed, the customer reviews the plan and offers feedback which is then incorporated into the document. An interactive prototype is typically developed at this stage for the customer.
4. Building the Code
This is the longest phase where everything comes together and starts immediately once the developer receives the design document. The design document is the blueprint for this phase and the developers must stick to this blueprint. Since there are many components, the document is divided up into units and assigned to a developer using programming tools to generate and apply code. Coding is writing out the program using a chosen programming language, and everything is built according to the customer’s requirements. For developers to track any changes to a code and make sure target goals are met, they will use source code management. This will help with fixing any errors or glitches that may pop up.
Once coding is completed, it is then released into a testing environment that ensures that the software is free of bugs, works per the customer’s requirements, and works correctly with other software products. Testing checks the system as a whole and individual components, if any bugs are found, the development team fixes the bug and then sends it back to testing. This process repeats itself until no bugs or issues are found during testing and meets all requirements.
You can learn more about software testing by reading this article
6. Deployment and Maintenance
The final software is released to the public once it has passed the testing phase. Maintenance is typically performed over time when the software needs to be updated. If issues come up and need to be fixed, developers will take care of them.
When it comes to SDLC there are many models to complete the phases, but we will focus on just a few here.
Waterfall is the oldest and most common model, everything in one phase must be completed before moving on to the next. The output data of one phase is used as the input data of the next phase.
- Simple and easy to use.
- Easy to manage.
- Each phase is evaluated before moving on to the next.
- Time-consuming - not great for small projects.
- Requirements need to be clear, otherwise any errors can lead the project in the wrong direction.
V-shaped is a variation of the waterfall method, but the difference is that testing runs at the same time as the development phase, and there is a large focus on the validation and verification of the project.
- Simple and easy to understand.
- Great for smaller projects.
- Not great for ongoing projects.
- Any requirement changes at a later stage would cost the customer more money.
- Can run into roadblocks if one phase is not completed.
Incorporates operations, such as the people who use the software, into the development cycle, and seeks to improve the usability and relevance of the software. Development and Ops teams use the same programming tools to track performance and find defects, this common language provides a common language and faster handoff between teams.
- Receive feedback from actual software users on the design and functions.
- Requires active collaboration and communication from software users.
As mentioned before, there are many more methods, but they all complete the Software Development Life Cycle in their way. And beneficial to developers and customers by creating a positive relationship.