Understanding DevOps for Absolute Beginners

Delivering Software Applications to End Users

The main goal of software development is to deliver a working software application to users. Whether you use Waterfall, Agile, or another method, the core process remains the same: you create the application and deliver it to users so they can use it.

💡 Tip: Waterfall is like following a recipe step-by-step, while ⚡ Agile is like adjusting a recipe as you cook – both are ways of creating and delivering software projects.

Deliver Application to End User

Software Delivery Process

First, think of a good idea for an application that solves a problem or improves a workflow. Then, gather and define the features it should have. Developers will then write the code. After coding, testers will check the application to make sure it works.

Once the application is tested, you must build and package(create executable) your application into a format that can run on a server. Finally, you need to deploy it on a public server(on-premise or public cloud provide like AWS, GCP, AZURE, etc.) so users can access it. To do this, You also need to set up the server with all the necessary tools and configurations such as installing supporting softwares, utilities, etc.

💡 Tip: A server is a powerful computer that runs applications and stores data. You can use a public server, either in your own location (on-premise) or rented from cloud providers like AWS, GCP, or Azure.

💡 Tip: To "deploy" means to set up your application so it can be used by others. This usually involves putting it on a server, whether on-premise or on a cloud platform like AWS, GCP, or Azure.

Software Delivery Process

Ongoing Operation and Monitoring

Releasing the application is just the start. While users are using your application, you need to monitor it for any problems they might have or new features that they want. This means you must continuously monitor and operate the application even after it is launched.

Development and Release Process doesn’t stop after the first release.

Continuous Updates and Versioning

Users will request new features or improvements to make the application better. They will also report issues. Each time you update the application, it should be accessible to all users immediately.

To manage software application updates, you use version numbers like 1.x.x, 2.x.x, 3.x.x, and so on. This helps keep track of changes. Hence, the release cycle goes like this(after the initial launch):

new feature or bug fix -> code -> test -> build -> deploy -> monitor

This creates a continuous and never ending delivery process, making software development an ongoing cycle.

Need of a Fast and High-Quality Delivery

Fast and good deliveries are key to meeting market needs and keeping customers happy. Fast deliveries get products to users quickly, allowing for quick feedback. Good quality means fewer bugs and a better user experience. Hence, the continuous delivery process should be fast, frequent, and high-quality.

Achieving this is not easy due to some barriers in the way IT companies or teams traditionally work.

Challenges and Barriers

Communication Barriers

The biggest problem is the lack of communication and collaboration between developers and the operations team.

💡 Tip: Developers are the people who create and write the software, while the operations team are the people who make sure the software runs smoothly and stays online.

Releasing an application has two main parts: coding it and running it. Developers code the application. The operations team deploy and runs the application.

Developers vs Operations Team

This can create a gap where developers say,

"I wrote the code but can’t run it"

and the operations team says,

"I run the application but don’t know how it works."

Developers often write code without thinking about how it will run or be deployed. The operations team tries to run the application without fully understanding it. This miscommunication can cause problems. Developers might finish coding, but the deployment guide for the operations team might not be good or detailed enough. This makes it hard for the deployment team and delays the release.

If the feature or bug fix has issues, the operations team sends it back to the developers for improvements. This back-and-forth can stretch the release period from days to weeks or even months.

Manual Interventions
Many other tasks in the release process, such as security checks, and testing, are traditionally done manually. Operations teams often execute commands directly on servers, install tools, configure settings, patch, or run batch scripts manually. This manual work is slow and prone to errors.

DevOps was introduced to remove these type of obstacles and speed up the software delivery process while maintaining quality through a fully-automated and smooth workflow.

Text Book Definition of DevOps

DevOps brings together cultural ideas, practices, and tools to help release software quickly and with high quality. It emphasizes creating smooth, automated processes for continuous delivery, making software releases more efficient and reducing errors.

A main idea in DevOps is that developers and operations teams should work closely together, communicate often, and collaborate better. This teamwork helps connect the coding and running of the application, leading to smoother and faster releases.

How DevOps Works in Real Environments and the Role of DevOps Engineer

The term "DevOps" can be a bit broad and might seem confusing at first. It's all about making sure the development (making the software) and operations (running the software) teams work together smoothly. To do this well, it requires specific focus and expertise.

Different companies handle DevOps in their own ways. Some companies have developers or operations staff take on DevOps tasks in addition to their regular jobs. Others have a dedicated person, called a DevOps Engineer, who focuses only on these tasks. This person needs to know certain technologies to help apply DevOps principles effectively.

Even though DevOps isn't just about having a specific job title or using certain tools, the role of a DevOps Engineer has become important. This role helps make the process of releasing software smoother, solving earlier problems, and making software releases faster, easier, and better.

Begin Your DevOps Engineer Career with Our Comprehensive Learning Path.

DevOps Engineer Learning Path | Kodekloud
As a DevOps engineer, you should focus on technical skills such as scripting and programming languages, knowledge of operating systems, experience with cloud platforms, proficiency in infrastructure as code tools, and familiarity with containerization technologies.