Some time during 2011, Forrester had released a report ‘Augment DevOps With NoOps‘ quoting, “DevOps is good, but cloud computing will usher in NoOps.” It’s been over five years, several statements quoted then in the report still have a lot of weightage. While several have embraced cloud and Devops, there’s a huge bunch of DevOps professionals out there who still think NoOps is the end of DevOps. But, in reality what is NoOps? It is just the progression of DevOps.
And DevOps being the mere extension of Agile to include Ops as well, can we call NoOps as Agile Ops? In this post we will dive deep into how developers are building, testing and deploying applications, automating operations and making use of micro services, leading to NoOps (more so Agile Ops) where everything is rolling out fast, very fast.
Role of Cloud in NoOps and the Continuous Automative-Approach to DevOps for Agility
Before DevOps concept came into existence, the development team was responsible for the estimation of servers, memory and network components and the final specification of the resources. This was a tedious process. Later ITOps started taking care of estimation of servers, memory and network components and the final specification of the resources, while also managing them. However, to bring in agility, DevOps was born where developers started leveraging IT Agile concepts and managing operations to to roll-out applications faster.
Today, several cloud and PaaS platforms help developers automate the application lifecycle management activities such as allocating a machine instance to run the application, loading the OS, and other architectural software components like application servers and databases, setting up the networking layer, building the application from the latest source in the code repository, deploying it in the configured machine, etc.
So as and when the developers automate operational tasks, they are able to free-up their time more for business logic and less for operations. In most cases they perform ‘no Ops tasks at all.’ In essence, they have made a progression from DevOps towards NoOps.
DevOps is there, but it is being augmented with NoOps using cloud automation.
Mike Gualtieri of Forrester Research, who coined the term NoOps, once said in his blog post, “NoOps means that application developers will never have to speak with an operations professional again.” This means that now more and more developers are responsible for operations. And operations are getting ingrained in job description of developers. Thanks to increasing cloud adoption, today’s operational tasks are increasingly carried out by developers more rather than the ITOps professional. Here’s why: Cloud has brought in consistency and elasticity which makes it easier for developers to automate everything using APIs.
For instance, the leading public cloud – AWS offers a bunch of services and tools that have the capability to automate repetitive tasks. Use of services like Jenkins, CodePipeline, & CodeDeploy helps them automate their build-test-release-deploy process. This enables developers to deploy a new piece of code into production, potentially saving hundreds of hours every month.
Consider the Netflix case study. VP Cloud Architecture Strategy at AWS and then Cloud Architect at Netflix, Adrian Cockcroft says in his blog post, “Several hundred development engineers use tools to build code, run it in a test account in AWS, then deploy it to production themselves. They never have to have a meeting with ITops, or file a ticket asking someone from ITops to make a change to a production system, or request extra capacity in advance.”
Cockcroft further adds in the same post, “They use a web based portal to deploy hundreds of new instances running their new code alongside the old code, put one ‘canary’ instance into traffic, if it looks good the developer flips all the traffic to the new code. If there are any problems they flip the traffic back to the previous version (in seconds) and if it’s all running fine, some time later the old instances are automatically removed. This is part of what we call NoOps.”
“NoOps approach leads to business focus, clean application development, shorter cycles, and more so increased business agility.” – Vijay Rayapati, CEO, Minjar Cloud Solutions
Further, as DevOps and microservices work better when applied together, adopting microservices architectural style and common toolset that supports it through code, engineers can bring about additional productivity to DevOps and agility to Ops.
DevOps and Microservices Architecture: Moving Hand-in-hand to Enable NoOps
Microservices can help developers and DevOps collaborate over requirements, dependencies, and problems, allowing them to work jointly on a problem such as build configuration or build script issue. With microservices, functional components can be deployed in their own archives. The application can then be organized as a logical whole through a lightweight communication component such as REST over HTTP.
More so, microservices-based architecture empowers DevOps to manage their own line of codes (LOCs) without depending on others for deploying them anytime. By enabling this independence, microservices architecture can not only help increase developer productivity but also make the applications more flexible and scalable.
Here’re the highlights how microservices can help DevOps in all the aspects of operations management:
- Service Deployability: Microservices enables DevOps to incorporate service-specific security, replication, persistence, and monitoring configurations.
- Service Replication: Kubernetes provides a great way to replicate services easily using Replication Controller when services are needed to be replicated using X-axis cloning or Y-axis partitioning. Each service can build their logic to scale.
- Service Resiliency: Since the services are independent by design, even if one service fails, it would not bring down the entire application. The DevOps can remedy that particular service without having to worry about the cascading impact because of the individual service failure.
- Service Monitoring: As a distributed system, Microservices can simplify service monitoring and logging. Microservices allows DevOps to take a proactive action, for example, if a service is consuming unexpected resources and scale resources only for that service alone.
Considering the above points, DevOps should embrace the microServices approach to bring agility to all the Ops tasks carried out by DevOps engineers.
Public Cloud Services: Empowering DevOps to Move Towards NoOps
Due to a diverse set of features, tools, and services offered by cloud services, today’s developers as well as DevOps are able to automate several tasks and autoscale without the help of ITOps professionals. This has brought down the burden of doing repetitive operational tasks, especially for developers and DevOps. For instance:
- Auto Scaling: A DevOps can create collections of EC2 instances/VMs, specify desired instance ranges, and create scaling policies that define when instances are provisioned or removed from the collection. When this resource provisioning capability is available at hand, the tasks of Ops team gets redundant and they can focus more on business logic rather than Ops.
- AWS OpsWorks, which helps configure and manage applications, create groups of EC2 instances, and streamline the instance provisioning and management process. When this resource managing capability is available at hand, the tasks of Ops team gets redundant and thus they can focus more on business logic rather than Ops.
- A centralized log management tool helps developers and devops simplify troubleshooting by monitoring, storing, and accessing log files from EC2, AWS CloudTrail, and other sources.
- Using EKK stack, a developer can focus on analyzing logs and debugging application instead of managing and scaling the system that aggregates the logs.
- AWS CodePipeline, AWS CodeBuild, and AWS CodeDeploy help automate manual tasks or processes including deployments, development & test workflows, container management, and configuration management.
- AWS Config, which creates an AWS resource inventory like configuration history, configuration change notification, and relationships between AWS resources. It provides a timeline of resource configuration changes for specific services too. Plus, change snapshots are stored in a specified Amazon S3 bucket and can be configured to send Amazon SNS notifications when AWS resource changes are detected. This will help keep vulnerabilities under check.
The last word: NoOps Brings Agility to Ops Tasks, So NoOps is Synonymous to Agile Ops
In the journey of DevOps, if you automate mundane Ops tasks, it leads to NoOps. Essentially, NoOps frees-up developers’ time to further utilize their time for more innovation and to bring agility into ops (which is Agile Ops). Whatever you perceive it is: Ops Automation, AI Ops, Agile Ops , or more, it is a rolling stone with the right momentum.
What is your take on this? Do share your thoughts.