35. That is the average number of applications installed on users’ smartphones. I believe it won’t be out of place to say that we live in a software world. I mean, we are in a digital age, aren’t we? Have you ever wondered what it takes to build this software? Yes, we all know developers build them, but that isn’t all. It takes a lot more.
In this article, we will discuss everything Software Development Life Cycle (SDLC) in detail, together with its phases and methodologies.
SDLC aims to answer the question of HOW software is developed, including the different phases from inception to launch. SDLC is all about the delivery of high-quality software with minimised resources.
The software development life cycle defines a methodology for improving the quality of software developed and the overall software development process. Not following this cycle may lead to a mishap that can significantly affect cost and time.
Testing and Quality Assurance
These phases are not static as they can be further split into subcategories to fit into a unique process.
It is the foundation for every other phase in the cycle. During this phase, all the stakeholders involved collect relevant information relevant to the software to be developed. The stakeholders include the customer, product owner, etc.
Usually, a meeting is set up between the project manager and the relevant parties. Although this process can be time-consuming, it is paramount not to rush it as it is necessary to have a good and clear understanding of the product.
After requirement gathering, a feasibility study is carried out to ascertain the likeliness of the project's completion. All the information collected is documented in the Software Requirement Specification (SRS) document.
This phase aims to model the way a software application will work. Think of it as a blueprint of the software. After requirement gathering has been done, the design team reviews the SRS document to guide this process.
The design team includes the developers who carry out the high-level design of the software. This explains the architecture that will be used in meeting the requirements.
The high-level design is the bedrock for other designs such as the user interface, user flow, communication design, etc.
In this phase, developers/engineers with different expertise, e.g. frontend and backend, build the software by working with requirements and implementing the design. This can be carried out by a single person or a large team, depending on the size of the project.
The backend developer builds the database structure and all other necessary things to be done. Finally, the frontend developer builds the user interface per the design and plugs it into the backend, where required.
Documentation is carried out formally by creating user guides or informally by leaving comments in the source code. There must be proper development guidelines and policies to maintain good code quality.
Testing can be carried out by a dedicated team of testers or by the developers themselves. Furthermore, testing can be carried out simultaneously with development or at the end of the development phase.
Usually, the developers carry out unit testing as they develop the software. This is to check that each source code unit works as it is supposed to. Other tests carried out include:
System testing: This involves testing the system as a whole to validate that it meets all the specified requirements.
Integration testing: Individual modules are combined and tested as a group. The testing team interacts with the software by clicking on buttons, performing scroll and swipe actions. Knowledge of how the backend works is not necessary.
User acceptance testing: This is the final test done before launching the software. Potential users or clients can perform it. This testing validates that the software can handle real-life scenarios based on the requirement specification.
Testing is essential to the software development life cycle. Therefore, it is necessary to emphasise it by doing it the right way. If not, there will be an eternal back and forth between the development and testing phases, which will affect cost and time.
After testing has been completed, the software is then deployed, in which customers can begin to use it.
There are several processes that the deployment team follows to ensure that the process is successful. It may be sometimes complex. This involves creating guides and deployment documents such as installation guides, system user guides, etc.
This is the last phase of the development cycle. In this phase, bugs that were not discovered during testing are reported and fixed. This fix can come as a hotfix - an immediate rectification of a bug or as a regular software update.
Also, a lot of feedback is collected from the users during this stage. The feedback helps to improve the user experience, which may prompt changes to the software in the future.
Although the steps are the same, there are different ways to implement them. Here are the top 6 SDLC methodologies:
Waterfall is the most straightforward SDLC methodology but can be primarily considered the most rigid of them all. It is also presumed to be the oldest. This is because it follows a linear sequential order of execution. It is a one-step at a time framework, from requirements gathering to maintenance. It is only when the previous step is done before moving on to the next step. This means that there is no reversal or going back on the steps.
In the requirements gathering phase, EVERYTHING about the project must be collected because there is no wiggle room for change or adjustments. After this is the design phase, where a software blueprint is made. It then goes to implementation, where the software development is carried out. Finally, testing is done after the software has been fully developed and is then maintained after launching the software.
The waterfall approach is best used when the requirements are precise and stable from the beginning of the project. It is also suitable for projects with a long timeline. Less experienced teams may also adopt this model.
The success of the waterfall model depends heavily on how much clarity is gained from the requirements gathering phase.
Requirements are well-designed at every stage.
It is easy to understand because of its linear structure.
It is easier to manage.
It is not flexible and does not allow for change.
The project cannot move when there is a delay at any stage.
It takes longer due to its rigidity.
It does not encourage active stakeholder communication after the initial stages.
Agile (def.) - the ability to move quickly and easily. This gives an idea of what agile is all about. Agile is centred around communication and flexibility. This is supported by the agile manifesto and the agile principles. It advocates for shorter cycles and incremental development and release.
In the agile development life cycle, every phase has a ceremony that enables feedback from the development team and other stakeholders involved in the project. Such ceremonies include sprint planning, daily scrum, sprint review, and sprint retrospective.
Development in agile is carried out in “sprints” which usually lasts about 2 - 4 weeks. Against common misconception, the goal of every sprint is not necessarily to build an MVP but to build a small portion of the software that is usable by the customers. A feature may be functional but not considered something “sufficient to be valuable”. An increment can be an MVP but does not need to be an MVP
At the sprint review after the end of every sprint, if the stakeholders are satisfied with the developed feature, this gives the green light for the next sprint to begin. It follows the same pattern, but the only difference is, a new feature is developed in the new sprint. There is no caveat to the number of sprints during a project. This is heavily dependent on the size of the project and team size.
This methodology is best used in projects where all the requirements are not clear from the beginning.
Accommodates changing requirement
Encourages feedback and constant communication with stakeholders
Easier to manage risks because of its incremental approach
Requires high skilled resources
Inefficient communication may slow down the project
Over-reliance on customer interaction may lead the project in the wrong direction
The lean approach to software development stemmed from the lean manufacturing principle. This methodology aims to reduce waste and costs during production, which results in maximised profits. This approach is similar to agile development because it focuses on efficiency, quick delivery and iterative development.
Lean methodology is very similar to agile but with only one key difference. While agile focuses on constant communication and collaboration to provide value, lean focuses on eliminating waste to create customer value.
Eliminate waste: Development teams are encouraged to eliminate as much waste as possible. As part of this, this approach discourages multitasking, which means that only the work that needs to be done is what is worked on. It also prevents building “nice to have” features to save time. Unnecessary documentation and meetings are shunned across all development stages.
Amplify learning: This encourages creating an environment to promote feedback from the workforce on software development processes. Most importantly, the environment should be in a way to facilitate learning for all involved members.
Defer decisions: Take careful consideration of facts before making a decision.
Deliver as fast as possible: Delivery is time-based. Therefore, focus on incremental delivery and not big releases by meeting deadlines for delivery.
Team Empowerment: Don’t micromanage your team. Make them feel involved in a more significant cause by actively participating in decision-making processes. Provide a guideline for team members to follow and give room for failure.
Build quality in: At all stages in the software development life cycle, it is essential to keep customer value in mind. Therefore, quality assurance tests should be carried out regularly to maintain this cause.
Optimise the whole: Place absolute focus on the entire project and not project modules alone. Fuse organisational strategies to the project solution at all times.
It encourages creativity since the team is an active part of decision-making.
Early elimination of waste leads to reduced costs and faster delivery.
It won’t be optimal in a less disciplined team.
Project goals and focus can be affected by too much flexibility.
The developers introduced the iterative approach as an alternative to the waterfall model. It clones all the steps of the waterfall methodology with the addition of iteration. An iteration is a repetitive cycle of development. This approach is also incremental because small chunks of the final product are released at the end of each iteration until complete.
The initial phase is planning, while the last phase is deployment. In between is a cyclical process of planning, design, implementation, testing and evaluation,
This approach is somewhat similar to agile, but less customer involvement is involved and has a pre-defined scope of increments.
It produces a working version of the product in its early phases.
It is less expensive to implement changes.
It is easier to manage as the product is divided into smaller chunks.
It may require more resources.
A complete understanding of the requirements is necessary.
It is not suitable for small projects.
Spiral methodology is a risk-conscious approach to software development. It focuses on reducing risks during software development. It is also an iterative development approach in which its cycles is carried out in loops.
It is the most flexible SDLC approach because it combines the waterfall model and prototyping. It has four main phases.
The first phase is where the objectives of the project are defined. In this phase, requirement gathering is carried out.
The second phase is the methodology's core. In this phase, comprehensive risk analysis and plans to mitigate them are carried out. A prototype of the product is also made at this stage.
In the third phase, development and testing are carried out.
The final step involves evaluating what was developed and plans for the next iteration.
This approach also accommodates the development of highly tailored and custom software. In addition, feedback from the prototype users allows for the expansion of functionalities later in the iteration (in the development phase).
Due to its extensive risk analysis, there is a high possibility of further risk avoidance.
It is suitable for larger projects.
Additional functionality can be added later in the iteration.
It is cost-effective.
It is more complex than other SDLC methodologies.
It requires experts to carry out risk analysis.
Since this approach relies heavily on risk analysis, failure to carry out a proper risk analysis can put the entire project vulnerable.
DevOps is a combination of developers and operators. In the traditional software development approach, there was little collaboration between them. The developers were considered the “builders” while operations handled anything after that. This created a communication and collaboration gap and sometimes created a mixup during feedback.
The DevOps approach to software development bridges the communication gap between the development and operation teams. Its goal is to develop superior quality software quickly and with more reliability.
While DevOps is considered a software development approach, it is also integral to other approaches. It is embracing automation over the manual approach to development.
This stage involves planning and development of the software application.
This is when the code supporting new functionality is integrated with existing code.
The development team and QA testers test for bugs to ensure no flaw in functionality, using automated tools such as maven and TestNG. Automation tests save a lot of time for executing test cases.
The code is deployed to the production environment (servers) at this stage. Configuration management tools like puppet and containerisation tools are employed at this stage. They also help schedule updates on the servers and maintain configuration consistency.
This is aimed at improving the quality of software by monitoring its performance. The operations team is actively involved in this process. They monitor user activity for bugs and unusual or improper software behaviour.
Issues discovered at this stage are passed across to the development team to be fixed during the continuous development phase. Tools such as Nagios, new Relix one, and Splunk can be used for this purpose.
Faster software delivery to the market through continuous development and deployment.
Security cannot be guaranteed when the other teams use different environments.
A process that involves human input may slow down operations.
Every step in the software development life cycle is as important as the other. Each step must be carried out correctly to maximise resources and deliver quality software.
The truth is that there is no “best” approach or methodology to software development as they all have their pros and cons. It is dependent on various factors, as mentioned earlier. Before choosing a method, it is crucial to understand the approach's usefulness to your project. Remember, the goal is to deliver quality and reliable software while maximising every available resource.
In a bid to fit the process in the best possible way, many companies use what is called “corporate methodology”. This means a combination of two or different methodologies. This can be done by taking out key features of different methodologies and blending them into one.
At Wazobia Technologies, we have a dedicated and skilled team of experts at designing and building software solutions that fit your needs. Our SDLC methodology will be tailored to your project's needs.
Feel free to contact us for more information, and we will be happy to assist you regarding your software development needs and which SDLC methodology is best suited to your project.
Interested in discussing a project?