My DevOps Journey: Week 1

My DevOps Journey: Week 1

DevOps, Her Culture and SDLC

Table of contents

No heading

No headings in the article.

A brief history of DevOps

The DevOps movement started sometime between 2007 and 2008 when IT operations and software development communities raised concerns about what they felt was a fatal level of dysfunction in the industry. They were unhappy about the traditional software development model, which made those who write code to be organizationally and functionally separate from those who deploy and support that code. Developers and IT/Operations professionals had separate (and often competing) objectives, separate department leadership, and separate key performance indicators by which they were judged, and often worked on separate floors or even separate buildings. The result was siloes teams concerned only with their tasks and unhappy customers.

This lack of communication and collaboration between the development and operations teams birthed the DevOps culture. In the years that followed, DevOps gained more acceptance and popularity as more organizations recognized its benefits of bridging the gap between the development and operations teams. Today, DevOps has become a standard approach to software development and operations, with lots of tools and practices available to enhance collaboration and efficiency of software delivery.

What is DevOps?

DevOps is the combination of culture, practices and tools that increases an organization’s ability to deliver applications and services swiftly which enables organizations to better serve their customers and compete more effectively in the market. DevOps aims to break the isolation of the Development and Operations team which enhances collaboration and performance between both teams.

What is DevOps Culture?

DevOps culture is all about a shared understanding between the development and operations teams, and also a shared responsibility for the software they build. At its core, a DevOps culture involves nurturing multidisciplinary teams who are accountable for the entire lifecycle of a product. At the heart of DevOps culture is increased transparency, communication, and collaboration between teams that traditionally worked in siloes. Without the right mindset, rituals, and culture, it’s hard to realize the full promise of DevOps.

What is the software development life cycle model?

The Software Development Life Cycle (SDLC) is a structured process used by software companies for the production of high-quality, low-cost software, in the shortest possible production time.

It involves;

  1. Planning – Defining the project scope, identifying the requirements, and creating a project plan.

  2. Analysis – Gathering and documenting the requirements (functional and non-functional) for the application. They are documented as SRS (Software Requirement Specification)

  3. Design – The application architecture is designed. i.e., the structure of the application, user interface, and database schema. It is documented as DDS(Design Document Specification)

  4. Implementation/ Coding – Implementing the design and coding of the application.

  5. Testing and Integration – Deploying the software in the test environment to fix bugs and defects. This helps check the reliability, security, and scalability of the application.

  6. Deployment – Installing the software, configuring it, and ensuring that it is running smoothly and efficiently.

  7. Maintenance – Fixing bugs and defects, updating the software to meet changing requirements, and ensuring that it remains secure and reliable.

SDLC models

There are various SDLC models, but the most important with DevOps is the Waterfall and Agile methodology.

Waterfall Methodology

Also known as the Waterfall model — is a step-by-step development process that flows like a waterfall through all phases of a project (analysis, design, development, and testing, for example), where each phase completely ends before the next phase begins. The main drawback of the waterfall model is that it is impossible to go back to the previous phase to make any change if there is a need to. For example, if a client needs any change in the previous phase, we cannot do that. While making a change is not impossible, it would require going back to the 1st Phase and building again. This resulted in slower release time for clients and more work for the team.

Agile Methodology

The Agile methodology is a way to manage a project by breaking it up into several phases. It involves constant collaboration with stakeholders and continuous improvement at every stage. Once the work begins, teams cycle through a process of planning, executing, and evaluating. It is not suitable for long-term projects. One of the main drawbacks is that the level of collaboration is difficult to maintain.

DevOps may be seen as an endless cycle consisting of the following steps: plan, code, build and test, release, deploy, operate, monitor, give feedback, and finally reset the loop.

The DevOps lifecycle

The DevOps process typically involves several stages phases that include planning, coding, building, testing, releasing, deploying, operating, and monitoring.

  1. Plan: Defining the objectives, requirements, and scope of the software project. Tools used: Jira, Trello, Asana.

  2. Code: Writing and reviewing the code for the software. It entails version control, code review, and collaboration among developers. Tools used: Git, GitHub, Bitbucket, GitLab.

  3. Build: Compiling the code and generating executable files. Tools used: Gradle, Maven.

  4. Test: Testing for bugs and errors. Tools used: Selenium, JUni.

  5. Release: Preparing the software for release and production. Tools used: Jenkins.

  6. Deploy: Deploying the software to production environments. Tools used: Kubernetes, Docker, Ansible, Chef, Puppet.

  7. Operate: Smooth production assurance. Tools used: Nagios, New Relic.

  8. Monitor: Monitoring for issues, and bugs, and taking corrective actions as needed. Tools used: Nagios.

The DevOps Lifecycle Phases

The DevOps lifecycle phases include the following:

  1. Continuous Development

  2. Continuous Integration

  3. Continuous Deployment

  4. Continuous Testing

  5. Continuous Monitoring

Continuous Development

Continuous Development refers to a process in software development that involves multiple DevOps methods, such as continuous integration, continuous testing, and continuous deployment. It improves the software’s quality, detects, and fixes errors more easily, reduces risks, and increases productivity. Continuous Development means that every change to your software can be integrated, tested, and then verified. This allows your team to deliver a reliable, safe, secure, and high-quality product on time.

Continuous Integration

Continuous Integration is a software development discipline in which engineers incorporate code updates into a common, central repository. After such modifications are combined, automatic tests and builds are run. The primary goal of this approach is to detect vulnerabilities early in the software development life cycle, thereby reducing the time required for launching the software.

Continuous Integration allows developers to:

  • Minimize integration problems

  • Detect and fix errors quickly

  • Increase visibility

  • Communicate more effectively.

This allows developers to spend most of their time building new features for the application and less time fixing bugs.

Continuous Deployment or Continuous Delivery

Continuous Deployment (or Continuous Delivery) is a strategy that allows a piece of software to be released automatically after passing the automated testing phase. There are many deployment tools you can take advantage of to accomplish this. Faster feedback enhances the quality of the software provided since you get feedback sooner rather than later.

Continuous Testing

Continuous Testing is an integral part of the continuous integration-deployment pipeline. It involves testing the application during every stage of the development process. Continuous testing aims to assess the quality and reliability of software at each step of the CI/CD cycle by testing early, often, and frequently. Jenkins is one of the most popular continuous testing tools available.

Continuous Monitoring

Continuous Monitoring is an automated process that monitors and identifies compliance issues and security risks at each stage of the DevOps process. Continuous Monitoring is the final stage in the DevOps pipeline. This is an essential step in the DevOps process and can help you achieve actual efficiency and scalability. Continuous Monitoring will notify developers and QA teams if specific issues occur after the software is released in the production environment. Continuous Monitoring gives feedback and allows relevant people to address the problem as soon as possible.

In summary, DevOps is an approach to software development which emphasizes communication, collaboration, and automation between software developers and IT operations teams. It is imperative to have a good understanding of the phases of the software development lifecycle to get a good grasps of DevOps. The Waterfall and Agile models have emerged to address the flaws of the traditional approaches to software development. While both models have their weaknesses and strengths, the Agile model has become the standard for most teams dues to its emphasis on collaboration, flexibility and continuos improvment. Ultimately, organizations who adopt the DevOps principles and best practice will have an acceleration to their software devleopement processes and deliver better products to thier consumers quickly.