To answer this question and understand why it’s one of the fastest-growing IT positions, we must first understand the problems it aims to solve.
Going old school: Waterfall
Traditionally, if you wanted a new product or feature, these were the time-boxed steps to go through:
- The customer identifies what he wants and when it’s needed;
- Analysts gather the requirements, design the architecture and detail the implementation;
- Developers code their interpretation of the specifications, occasionally writing unit tests;
- Testing is conducted in a hurry and some bugs get corrected;
- User acceptance tests are done just before the go-live, with little room for rework;
- Operations deploy the result into production environments and are left to deal with any lingering problems after the initial month of handover.
The following image describes the effects of this compartmentalized and one-way method: the inherent deficiencies of communication between the involved teams, distance each project phase further away from what the client actually needs.
The promising solution: Agile
Agile is a way of working maximizing value and exposing problems as early as possible, by making transparency and communication paramount. The Agile Manifesto perfectly sums up its goals:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Several methodologies try to facilitate Agile’s adoption, but, from my experience, only on the analysis and development phases, and mostly through Scrum:
Beyond half-hearted Agile: DevOps
DevOps bring the benefits of Agile to the whole delivery pipeline, effectively bringing all the separate teams together with the common goal of minimizing the time from idea to usable software. At its core, DevOps transforms the delivery process from only a few big and prolonged releases in production each year, to do it effortlessly and much more frequently with smaller scopes. The advantages of this approach are manifold:
- Errors pop up and are corrected much faster and in less critical environments, improving quality and stability.
- Deploying and rolling back is much simpler, reducing the risk of change.
- Any modification introduced by the development reaches operations faster.
- New features reach the client sooner and in-tune with their actual needs.
- Communication and feedback across all teams is immensely improved, breaking down silos.
To achieve this, DevOps take most repetitive, manual, and heavy tasks, and make them continuous, increasingly reducing their complexity and execution time:
Employs in-memory computing, advanced analytic technologies and interactive planning to make planning and budgeting processes more agile and easier.
It implies merging code changes back to the main branch as often as possible; they are then built and automatically tested. This avoids the integration hell that usually happens when people wait for release day to merge their changes into the release branch. Continuous integration puts a great emphasis on testing automation to check that the application is not broken whenever new commits are integrated.
It’s the process of executing automated tests as part of the software delivery pipeline in order to obtain feedback on the business risks associated with a software release candidate as early as possible. It evolves and extends test automation to address the increased complexity and pace of modern application development and delivery.
As an extension of continuous integration, it assures new changes are released to customers quickly and sustainably. This means that besides having automated testing, you also have an automated release process and you can deploy your application by clicking on a button.
Continuous deployment takes this further, having every change that passes all stages of your production pipeline, released to your customers without human intervention. Only failed tests prevent the deployment to production.
It’s the process and technologies that organizations may implement to enable rapid detection of compliance issues and security risks within the IT infrastructure. It is one of the most important tools available for organizations, providing security teams with real-time information from all environments and supporting critical security processes like root cause analysis, and incident response, threat intelligence, and forensics.
Getting us there: DevOps Engineer
Some people argue against the designation of DevOps Engineer, as it is not an IT role but rather someone that follows a certain way of working. Ultimately, companies define what positions to hire and the designation has gained significant traction, already encapsulating several sub-categories:
This person must promote the benefits of DevOps by identifying and quantifying the business benefits that come from the greater agility DevOps delivers while minimizing the fear of failure from the organization. As a change agent, the evangelist ensures buy-in from development and operational teams, identifies the key roles to support DevOps delivery methods, and makes sure IT professionals are trained and empowered to make those changes.
Whether named release manager, release engineer, or product stability manager, the focus is the same: address product management and coordination from development through production. Typically, they work on the technical details and hurdles in which a traditional project manager would not be involved. They oversee the coordination, integration, and flow of development, testing, and deployment to support continuous delivery. The focus is not just on creating, but also maintaining the end-to-end application delivery tool-chain.
Also called integration specialists, this key role analyzes, designs and implements strategies for continuous deployments while ensuring high availability on production and pre-production systems. They have a comprehensive automation role across DevOps tools and cloud platforms, encompassing lean thinking across major DevOps processes.
This DevOps oriented role of developer/tester dramatically increases their scope of responsibilities. They are responsible not only for turning new requirements into code, but unit testing, deployment, and ongoing monitoring as well. This shift often requires a move to more automated testing so that quality does not suffer. A common misconception is that teams think they can do manual testing and still be agile. When this happens, product quality usually degrades until the organization and processes change accordingly.
Experience Assurance (XA) Professional
While this role is often part of software development, a new type of control becomes necessary when organizations embrace DevOps. The need for QA testers is replaced by a need for XA experts charged with ensuring that all new features and functions are released with the end-user experience in mind.
In traditional waterfall development, system security is largely an afterthought. It is a “nonfunctional requirement” that, like quality assurance, is often tacked on at the end of system development. DevOps-minded shops have security engineers working side by side with developers, embedding their recommendations much earlier on in the process, building security into the product, not at the end.
Utility Technology Player
Traditional IT operations focus on keeping the servers running and since the most common cause of interruption is the applications running on them, very stringent controls are introduced to minimize change. These range from extensive QA in a staging environment to voluminous handover and operations documentation, and infrequent releases. Traditional developers have been heads-down coders with nearly any involvement in post-production systems.
The operations experts are now getting involved throughout the development process, increasingly being engaged in sprint planning to ensure that quality of service, resource management, and security are also prioritized. DevOps requires utility team members who can operate effectively across development platforms, tools, networks, servers and databases, and even across development and support.
The never-ending story: Dev*Ops
A company’s delivery process maturity will dictate how much value can be extracted from what DevOps has to offer, but improving transparency and communication by adopting its methods is always worth the investment. Due to the difficulty of bringing effective change to organizations, they are adopting DevOps for stand-alone functions rather than end-to-end across the organization (much like Agile).
DevOps is not an endpoint where everything is automated and a single person can take care of all the delivery processes; it is an ever-improving movement towards better job satisfaction and productivity.
What's Your Reaction?
José is becoming a DevOps Engineer at Affinity. With a degree in computer engineering, José has developed his adventurous and curious spirit in his scouting years and Erasmus experience, having worked in more than 10 countries spread over 3 continents! What does José love the most? Optimize all kinds of things!