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.
So here we go ………
First of all, let me tell you some of the myths which I have heard from several professionals :
- DevOps is all about using tool (Puppet, Chef, Ansible, Jenkins, Teamcity, etc)
- DevOps is just a role or a domain.
- DevOps people should always write code in same manner as Developer since DevOps stands for Development + Operations
- DevOps is about giving all the accesses to Developers and they should performs all the Ops activities
- DevOps is solution for all the IT problems.
- DevOps can only be opted if you are on Cloud
- DevOps can only benefits Development and Operations teams
- DevOps replaces Agile
- DevOps adaptation is just for specifics scenarios/problems
- DevOps can be practiced only in large organisations
and so on ……
So what exactly DevOps is ?
DevOps is basically a collaboration 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 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 term :
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 provides artifacts. 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 long time, however as time changes new technologies, processes are emerged and got established in the market which have made DevOps as one of most powerful culture among all.
As represented in the above DevOps general logo, its 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
Why do we need DevOps and What are the Benefits of it?
We have already discussed everything about SCM (a formal practice used before DevOps term was emerged), but when it comes to DevOps it brings Agility in the Organization which helps in several ways.
Some of the genuine benefits are :
- System Readiness and Stability : Its an important aspect in DevOps since DevOps is all about providing stability to the 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 goal 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 issue in 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 a 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 less efforts and improved quality. It predetermines the awful outcomes which happens 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 deliver the promised features rather then 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
Difficulties in adapting DevOps : DevOps Obstacles
- Choice of Tools which are difficult to integrate and not compatible.
- Management is not ready to adapt 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 know 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 to identify 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.
Poeple 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 logical continuation of Agile journey.
Agile principals are associated to the planning and development of a 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 proper feedback loop. Agile process is one of the most essential parts of successfull 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.
- If you have analyzed and estimated the requirements perfectly, you can easily plan everything and come up with excellent approaches.
- 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 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 helps users to save their money, time & efforts.
- Continuous Delivery & Deployment : Continuous Delivery (CD) is the practice which aims to to deliver high quality software really quickly every time. CD is an extension to 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 implement Continuous Testing . It fills the gap between Development and Continuous Delivery.
- Continuous Testing requires automated end-to-end testing solutions by executing automated tests as part of the software delivery pipeline that completely integrate with the existing development processes to complete the SDLC.
- Virtualization and Containerization : Now there is no need to spend additional money for 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 resolves the biggest problem of Software industry, i.e. “It Works On My Machine”.
- You can have the same set of programs, libraries, modules, languages, application framework, executables, etc in one machine/container and can replicate the same as another environment within minutes. This will reduce the Devs pain of debugging the issue on different environments and Ops headache of maintaining different environments. The aim is to make the applications able to run anywhere, anytime on any machine. Virtualization (Virtual Machine) represents a hardware-level virtualization and being in use since decades whereas Containerization deals with virtualizing at the operating-system level and rapidly caught everyone’s attention due to its distinct advantages, however there are different pros and cons of both which we can discuss in our later articles.
- Continuous Monitoring : Its another valuable phase of DevOps Lifecycle. It is a process for continuously evaluating the performance of the environments, tools and the applications. Organisations who doesn’t use or miss out to implement monitoring, results in loosing their time, money and huge efforts which can be easily avoidable by implementing Continuous Monitoring in effective way.
- It’s really necessary to understand what to monitor and how to monitor. Many organisations just monitor Production all the time however numerous organisations got benefitted from implementing Test & Pre-Production monitoring along with Production. Application performance management (APM) framework should be properly configured to monitor and manage the performance, availability of software applications and identify issues and provide a view of performance from application ongoing perspective. The aim of adopting DevOps culture to deliver fast, secure, accurate and reliable software everytime and this will help in identifying & fixing the issues in early stages.
- Continuous Feedback : DevOps culture runs on the concept of fetching feedback and do the appropriate changes in the system. Continuous feedback is an essential to software release and deployment as it evaluates the effect of each release on the user experience and then report it back to the DevOps team to improve the upcoming releases. Now a days Customers are really looking forward for immediate actions based on their feedback. Customers are giving lot of importance on Customer service which essentially coming by adapting the change quickly and reliably.
Feedback is not just limited to customer, its 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, developer seeks feedback from whole team. Once module been developed and built, CI tool send feedback to Developers & Testers. Once the module been deployed, CD and Monitoring tools sends feedback to the team. Developers & Testers gives continuous feedback to Operations which helps them to stabilising the systems as per the requirements. Its a continuous feedback which keeps application up and running without any issue.
Words to the wise
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 practiced 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 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 questing ….