15 Best Practices for Implementing DevOps – Part 3
DevOps transformation in an organization is not a one-size-fits-all approach in terms of process and implementation. Implementing DevOps is not only a process shift but a cultural transformation that includes proper planning on team structure, creating a training plan for the team, setting up process, automation and tracking the actual process with a centralized dashboard, and so on.
Below best practices will help your organization to implement DevOps and reap the benefits out of its implementation. The principles listed below may vary across Team & Enterprise. But most organizations will have their own strategy and principles behind their DevOps Approach. In this post, I will share my perspective on the underlying principles of the DevOps movement.
Refer to the previous post for Part 2 - Lifecycle of DevOps
DevOps Best Practices
- Start small
- Version control
- Staging Environment
- Continuous Integration
- Continuous Testing
- Continuous Delivery
- Continuous Deployment
- Automation – Infra/App
- Continuous Monitoring
- Open Source
These pointers are collated from the current industry practice and my own experience which will give you an explicit idea of how and where to start DevOps that can reduce the hurdles in deploying, securing, and maintaining the software.
Focus on Needs
The focus should start with evaluating DevOps practice, first understanding the customer needs and align your goals with business requirements. DevOps should not be forced just because it is the latest trend. It should be driven by business goals and customer requirements (Time to market, Availability, performance, release frequency)
Start small with Proof of Concept projects or Minimal Viable Product or Prototype that has high success probability to gain confidence in the team. For example, don’t try to eat the Watermelon in one shot, cut it into pieces and consume it piece by piece.
For successful faster delivery of software, Concentrate on the process and not on the tools. Work together instead of blaming each other, Dev & Ops should work together without much noise for successful results.
Don’t concentrate on tools. Focus on the Process, Tools will be easily replaceable (tailored) without much noise. Meaning that, If you freeze or crafted the process we can stitch the toolset for end-end software development and deployment process. Not only does automation enable higher productivity, but it also frees up organizations to focus on what really matters— driving performance.
The above perception is from my experience. I mean it 🙂
Believe it or not: Version it each and every stuff be it Application code or Test cases or Design documents or External libraries or Database scripts or Automation scripts or Infra deployment scripts or Application deployment scripts or Jenkins configs or Application configs. Anything you need to update please put in the version control.
Preserve a production similar environment always ready to avoid issues that are found after going to production. For example, scaling issues, access issues, functionality issues, and environmental issues can be triaged in the staging environment for a quick resolution.
Have a defined process to bulldoze developers to integrate their work from feature level branches to release level branches more frequently or at least daily and have automated tests against the build. By this approach, we can avoid integration issues and conflicts much earlier rather than issues detected from customers and fix them. The latter approach will incur the cost and Turn around time.
Have a test suite running very often whenever code is integrated on every hour or day basis to make sure the code is stable with the release level branches.
is an extension of continuous integration, it does not mean that every change to the software must be deployed to the production environment as soon as possible. It means that any modification has been proven to be deployed at any time with a valid approval process.
is a logical next step after continuous delivery: all changes that pass automated tests are automatically deployed to the production environment without any manual intervention.
Automation – Infra/App
DevOps Automation is the key to improving release efficiency and product stability. So plan to set up end-end automation for your Infrastructure and application Deployment.
Infrastructure environment: Have the automation-ready for all the components starting from the load balancer, database … etc, to reduce complexity and manual errors.
Application Deployment: Along with the Environment, please have the deployment automation for applications added to the above environment build automation. It should include initializing the databases, initial setup of the application, installation of dependencies, and others.
Have the monitoring setup enabled to continuously run the site 24/7 without downtime?
Document each and everything. Be it any process like Change management (or) Pipelines or Run Book or Release Management or Patch Management or Rollout releases or Rollback releases to circulate better communication between teams.
Site Reliability Engineering
Use ARE best practices. Start with site reliability engineering (SRE) principles, because they help build collaboration, reduce waste, and increase efficiency. Refer for more info.
Enable security and compliance within the software deployment process (CI/CD). To improve security we have to integrate all security best practices parallelly while building a product rather than applying all the security checks to a finished product.
Shift left is an approach to software development where security has to be built into the process and designed into the application at an earlier stage of SDLC. The main goal is to find security-related issues at an earlier stage of the development cycle.
Leveraging open-source tools and engaging in the community will help the team to gain knowledge resulting in the best practices and solutions.
My Two Cents
Start small and work in small batches
Start from the bottleneck and start small and work in small batches in a continuous manner, through repeated experiments and rapid learning you can find the most correct implementation path.
In this way, big problems need to be broken down into a series of small tasks and can be solved (targetted) one by one in a gradual manner.
On the basis of targeting small batch work, establish a feedback loop. The feedback loop allows us to continuously learn and make continuous improvements based on learning. The continuous delivery pipeline is the concrete realization of the feedback loop.
Automation is the bottom line of DevOps!!! If your software does not have a complete set of automation written to set up your infrastructure, application deployment, and testing. Please don’t talk about DevOps.
DevOps is more than just a set of tools. Getting the team to align on the process and culture doesn’t happen overnight. Often we receive a lot of pushback from team/individuals/cross teams which could result in chaos, sometimes resulting in unstable product delivery to the customer. So to transform you have to start small and take one step at a time will result in making DevOps a reality.
Next post: Comprehensive list of devops tools
Related Online Courses
1. Online Courses – Modern DevOps Implementation
What you’ll get from it: This course helps you implement a complete DevOps cycle in your existing IT environment
2. Books – Practical DevOps
What you’ll get from it: This book covers multiple important subjects that every DevOps engineer should know from architecture, coding, testing, deploying, monitoring, and tracking issues.