I have never worked with a dedicated DevOps team until 2021, during a project for a mobile app in e-com. These guys were AWS experts, managing our cloud consumption.
Naturally, I wanted to learn more about what DevOps truly entails, but most of the explanations I found online sounded vague:
-“DevOps is a mindset, a cultural shift where teams adopt new ways of working. It’s about developers getting closer to the user by gaining a deeper understanding of user requirements and needs.”
That sounded a bit too abstract for me. I wanted to paint a clearer picture for those not entrenched in daily merge requests or IT maintenance.
Terms like “philosophy” or “mindset” to explain DevOps can be misleading. Why should striving for efficiency be a cultural shift? Instead, DevOps is best understood as a series of structured IT processes supported by specific tools.
DevOps, coined by IT leader Patrick Debois in 2009, defines an ideal state where developers (the “Devs”) build software in a controlled environment and then pass their work to the IT operations (the “Ops”), who happily deploy it into production. In this scenario, terms like “crash,” “downtime,” and other frustrations should become rare.
In the real world, however, there can be a “battle” between the Devs and the Ops. The first seek more responsiveness: they need to quickly add new features, and rapidly deploy to new environments for testing.
On the other side, the operations demand stability, because it is often difficult to anticipate the impacts of changes in code, architecture, or infrastructure. But they also seek standardization, because production wants to ensure that certain rules are uniformly respected to guarantee the quality of service of the infrastructure.
When launching a new commercial software, there are also needs for the improvement of the customer experience such as time to market amidst competitors and quick feedback on the product (fail fast – learn fast)
Yet, these two groups, “devs” and “ops,” have a common goal: produce a higher-quality product in less time, make the system work from the perspective of the end customer, and save money in the long run.
Below is an outline of a typical DevOps workflow, using some of the most common tools in 2024:
1. Planning
In the planning phase, developers select new features or fixes from individual description files called “tickets” in a project management tool like Jira. While Jira often gets criticized for its UI/UX, it remains the most popular tool due to its flexibility and connectivity. For instance, a developer can create a new code branch directly from a Jira ticket.
2. Version Control
Once a ticket is chosen, developers move to the coding phase, storing their code in a version control system (VCS) like Git. With Git, especially when integrated with platforms like GitHub or GitLab, multiple developers can work on different branches simultaneously, track changes, manage versions, and merge their code in an organized manner.
3. Continuous Integration (CI)
After committing the code to the repository, the continuous integration process begins. Tools like Jenkins automate this step by pulling code from the repository, running unit tests, and ensuring that the new code integrates smoothly with the existing codebase.
4. Build & Packaging
Once the code is integrated, the next step is building the software. But an application may need some libraries or specific files for running, so tools like Maven help resolve these dependencies. Once the software is ready, it’s packaged into a virtual container using Docker. Docker ensures consistency by bundling the code with its dependencies, making it easier to deploy across environments.
5. Testing
Automated testing is a critical part of the DevOps workflow. Developers, or dedicated QA experts, write tests to ensure their changes don’t break the application. Tools like Selenium (for UI testing), JUnit (for unit tests), and Test Management Systems (like Allure) are integrated into the CI/CD pipeline to maintain code quality.
6. Continuous Delivery (CD) & Deployment
After successful integration and testing, the process moves to continuous delivery (CD). What used to be a tedious process is now streamlined through tools like Jenkins and GitLab CI, which automate the deployment to environments like staging and production. For containerized applications, Kubernetes is the industry standard for orchestrating deployments across a cluster of machines, scaling applications automatically as needed.
7. Monitoring & Logging
Once the application is live, monitoring tools are essential for tracking performance and identifying potential issues. Prometheus handles metrics collection and alerting, while Grafana creates customizable dashboards that visualize system performance.
For keeping track of all events that occurred in the system, the ELK Stack (Elasticsearch, Logstash, Kibana) is commonly used for centralized logging.
8. Incident Management
When issues arise, notification tools like OpsGenie (from the same makers as Jira) alert the operations team based on predefined thresholds. Communication tools like Slack or Microsoft Teams are integrated into the DevOps workflow to ensure everyone who needs to respond to an event is timely notified.
But it doesn’t end here; This is where the “mindset” aspect comes into play. Once performance issues are identified and analyzed, then, a continuous improvement process, symbolized by the DevOps “8” infinity loop, can be put in place with new Jira tickets, so the cycle repeats itself.