Yet another DevOps mindset
Introduction
In today’s world, most tech companies have separated operations and development teams (that is, they are “siloed”) but we find out that though the developers would like to push every new change, like their shiny new button, to production for the customers to interact with, the operations team would prefer to keep the production environment as error-free as possible thus leading to a delay in integrating these changes. This is where DevOps comes in.
What is DevOps?
I have had a friend come up to me and ask me how he can install DevOps on his laptop 😅, most people don’t get what I say when I tell them that DevOps is a culture between teams so let’s listen to what Google has to say.
DevOps is the combination of cultural philosophies, practices, and tools that increases an organization’s ability to deliver applications and services at high velocity: evolving and improving products at a faster pace than organizations using traditional software development and infrastructure management processes.
The above definition was given by Amazon Web Services, a cloud provider. What that means is that DevOps involves all teams from the developers to the operations collaborating to ensure rapid deployment of code to production with as few errors or downtime as possible.
This is achieved by following a set of principles or best practices to help teams adopt a DevOps model. These principles will be outlined below. A DevOps engineer integrates these principles in a company’s workflow to help them achieve faster code deployment with little or no errors. However, most prefer the term cloud engineer or SRE(site reliability engineer) as opposed to DevOps engineer and as such, these titles are often used interchangeably.
Principles of DevOps | DevOps best practices
To achieve a DevOps model, here are some principles or best practices software engineering or DevOps teams should follow:
Source code management
This involves storing all code, build artifacts, configuration files, etc in a central repository where all team members can have access to it. This is important The popular source code management tools are git, svn, Github, GitLab, bitbucket, etc
Continuous integration
When code is pushed to a central repo, it needs to be built and tested. According to AWS,
Continuous integration is a software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run. The key goals of continuous integration are finding and addressing bugs quicker, improving software quality, and reducing the time it takes to validate and release new software updates.
This process is automated through the use of popular continuous integration tools like Jenkins, Github actions, AWS code pipeline, etc.
Continuous delivery
Continuous delivery is a software development practice where code changes are automatically built, tested, and prepared for a production release. When continuous delivery is implemented properly, developers will always have a deployment-ready build artifact that has passed through a standardized test process. Most continuous integration tools are also used for continuous deployment as both practices usually go hand in hand.
Microservice architecture
In ancient times, companies followed a monolithic architecture where they built the entire app at once leading to a massive codebase and lots of work for developers when refactoring. In a microservice architecture, however, the application is broken down into logical units and each unit is deployed separately and talks to each other through protocols like REST, HTTP/HTTPS, etc.
For example, let’s take a shopping application. This can be broken down into the authentication service, the products service, orders service, etc. And each service is deployed separately with its database or connected to a central database.
This is where containerization and orchestration tools like Docker, Kubernetes, docker swarm, etc come into play.
Monitoring
It isn’t possible to talk about DevOps without monitoring. Metrics are an important part of any DevOps system as they help you to know the state of your application and infrastructure at all times. Monitoring tools like Nagios, Prometheus, Grafana, ELK, etc are used for this purpose. To achieve 99% uptime, a DevOps engineer must be ready to respond to issues at any given moment and tools like slack are used to send notifications in case of any system failures.
Other DevOps principles are:
- Infrastructure as a code(IAAC)
- Configuration management
- The DRY principle(Don’t repeat yourself)
- Automation, etc
Benefits of DevOps
Well, we aren’t just implementing DevOps because it’s fun so let’s look at some benefits it brings to the table:
- Companies implementing DevOps can ship out new changes quickly and without breaking the existing system. This is important as the satisfaction of the customers is the most important part of the DevOps cycle. No customers == No revenue. A customer expects to visit your site and everything is working fine. If a developer makes a change that crashes the system, a good DevOps engineer should be able to roll back the application to the last working state
- When DevOps principles are implemented, you would be able to manage your infrastructure and development processes at scale. Take a company like Google, for example, nobody has time to SSH into 1000 servers just to install Nginx, so configuration management tools like Ansible are used for large-scale configuration management like this. Using IAAC tools like terraform also ensures that you have a kind of immutable configuration that is replicated throughout your environment
- You can adopt a DevOps model without sacrificing security by using automated compliance policies, fine-grained controls, and configuration management techniques. For example, using infrastructure as code and policy as code, you can define and then track compliance at scale.
- According to AWS, adopting a DevOps model helps to ensure the quality of application updates and infrastructure changes so you can reliably deliver at a more rapid pace while maintaining a positive experience for end-users. Use practices like continuous integration and continuous delivery to test that each change is functional and safe. Monitoring and logging practices help you stay informed of performance in real-time.
These are not all the benefits of DevOps but I will attach links down below where you can read up on more.
Conclusion
Well, I think we have said a lot about DevOps and I hope you can finally see that DevOps is not about cool technologies like kubernetes🤩 or a tool you can install but a set of principles software teams must follow to ship out code faster and less error-prone.
Also remember, these are my views on what DevOps is all about and these principles may vary from company to company. Please let me know down below in the comments section what you think about them.
Other DevOps resources
Check out these resources for more insight on what DevOps is
Principles In Striking The Balance For DevOps
An illustrated guide to becoming a DevOps Engineer in 2021 with links to coursesmedium.com
https://aws.amazon.com/devops/#:~:text=DevOps%20Tooling%20by%20AWS,that%20is%20enabled%20by%20DevOps.
Ok, so I guess that will be all for now, but watch this space for more DevOps-related posts. You can reach out to me on Github or send me an email at utibeabasiumanah6@gmail.com. Thanks for reading✌️
Please leave a comment if you have any thoughts about the topic — I am open to learning and knowledge explorations.