As the IT field has evolved over the years, different job roles have emerged leading to confusion over the differences between Site Reliability Engineer Vs. Software Engineer Vs. Cloud Engineer Vs. DevOps Engineer. For some people, they all seem similar, but in reality, they are somewhat different. The main idea behind all these terms is to bridge the gap between the development and operation teams. Even though these roles are correlated, what makes them different is the scope of the role. In this blog, we are going to explore that difference.
The traditional role of a software engineer is to apply the principle of engineering to software development. This includes the use of programming language to create, analyze and modify the existing software and design and test the user application. A person doing the job of software engineer usually has a bachelor's degree in science or software engineering and has experience in computer systems and languages like Python or C or Go or JavaScript, etc. This is how the typical day of a software engineer looks like:
So at a high-level a software engineer’s role is to architect applications, develop code, and have processes in place to create solutions for customers.
Now you understand who is a software engineer and what their role is. In the next section, let's try to understand the difference between Software vs. DevOps engineers.
Back in the day, Software Engineers and Operations had a lot of contention. Software Engineers pass their code to the system admin, and it's the system admin's responsibility to keep that code running in production. The Software Engineer had little knowledge of the operation practices, and System Admin had little knowledge about the codebase. Software Engineers were concerned with shipping code, and System Admin was concerned about reliability. On the one hand, Software Engineers want to move faster to get their features out more quickly, whereas System Admin, on the other hand, wants to drive slower to keep things reliable. This kind of misalignment often caused tension within the organization.
Here enters DevOps, a set of practices and a culture designed to break down these barriers between Software engineers, System Admin and other parts of the organization. DevOps is made of two words of Dev and Ops, namely Development and Operations, and it's the practice to allow the single team to manage the entire application development lifecycle, that is, development, testing, deployment, monitoring and operation. They achieve that by frequently releasing small changes by using continuous integration and continuous deployment.
For more info about continuous integration and continuous delivery, please refer to:
https://en.wikipedia.org/wiki/Continuous_integration
https://en.wikipedia.org/wiki/Continuous_delivery
DevOps is broken down into five main areas:
If we think of DevOps as a philosophy, Site Reliability Engineering(SRE) is a prescriptive way of accomplishing that philosophy. So if DevOps were an interface in a programming language, then SRE is a concrete class that implements DevOps. In DevOps, when we talk about eliminating organization silos, SRE shares ownership of production with developers. SRE uses the same tools as DevOps to ensure everyone has the same view and exact approach to working in production. SRE has a blameless postmortem in accepting incidents and failure, which ensures that the failure that happens in production doesn't have to be the same way more than once. SRE accepts the failures as normal by encoding a concept of an error budget of how much system is allowed to go out of spec. SRE follows the philosophy of Canary release in terms of gradual changes, where the release changes only a small percentage of the fleet before it's been moved to all the users. In terms of tooling and automation, the main idea is to eliminate manual work as much as possible. For measuring everything, SRE measures the health and reliability of the system.
As an SRE, you must have a strong background in coding, but you should have the basics covered on Linux, Kernel, Network, and computer science.
To sum up, SRE and DevOps are not two competing methods but close friends designed to break down organizational barriers to deliver better and faster software. Both of them intend to keep the application up and running so that the user is not impacted. On the one hand, SRE is more applicable to production environments (as it's the combination of software engineering plus system admin). In contrast, DevOps is more for non-production environments (sometimes in production). Their main task is to keep the environment up and running and automate as much as possible.
For more info, please refer to the following link:
https://sre.google/workbook/how-sre-relates/
These are some of the technical skills companies are looking for when hiring DevOps or SRE.
So in the modern context, an SRE/DevOps engineer is a software engineer whose focus area is infrastructure and operations. They take care of the operational tasks and automate it, which in the past was taken care of by the operations team, often manually.
DevOps engineers are responsible for bridging the gap between operations and development. They act as a representative of the DevOps culture in an organization, ensuring that both sides are working together effectively. Their key roles include:
SRE and DevOps is standard practice, whereas the Cloud Engineer role is specific to the cloud, e.g., AWS, Google Cloud, Azure, etc. Cloud Engineer role is delivery and optimization of IT service and workload running in the cloud. The advantages of using cloud in your organization are:
Cloud Engineer roles can be specific to architecting (designing cloud solutions), administration (making sure the system is up and running all the time), or development (coding to automate cloud resources). Some of the responsibilities of a Cloud Engineer will be:
There are three main types of cloud engineers:
A cloud engineer needs to combine SRE/DevOps/Software engineer in an ideal situation but specialize in Cloud Services. But in reality, there is still a skill shortage in the cloud field. Cloud Engineers specialize in one area, either they are good developers, or they know cloud services well. Due to this hindrance and skill shortage, some companies resist moving to the cloud and still have the workload running in the on-premise data center. The only way to fill this gap is for companies to train their employees in all aspects. Cloud engineers need to grasp programming skills and vice-versa.
To become a cloud engineer, you'll need these skills:
Cloud engineers design, build and manage software applications for companies that use cloud computing. They also create the architecture of the cloud and code its programs. Cloud engineers also test their work before it's deployed and administer networks used by the cloud. More specifically, they have the following responsibilities:
Whatever practice you are following in your organization, the main idea is to break the silos, increase collaboration and increase transparency. Any practice you are following needs to find an innovative way to develop better and reliable software. As the IT field progresses, these practices will continue to evolve, and new roles will be born.