Hey, today as Innokrea, we will tell you a bit about what DevOps culture, SDLC, and CI/CD are. If you are interested in advancing your career as a DevOps professional or want to find out about the differences in software deployment over the past few years, we warmly invite you to read on.

 

SDLC

SDLC (Software Development Lifecycle) is a model describing how the entire software development process should proceed - from planning to testing, deployment, and maintenance. Depending on the model used in our company, we can distinguish between 6 to 9 steps in software development. If we use a model with a lower number, it does not necessarily mean skipping activities related to a specific step, but rather transferring them to another step.


A graph showing stages of Software Development Life Cycle

Figure 1 - 8 Steps of Software Production, source: savvyprogrammer.io

Planning - this stage involves defining the project scope, main assumptions, available resources, and determining the time horizon expected for the project. This stage also concerns defining potential risks associated with the project.

Requirements Gathering - this stage includes analyzing the functional and non-functional requirements that the client has for the application. Extracting requirements from the client is one of the key stages of the project. To ensure that the project is properly executed, we need to understand the client's expectations and establish a common language, meaning ensuring that we understand the same concepts and definitions in the same way. The engineer gathering requirements often needs to learn more about the problem domain that the application is supposed to address. During this stage, documents related to user stories and detailed requirements are drafted.

Analysis and Design - This stage involves designing the appropriate software architecture based on the gathered functional and non-functional requirements. Typically, the latter have a crucial impact on the architecture; for example, performance requirements classified as non-functional may necessitate the need for horizontal scaling of the application, which may require a special architecture. Documents describing the database design, system, user interface, and necessary diagrams are also created during this stage.

Software Development and Documentation - It is only at this moment that the specification becomes code, which the developer implements. It is important that the code is written to the appropriate standard, taking into account both the adopted architecture and good practices such as SOLID principles. In this regard, we recommend our article.

It is important to create solid documentation for both the code (through endpoint documentation or version control system) and by imposing appropriate naming conventions or producing relevant documents and diagrams related to the software. Thorough preparation at this stage helps minimize potential future issues with project development and difficulties in its implementation in client companies.

Testing - this is a project phase involving verification to ensure that what has been created aligns with the previously specified requirements. Various types of tests are distinguished, including unit tests, integration tests, system tests, E2E tests, and acceptance tests.

Deployment - this is the stage when the software goes into so-called 'production', i.e. the server used by customers. This process is sometimes automated nowadays through so-called pipelines. In this step, it is necessary to plan how the rollback (undoing of changes to a previous version), data migration and the production environment should look like. It is also not uncommon for various types of training to be carried out at client companies at this stage.

Maintenance and Monitoring - this is the phase after software deployment, involving continuous monitoring, bug fixing, updates, and improving and optimizing the application. Support for users who may have problems operating the new software should also not be overlooked.

It should also be noted that all these stages occur in a cycle. It is not a waterfall model but rather an agile one, where iteratively we try to produce software and deliver it to the client.

 

What is DevOps?

DevOps is a culture that encompasses good practices and a set of tools influencing the entire software production process. It enhances efficiency through process automation, integration, and collaboration. The term traditionally stems from the division that existed between developers (dev) and the operations department (ops). Introducing such a culture and individuals responsible for collaboration between developers and infrastructure/system professionals improves the reliability and quality of deployments, and consequently, the quality of the application itself.

DevOps

Figure 2 - DevOps Elements with Specific Applications, source: solarwinds.com

 

How does DevOps work in various stages of SDLC?

In most stages, regardless of the SDLC model we adopt, we can observe elements of DevOps entering the market more and more. Let's take another look at the SDLC steps:

During the planning and requirements gathering phase, DevOps emphasizes close collaboration, communication, and joint meetings to understand common assumptions and requirements between development teams, operations, and stakeholders. This helps create a cohesive project plan focused on understanding customer needs. DevOps tools and practices can also be used to automate planning processes.

Analysis and Design - The DevOps team should participate in joint project sessions where discussions should include non-functional requirements such as scalability and availability. These requirements broadly influence both software architecture and the sets of tools that must be applied by DevOps professionals.

As for the software development and documentation phase, the implementation of Continuous Integration (CI) practices, where code is regularly pushed to a remote GIT repository, is a crucial element of DevOps.

Testing - DevOps culture manifests itself in the implementation of Continuous Testing (CT) practices, which include test automation at various levels, from unit to integration, to quickly identify and fix issues. Developers pushing code to version control can quickly receive feedback on whether their changes are working or not. Testing may also involve checking the code and dependencies for security fixes.

Deployment - Introduce Continuous Delivery or Deployment (CD) practices that automate the software deployment process, enabling regular and reliable delivery of new software versions. The IaC approach, or Infrastructure as a Code, and treating the remote git repository as a so-called single point of truth is also a significant improvement that should be the responsibility of the DevOps team.

The last but not least important phase - maintenance and monitoring - emphasizes the implementation of Continuous Monitoring (CM) practices for continuous monitoring of system performance, availability, and security. It's essential to consider that performance issues may arise during application operation, or a new vulnerability in a module used by our application may be discovered.

Summary

Both SDLC and DevOps are crucial elements of today's direction in software development and IT project management. If you're interested in DevOps, we recommend our articles on Terraform.

See you next week!


Sources:

Benefit from our experience and arrange a free consultation on DevOps culture and SDLC! Click here.