Implementing DevOps in a Large Organization: 7 Best Practices
Devops (derived from “development and operations”), is a set of practices that aims at unifying software development and software operation teams. The main goals of DevOps are to improve collaboration, speed up the time to market (TTM), improve the efficiency and quality of the products, and preserve security compliance. This practice is gaining increased attention in organizations worldwide during the recent years.
Here are 7 best practices for a successful DevOps implementation, based on my experience as DevOps leader at Bezeq International.
1. Having a Centralized DevOps Unit (if you’re a large organization)
It is common in the industry for large-scale of organizations, to use a Centralized Devops unit, which creates and owns all of the Devops Tools and implements agile in each of the organization’s development teams (based on a standard enterprise DevOps policy).
The centralized Devops team chooses the most beneficial tools for the organization, maintains these tools, creates implementation and guidance programs for the developers and provides help and assistance for the implementation period and afterwards.
In Bezeq International, the centralized DevOps team is currently focusing on implementing Continuous Integration and Continuous Deployment processes with many DevOps tools, including Jenkins. This is part of our complete strategy for introducing more robust and agile tools to the company. The strategy improves our focus on the Delivery, reduces the TTM, and adds many automation processes to the development teams.
2. Start out by Implementing “Highly importance tools” like JIRA
Don’t start with all the new tools and methodologies at once, because this will be overwhelming. Take it step by step. I recommend starting with Jira, because it’s a useful tool that significantly improves developer’s work, with little overhead.
Jira is an issue tracking tool, which adds transparency to the issue tracking process and unifies it inside all development and QA teams. With the entire flow managed in Jira, including all issues and projects, it is much clearer for an organization to handle all of its issues, become agile, and focus on delivery. This is much better than working with spreadsheets or tools like Redmine, with an ill-managed versioning strategy.
In Jira, you will be able to track the Devops issues of implementing the next-phase Devops tools, so this is the main reason to start with a tool like this.
3. Implement Tools Individually Among Teams
The recommended approach is to implement tools for each team individually, by creating tailored workshops for each one. That is how a small Devops team can manage all the ongoing first line support that usually comes after the completion of a workshop like this. Just select an Alpha team, onboard them to the new tool, and complete the rest of the development teams and the QA teams one by one later.
Devops teams should tailor the workshop for each type of employees: development, product, QA, etc. We also recommend setting up mutual working processes in advance, so they can also be implemented in the training. For example, to train Visual Studio developers on Git, show them the git plugin. For python developers on git, show them some Git UI tool like SourceTree or Kraken.
4. Select DevOps “Champions”
Try to look into all the other development/ QA teams in your organization, and search for the keenest employee in each team for learning new tools. Make her/him a "special DevOps point of contact" for you to work with in that team. This will make implementation more efficient, and also builds leadership in your organization.
5. Automate as much as possible
A good DevOps engineer needs to try and automate things as much as possible. My motto is: ‘If a developer is doing something twice, you need DevOps.’ Encourage developers to come to the DevOps team in your organization, drink coffee, talk about issues and find a tool that can help them eliminate the duplicate work.
The core tool of all automation, by far, is Jenkins. It has its arms stretched out to all Devops fields, with plugins for everything you need. So learn it well and utilize it as much as possible. Another automation tool for load and performance testing is Taurus.
6. Become a Psychologist
Implementing the new DevOps methodology isn’t always easy for developers. So, DevOps engineers also need to be psychologists. It can be hard for some of the developers to learn new tools and methodologies, and they might be afraid the learning time affects their regular daily assignments. A good DevOps engineer needs to know how to reduce objections in a company. Make sure you focus on the developers who find it harder to learn things, and progress along with their adaptation rate. Don’t forget that training, building infrastructure, etc., takes time.
7. Build Up the Rest of Your CI/CD Pipeline
Choose tools according to your organizational needs.
- Bezeq International uses Git. The edge it gives us over other DVCS tools, is its strong community (for example, managing migrations from old tools to Git is easy when you have many forums about that).
- Try to avoid managing your code and artifacts on local workstations or Shared NFS - as you can imagine, this leads to disasters.
- Create an organizational policy about SCM tools: which branching strategy to use, which recommended VCS Managing/GUI tool to use. In Bezeq International, we defined our SCM policies and put together a document for all VCS best practices. We decided on the most common Git-Flow and branch methodology between our development teams, and now all our teams work this way.
- We also use BitBucket, for managing the user roles and projects, which can be easily setup and integrated with Jira.
- Another recommended tool, is an open source Static Code Analysis tool SonarQube, which performs an analysis each time a developer commits code. If SonarQube finds it faulty, the code isn’t pushed into the common Git branch. And, yes, it’s all performed automatically without manual steps.
- DBMaestro is used for managing our Database releases and performing CI for all our DB schemes and Data.
- Our DevOps team is now pushing hard for implementing Nexus OSS for our packages management, and connecting it to Jenkins and its JOBS.
- For the future, add Docker images and containers to the development teams, move to an internal cloud instead of using bare metal servers, and use Kubernetes for the orchestration of your containers.
- Make sure you have a good performance testing tool in your CI/CD pipeline, to ensure code changes don’t affect your system’s performance. Open source tools like Apache JMeter™ or Taurus, which can be scaled and enhanced with BlazeMeter, will cover your load testing needs.