What is DevOps?
This is the question which has been asked by countless people and in a similar fashion been answered by numerous individuals.
Not all the answers are relevant (precisely correct) and may have different opinions.
But I wonder when experienced IT professionals provide literally clueless and irrelevant answers.
I am not pointing to anyone neither I am saying I know everything (My views may not match someone else’s views), however, I thought to just shed some light and provide an insight to my dear readers.
Before we jump in, let me tell you some of the myths around DevOps which I have heard from several professionals.
- DevOps is all about using a tool (Puppet, Chef, Ansible, Jenkins, Teamcity, etc)
- DevOps is just a role or a domain.
- DevOps people should always write code in the same manner as Developer since DevOps stands for Development + Operations
- DevOps is about giving all the accesses to Developers and they should perform all the Ops activities
- DevOps is a solution for all IT problems.
- DevOps can only be opted if you are on Cloud
- DevOps can only benefit the Development and Operations teams
- DevOps replaces agile
- DevOps adaptation is just for specifics scenarios/problems
- DevOps can be practised only in large organisations
So what exactly is DevOps?
DevOps is basically a collaborative culture with a philosophy of combining set of practices, techniques, tools, processes and technologies to enable better collaboration, communication and having rapid feedbacks among the teams for delivering quality product in a quick manner.
It is a movement which enables high trust among the teams by collaborating which ensures they are producing right software everytime.
In layman’s terms:
DevOps is revolution to improve the service Quality and Productivity by enabling Collaboration, Integration and Communication
Developers start the development (sometimes faces CI/CD issues) and provide artefacts. QA’s start Testing followed by raising the defects as they come across any bug.
As soon as QA’s start logging the defect, Developer start complaining about the environment saying “It works on my machine”.
Eventually the issues get worked out and then project gets ready for live deployment.
Ops guys deploy the artifact on Production and the website/system stops working. Ops point out to Developers that there is some issue in your artifacts and they have provided faulty artifacts, Developers refuse all the allegations and defend themselves by saying- its an environment issue as artifacts are working fine in dev/test environment. Developers takes a step back by pointing to Ops guys that PROD is Ops environment and Ops guys needs to fix the issues.
DevOps resolves these type of challenges by establishing collaborative cross-functional teams who shares the responsibilities of keeping all different environments up to date and preparing the software to run on all the environments without any issue with enhanced productive feedbacks.
DevOps is a comparably new word (introduced around 10 years ago but probably got a boom in last 5-6 years) but its not a new thing. We were using some basics of DevOps and utilizing the benefits from a long time, however as time changes new technologies, processes are emerged and got established in the market which has made DevOps as one of most powerful culture among all.
As represented in the above DevOps general logo, it’s a never-ending cycle with continuous planning, development, build, deployment, release, testing, monitoring, etc.
To implement successful DevOps you need to have a DevOps metrics which includes, build/deployment frequency, build/deployment/system failure rate, mean lead time, and mean time to detect & recovery. You need to choose a range of good DevOps metrics tools which should allow you to focus on relevant problem areas and gives you a positive outcome
Benefits of DevOps
We have already discussed everything about SCM (a formal practice used before DevOps term emerged), but when it comes to DevOps it brings Agility in the Organization which helps in several ways.
Some of the genuine benefits of DevOps are:
- System Readiness and Stability: It’s an important aspect in DevOps since DevOps is all about providing stability to software development. DevOps encourages to get the environment ready during the development process which will make sure that the code and environment are tested together at the earliest stages of the project.
- Error detection as early as possible: This is one of the main goals of DevOps. DevOps implementation will definitely help in detecting the errors in early cycles of the development which reduces the developer’s efforts of debugging an issue in a later stage of development.
- Faster mean time to recovery (MTTR) in fixing the releases: DevOps enables the practice of producing frequent, rapid deployments with low (rather, nil) failure rate and the shortest recovery time
- Redemption from ‘Works on my machine’ philosophy: DevOps helps in removing the obstacle (works on my machine phenomenon) to continuous flow in software delivery by containerizations, on-demand servers, etc.
- Deliver the promised features to the Customer: When promised features aren’t delivered on time and people started leaving the products and that actually decrease the revenue of the company, DevOps helps in making sure that customers are getting all the features on time.
- Works with all industries: DevOps can be adopted and implemented in every type of industry which helps in building the right product every time with fewer efforts and improved quality. It predetermines the awful outcomes which happen in both small and large organizations, product-based – service-based companies, and across every type of industry.
- Reduce Developer’s workload: Developers must focus on delivering the promised features rather than spending time on the non-functional requirements, such as Tools configuration, Integration, Infrastructure manageability, scalability, reliability, security, etc
- Some other awesome and main benefits are:
- Accelerated time to market
- Ability to build the right product every time
- Better Infrastructure’s resource management
- Increased deployment frequency
- Minimized lead time between release/regular fixes
- Improved productivity and efficiency
- Team dependencies are mediated
- Ability to deliver reliable releases
- Reduced human errors
- Improved product quality
- Improved customer satisfaction
DevOps Obstacles – Difficulties in adapting DevOps
- Choice of Tools which are difficult to integrate and not compatible.
- Management is not ready to adopt the new change.
- Time constraints.
- No Clear Plan.
- Application Complexity.
- Moving from legacy infrastructure to DevOps Scalable Infrastructure.
These all obstacles are pretty common in adopting DevOps for any of the Organization, however, these can be resolved by following the DevOps Best Practices.
DevOps Best Practices
We have already discussed the SCM best practices and CI-CD best practices which should be referred for DevOps best practices. Apart from those, there are some more points which we need to consider while implementing DevOps in the Organization.
- Bring Collaboration and Agility among all the teams so that everyone knows what’s going on in the project.
- Short and well-planned Sprints with achievable story points.
- Automate the Infrastructure with one-touch provisioning and implement Continuous Integration, Continuous Delivery, Continuous Testing, Continuous Monitoring, etc along with a space of Continuous Improvement since DevOps is a Continuous Journey.
- Environments are available early in the development cycle.
- Code and Environment are tested together, even at the earliest stages of the project.
- Ability to create the whole working environment (OS, Firewall setup, Networking, Application code, Database connectivity, Virtualization layer, Monitoring tool’s daemon, etc.) in just one step
- Use the same build-deployment mechanism to build the Dev, Test and Production environments.
- Creates a reusable build and deployment procedures.
- Manage the entire infrastructure and development processes at scale and helps in managing the complex systems efficiently with reduced risk.
- Implement DevSecOps helps to automate core security tasks by embedding security controls and processes into the DevOps workflow.
- Monitoring should be implemented for lower environments as well, such as UAT, Pre-Prod which allows identifying the defects as early as possible before the software goes live on Production.
- Shorten feedback loops to bring Development closer to the customer experience.
- Ensure continuous feedback between the teams to spot communication gaps, resolve issues and eliminate inefficiencies.
DevOps and Agile
People often compare Agile with DevOps and says DevOps replaces the Agile – It isn’t true. I agree implementation of DevOps is always in sync with Agile methodologies but these aren’t same. DevOps can be considered as a logical continuation of Agile journey.
Agile principals are associated to the planning and development of software whereas, DevOps deals with planning, development of the software, deployment with automated Testing of the said software and delivering accurate, stable, reliable product every time with a proper feedback loop. Agile process is one of the most essential parts of successful DevOps practice.
DevOps Lifecycle can be defined into below DevOps Stages:
- Excellent Planning: Planning is the key part of DevOps lifecycle, the Continuous Software development starts with excellent planning.
- Continuous Development : Enforces to keep on delivering the updates continuously with CI/CD implementation, which enables software code to be delivered to customers as soon as it is completed and tested, instead of delivering the software in one large bunch.
This benefits the team to speed up the software development and software delivery process.
- Continuous Integration: CI is the process of enforcing developers to merge their code to the mainstream branch or working code base as often as possible. CI makes everyone’s life easier by making software build rapidly and simple to find bugs which allow developers to fix them promptly. It will help users to save their money, time & efforts.
- Continuous Delivery & Deployment: Continuous Delivery (CD) is the practice which aims to deliver high-quality software really quickly every time. CD is an extension to the CI process and it makes your software always ready to go on production. To find out more about Continuous Delivery and its comparison with Continuous Delivery, please refer our CI vs CD article
- Continuous Testing: Continuous Testing is another most important phase of DevOps lifecycle, it is actually part of CD and Continuous Delivery will only be implemented if you have to implement Continuous Testing. It fills the gap between Development and Continuous Delivery.
- Virtualization and Containerization: Now there is no need to spend additional money on physical servers in the era of virtualization & containerization. It is always a big headache to Ops to maintain the uptime/stability of the environments. These resolve the biggest problem of Software industry, i.e. “It Works On My Machine”.
- Continuous Monitoring: It’s another valuable phase of DevOps Lifecycle. It is a process for continuously evaluating the performance of the environments, tools and applications. Organisations who don’t use or miss out to implement monitoring results in losing their time, money and huge efforts which can be easily avoidable by implementing Continuous Monitoring in an effective way.
- Continuous Feedback: DevOps culture runs on the concept of fetching feedback and do the appropriate changes in the system. Continuous feedback is essential to software release and deployment as it evaluates the effect of each release on the user experience and then reports it back to the DevOps team to improve the upcoming releases. Nowadays Customers are really looking forward to immediate actions based on their feedback. Customers are giving a lot of importance on Customer service which essentially coming by adapting the change quickly and reliably.
Feedback is not just limited to customer, it’s the process which is involved in each and every step of Software Lifecycle. When you plan the change, BA & Product owner seeks feedback from customers. Later BA requires feedback from Program managers, project manager, technical leads, project leads, etc. Once a module been identified, the developer seeks feedback from the whole team. Once the module been developed and built, CI tool sends feedback to Developers & Testers. Once the module been deployed, CD and Monitoring tools send feedback to the team. Developers & Testers give continuous feedback to Operations which helps them to stabilise the systems as per the requirements. It’s continuous feedback which keeps the application up and running without any issue.
Some organisations recognize the importance of DevOps only when things go wrong in their project, but sometimes it is too late and getting a project back on track can be a tedious task without it.
The complete implementation of DevOps is not an easy task. Team has to do a lot of work to implement and keep the system in good shape, but frankly speaking whole effort is worth of every penny. You will realize it once you have a well implemented successful DevOps in your organization.
To avoid any failure later in the process, DevOps should not just be implemented for the sake of certification or audit purpose. It should always be cautiously designed, properly implemented and practised systematically before you actually start working with it.
It can help you to stop any trouble before it actually starts and with the help of it, you can make sure that you are building comprehensive and reliable software. You will realise the enhanced efficiency and stability with a drastic increase in Profits.
I hope this article gives you a fair amount of idea on what DevOps is and what are the other essential things that you need to know about it.
Keep the quest on.