What does DevOps mean?
The term DevOps is a combination of the words “development” and “operations” - two foundational (and sometimes opposing) components of the software development process. The term was coined to emphasize the importance of breaking down barriers between these parts of the software development lifecycle, in order to support the efficient development and deployment of digital solutions.
There is often confusion about what DevOps actually means because the term can be used to refer to a set of tools for managing and deploying software, and also a set of practices that can be used to manage an organization, sometimes referred to as DevOps culture. Making things more complicated is the fact that there is no one set of DevOps tools or practices that is a perfect fit for every organization - different organizations can approach DevOps differently based on their own particular needs and constraints.
DevOps emphasizes some core principles that can dramatically improve how software is developed and deployed
- Collaboration - DevOps emphasizes close working relationships between different parts of an organization to ensure efficient delivery of software to end users.
- Automation - DevOps has a strong focus on automation of tasks like testing, scaling of infrastructure, and software deployment.
- Continuous improvement - DevOps enables more frequent updates to software through continuous integration of changes and continuous delivery of high quality software to production.
- Visibility - Development, operations, and security teams all have full visibility into the history and current state of builds and deployments.
In practice, DevOps usually involves the use of a set of tools - often referred to collectively as a DevOps Pipeline.
- Source code repository - A platform where source code is managed and maintained, allowing team members to collaborate on the development of software (GitHub is a common example).
- Build server - A server that is used to run automated tests, compile source code into executable artifacts, and prepare a software solution for deployment (Jenkins is a common example).
- Automated tests - A suite of scripts that can test various scenarios when changes are made to software quickly and efficiently, ensuring that quality remains high and helping prevent the unintended introduction of bugs.
- Automated deployments - A script or other automated method by which software changes are released to staging and production environments.
- Virtual infrastructure - Infrastructure that can be managed through various sets of automated tools, to be provisioned and decommissioned quickly and easily based on need. There are various flavors of virtual infrastructure like Infrastructure as a Service (IaaS), Platform as a Service (PaaS) and Serverless (sometimes referred to as Function as a Service [Faas]).
- Infrastructure as Code - Code or scripts that define, create, update, and destroy virtual infrastructure.
DevOps is an important compliment to other modular contracting strategies
In the context of modular contracting, DevOps works well because of the emphasis on continuous deployment of tightly-scoped modifications to enhance the overall quality of software. Just as modular contracting is about breaking monolithic procurements into more manageable chunks, and agile is about organizing work into short sprints that deliver working software, DevOps can be thought of as emphasizing the benefits of thinking smaller.
Because DevOps focuses on automated testing and continual deployment of changes, there is no need to accumulate a critical mass of modifications before pushing new features to a production environment all at once. DevOps allows for the gradual and consistent improvement of digital services, making updates and changes smaller, less risky, and easier to revert if there are problems.
Where can I learn more about DevOps?
Here is a great talk by former US Citizenship and Immigration Services (USCIS) Chief information Officer, Mark Schwartz, that highlights how USCIS successfully used DevOps practices to improve the way it provided value to it’s constituents and stakeholders.