5 Software Development Life Cycle, Versioning and Packaging.#
Deliverying a software solution that meets our customers expectations requires much more than implementing features. Planning, Testing, and Deploying the solution are some of the critical activities that development teams execute to build succesful solutions. The full process that the development teams apply to deliver high-quality solutions in an efficient way is what we call the Software Development Life Cycle (SDLC).
If we look for the definition of SDLC, we will see that there is no universally defined process, and instead, there are various variations. But broadly speaking, we will see that many agree on the following phases:
Plan: It’s about understanding what needs to be built, why it’s being built, and how it can be accomplished within budget and time constraints. It involves gathering input from all stakeholders to ensure the project’s direction aligns with business goals and user needs.
Design: It’s about defining how the software will work, what technologies will be used, and how different parts of the system will interact with each other to meet the project’s requirements.
Implement: It involves translating the designs and plans into reality — coding the software piece by piece, building features, and integrating components as outlined in the design phase.
Test: The inspection and quality assurance phase. The software is tested to ensure it functions correctly, meets the defined requirements.
Deploy: Releasing the finished product and deploying it into a live environment where users can access and use it.
Maintain: This phase focuses on keeping the software operational, secure, and up-to-date. It involves fixing any issues that arise, making necessary updates, and continuously improving the software to adapt to new requirements or technologies over time.
Over time, various arrangements of these phases have been proposed to optimize the development process. These arrangements are known as SDLC models. Among them, some of the most popular, listed in chronological order of appearance, include:
Waterfall: A linear, sequential approach where each phase must be completed before the next begins, emphasizing thorough planning and documentation.
Agile: A flexible, iterative process that values collaboration and customer feedback, with work divided into small increments to accommodate changes.
DevOps: A culture and practice that blends software development (Dev) and IT operations (Ops), focusing on automation, continuous delivery, and quick feedback.
In the rest of this chapter, we will focus on DevOps practices, and we will get some hands on experience by automating certain parts of the development process with Gitlab. Although, in previous chapters, we used Gitlab as a server for our remote repositories, it offers many more functionalities. Gitlab is a web-based DevOps lifecycle tool that provides a comprehensive platform for software development, from project planning and source code management to CI/CD (continuous integration/continuous deployment), monitoring, and security enabling teams to collaborate on coding, testing, and deploying applications within a single application.