Thursday, September 4, 2014

What is DevOps

This post isn't to point out bad or good coding practices, but to help us think about how we can better leverage the DevOps practices we have been putting in place.

DevOps is both a role and a process.  It's a way of organizing your team and sharing responsibilities in order to produce higher quality software, faster.

DevOps, while a portmanteau of 'development' and 'operations', does not mean 'development operations'.  Rather, it represents a blending of the traditionally separate processes of software development and IT operations.  

As a methodology, DevOps means some fundamental changes to how traditional (and even agile) software teams work.  In a sense, every team member becomes a DevOps engineer, if not in title.  Developers must own their code from creation to production, no more "throwing it over the wall" to QA and SysOps.

As a role, DevOps takes responsibility for everything that happens from when the developer writes his code, through the deployment and operation of software in a production environment.  This includes: 
  • quality assurance and testing activities
  • creating and maintaining the build environments
  • managing dev, test, and staging lanes
  • deploying, monitoring, and maintaining in production
So, in practice what does this mean?


Testing

Since the developer owns his code from inception to production, he is responsible for testing it and guaranteeing it will work in a production environment.  This usually means providing valuable unit tests, as well as functional and integration level testing, both manually and through automation. A DevOps engineer supports this testing in many ways:
  • Providing a robust automation framework
  • Being a "second set of eyes" for functional testing
  • Assisting with adding automation tests
  • Ensuring all needed testing happens, regardless of who does the testing
  • Stress and performance testing
  • Other types of system level tests when necessary (security, etc.)
It's important to note that while a DevOps engineer may take on a lot of the testing that a developer does not have time to focus on, this should not be done without the developers participation.  Being aware of what is being tested and how, and what the results are, is how the developers best improve their code and even their coding skills.


Build Management

A DevOps engineer is responsible for creating and maintaining a build environment that provides:
  • Continuous integration, including automation that can run automatically and inform the developer if their new code broke anything.
  • Continuous deploy to test and stage environments, including additional automation tests where appropriate.
  • Continuous deploy to production, including feedback to the development team on how their new release compares to other releases through environment monitoring.

SysOps

DevOps becomes responsible for managing and monitoring the production environment to guarantee uptime and provide performance and statistical reporting for the application.  This should be provided continually as feedback to the development team.


Development

DevOps engineers also participate in the software development process. Primarily this is focused on library support and building the necessary pieces to support testing, continuous integration/deployment, monitoring, security, etc. This relieves the pressure from other developers, allowing them to focus on customer requirements.

However, the purpose of using DevOps methodologies is to maximize team velocity.  So, when all of the items discussed above are handled, or when priorities dictate, a DevOps engineer can participate in feature development.


Team Organization

DevOps is a separate discipline from development, and is usually managed separately and deployed to software teams as needed, but it is important that they be considered as a member of a development team as integral as any other developer.  They collaborate closely with all the developers and participate in meetings and discussions such as scrum, planning meetings, and customer requirements discussions.


Summary

While the DevOps engineer takes primary responsibility for the items above, the primary principle is that the team as a whole is responsible for the entire lifecycle of their product. DevOps engineers can participate in development tasks, and developers can participate in DevOps tasks.

The end goal is to create an environment where a project development team can operate self-sufficiently, without relying on outside groups.  This means a given team will never need to wait for the availability of another group's time, or jockey for priority position with other competing projects.  This eliminates dead time in the product lifecycle and keeps the team producing at maximum capacity during every phase of development.  It also means the team is always available to respond to customer demands as quickly and efficiently as possible.


No comments:

Post a Comment