Best practices for implementing DevOps
Agile project management
Agile is an iterative approach to project management and software development that helps teams deliver value to their customers faster and with fewer headaches. Agile teams focus on delivering work in smaller increments, instead of waiting for a single massive release date. Requirements, plans, and results are evaluated continuously, allowing teams to respond to feedback and pivot as necessary.
The following are key concepts for agile project management:
- Start with a workflow that includes four phases: to do, in progress, code review, and done. Read more about workflows.
- Teams need to break large-scale projects into smaller tasks and respond to changes in needs or scope as they make progress. Read more about how to use epics, stories, and themes to scope and structure work.
- How do you plan, track, and measure the incremental work? Scrum and kanban are core frameworks for teams practicing agile methodology.
Shift left with CI/CD
When teams “shift left”, they bring testing into their code development processes early. Instead of sending multiple changes to a separate test or QA team, a variety of tests are performed throughout the coding process so that developers can fix bugs or improve code quality while they work on the relevant section of the codebase. The practice of continuous integration and continuous delivery (CI/CD), and deployment underpins the ability to shift left. Read more about CI/CD.
Build with the right tools
A DevOps toolchain requires the right tools for each phase of the DevOps lifecycle, with key capabilities to improve software quality and speed of delivery. Read more about how to choose DevOps tools and review functionality for each phase of the DevOps lifecycle.
Continuous integration and delivery allows developers to merge code regularly into the main repository. Instead of manually checking code, CI/CD automates this process, from batching in a specified window to frequent commits. In addition to CI/CD, automated testing is essential to successful DevOps practices. Automated tests might include end-to-end testing, unit tests, integration tests, and performance tests. Read more about incorporating automation into your software development processes. Read more about automation.
Monitor the DevOps pipeline and applications
It’s important to monitor the DevOps pipeline so a broken build or failed test doesn’t cause unnecessary delays. Automation improves the speed of development tremendously, but if there is a failure in an automated process and nobody knows about it, you’re better off doing the work manually. In a similar vein, it’s important to monitor production applications in order to identify failures or performance deficiencies, before you hear about them from your customers.
As the industry moved away from monolithic, on-premise systems and applications to cloud-native, microservice-based applications, monitoring is now considerably more complex. As a result, there is an increasing interest in observability. It is often said that the three pillars of observability are logs, traces, and metrics. Logs are generated by most systems components and applications and consist of time-series data about the functioning of the system or application. Traces track the flow of logic within the application. Metrics include CPU/RAM reservation or usage, disk space, network connectivity, and more. Observability simply means using all three of these sources of information in aggregate to make discoveries and predictions about the functioning of a complex system, which would otherwise be difficult to achieve. Read more about observability.
Gather continuous feedback
Continuous feedback ensures team members have all the information needed to do their jobs on a timely basis. From the development perspective this entails that the team is alerted to any pipeline failures immediately. It also means that clear, thorough code test results are made available to the developers as quickly as possible. From the product management perspective the team is made aware of any production failures or performance deficiencies, or reported bugs. In the past there was widespread belief that a development team could only optimize for speed or quality. Continuous feedback is one of the elements of DevOps that makes it possible to have both.
Change the culture
DevOps requires collaboration, transparency, trust, and empathy. If your organization is one of the rare ones where these qualities are already established, it should be fairly easy for your teams to adopt DevOps practices. If not, some effort will be required to develop these qualities. The most common organizational structures are siloed, meaning different teams have separate areas of ownership and responsibility and there is minimal cross-team communication or collaboration. For DevOps to succeed, these barriers must be eliminated. This doesn’t mean there aren’t people or teams who specialize, only that the lines of communication and collaboration between teams are open and used. Read more building your team culture.
Honing your DevOps practices is an ongoing journey. Focus on the people and processes as you start your DevOps transformation, and incorporate advanced tooling, integration, and feature functionality as you become a mature team.