DevOps – Why, What is, How to?
If the term “DevOps” is troubling you and you are finding it difficult to understand what it means…don’t worry, DevOps is nothing new! You have already been doing it, but your way! Explanation to follow shortly. So instead of answering “Why DevOps?” let’s first understand What is DevOps?
In your organization, you must be having lot of automation scripts for e.g Building the code from Source Code Repositories, Running the unit and integration tests, creating an environment (Dev, QA, Staging), deploying builds into those environments, performing feature/integration tests, monitoring your production systems for any outages, service interruptions, failures, identifying vulnerabilities, applying security policies, setting up alerts etc etc. Though you have automation in place for most of these activities, the automation scripts were possibly developed by different teams using different technology at several times with different goal in mind. Also, it’s possible that not everything is automated and requires some manual interventions here and there.
Now, with latest trends, there is a way to streamline all these activities in more systematic, defined and controlled manner and that is called DevOps.
There are a lot of organizations who are still practicing a legacy way of managing their day to day challenging activities, and for them, it’s essential to know if they need DevOps and if yes, then How?.
If answers to the following questions are mostly “yes” then the next section – ‘How to DevOps?’ is for you.
- Do you need to release your builds to a customer at short intervals (Daily/weekly/Monthly)?
- Does it take a long time for a developer to get feedback about whether his/her fix worked in QA testing?
- Does QA often open up a bug and developers marks it as non-reproducible in his/her environment?
- Does your Infrastructure management team become a bottleneck?
- Do you have different Security gates for Dev/QA and production environments? Do you find it difficult to keep track of change points and configurations for different environments?
- Do your developers, and QA spends a lot of time waiting for availability of the “good” (latest, with all fixes) environments?
- Does it take more than ten mins to know about any outage or service disruption into your production systems?
- Does it take more than a few hours to push critical fixes to production?
- Do you struggle a lot to manage your code branches, merging and identifying release candidates?
- Do you find it challenging to keep pace with changing technology and adapting to it? VMs, containers, microservices, serverless….OMG!
If you see what is listed here as familiar problems, then you need to adapt to DevOps. As you would have rightly guessed, DevOps helps you address all of these problems by streamlining the development, QA, infrastructure management, monitoring and release processes. And of course if you are on Cloud; to keep yourself “Agile” with Cloud IaaS model, it becomes inevitable to adopt DevOps culture and implement the DevOps based workflows.
Following diagram represents stages of typical DevOps lifecycle and some widely used DevOps tools used in each phase:
How to DevOps?
I want to divide the DevOps adoption into three main categories namely DevOps Assessment, Adapting to DevOps culture and maintaining DevOps. Let’s understand what each of these phases mean
1. DevOps Assessment
DevOps is not “fit for all” solution. So the first step is to perform DevOps Assessment. In the assessment phase, you should study your release process, development process, QA process, Infrastructure management activities and address the KPIs like
- How much time does it take to make a new release?
- How is the quality of release candidate?
- How much is turnaround time for critical bugs?
- How confident are you about your next release?
- What if something fails?
- How secure are your servers, network, and data?
- What are the SLA’s you need to meet w.r.t Service Availability, Business Continuity, Disaster Recovery, Data loss, etc.?
- How much is your budget for cloud-based infrastructure (if using cloud)?
And many more…
Based on this assessment you can come up with your DevOps Maturity score which tells you where you are doing good, where you need to improve and where you MUST improve. Accordingly, you would need to seek help from DevOps experts.
2. Adapting to DevOps:
I am fed up with reading this line, let’s get directly to what it means.
Someone has to take the lead and start small – Let’s start from the very beginning, using source code repository like GIT. If you are already using git, perfect! If not, GO for it. It works well when you have tens and hundreds of developers working on different features, QA is testing different components/products and release manager wants full control over what your customer should see.
Likewise, you need to adapt to many such DevOps best practices and inculcate into your culture. At a high level, below are the functional areas of DevOps
- Building CI/CD pipeline:
CI means, every day your code will be built and unit tested. Developers should immediately know what they have broken! CD means continuous delivery and deployment which means at any time, you should have production ready builds and with no or minimal intervention you should be able to take your code to production. CD is a challenging task and has to be done correctly as the penalty for mistakes is enormous. (Tools used: Jenkins/Travis/Hudson etc.)
- Infrastructure Provisioning:
You should have an ability to provision complete infrastructure from scratch (on-premise or cloud infra) in an automated manner. This will be mostly applicable to Dev and QA environments. If you are using Cloud, then you should automate your infrastructure provisioning activities as it greatly reduces time, efforts and cost. Tools used: AWS CloudFormation, Terraformetc
- Configuration Management:
Once you have Infrastructure (VMs, Network, Storage etc) setup correctly, you should be able to deploy your application (Builds, Configurations) in controlled and predictable manner. Configuration Management helps you set up consistent and repeatable environments. Tools used: Chef, Puppet, Ansible, Salt stack etc.
- Logging and Monitoring:
While your application and services running in production, you should be able to monitor your infrastructure (Hosts, Network) health, application performance, usage, services, security breaches, attacks and more. For this, you can use one or more monitoring tools like Zabbix, Nagios, New Relic, ELK, Splunk etc
Apart from above essential areas, you could also have DevOps for Data backups, Disaster Recovery, Intrusion detection and vulnerability scanning, Compliance checks and other activities that you perform to keep your business going and meeting SLAs.
Implementing what is listed above is not a problem. However, the challenge is – doing it the right! Which includes a selection of appropriate tools, technology, the building of efficient pipelines, controlling cost and much more
3. Maintenance of DevOps:
Successful implementation of DevOps does not mean that the job is done! You have to evolve continuously as Jeff Bezos says, Amazon always operates in “Day one.” Some of the areas where you should look to optimize:
- How can I further reduce the total CI/CD time?
- How can I further save my infrastructure cost for Dev/QA/Staging/Production environments?
- Can I use the free opensource tool instead of paying substantial license costs?
- Can I use this new powerful tool which can replace existing legacy tool?
- Can I reuse my current DevOps pipeline for other products?
So overall, DevOps touches upon almost all phases of Software Delivery process. You should see what is critical for you and what are the current bottlenecks and challenges. Accordingly, map the challenges with the possible DevOps solution and start by defining the roadmap.That’s it for today. Happy DevOps!
In case you have any queries related to How to DevOps feel free to drop a mail at firstname.lastname@example.org