This is the start of a (hopefully) series of posts about DevOps, based on my presentation From Dev to DevOps.
The Agile movement stablished a series of development practices quite common nowadays, or at least highly desired:
- iterative development
- continuous integration
- release soon, release often
But what happens after the development cycle? The process of building software or products does not stop there. Even if you are an agile shop, you may hit a wall when trying to move between Development, QA and Operations.
DevOps is a door in that wall.
DevOps is the intersection between Development, QA and Operations. You can also think of it as DevQAOps.
Old issues fixed, new issues come up
As some issues were solved by Agile methodologies, new issues arose. Agile development generates a higher number of releases (release early/release often) than waterfall methodologies, and that pushes the problem from development teams to operations, that have to deal with more frequent deliveries to production.
Fear of change
Once a product is working, changes are seen as a risk by business, developers, QA, operations,… Reducing the time to make (and revert!) changes increases the assurance to do more frequent changes.
Automation, automation, automation! Not only the development needs to be automated. No more docs with instructions, manual steps, individual knowledge, “deployment master” or hacks. All the steps up to production need to be automated too, including deployments, to reduce risk of manual mistakes.
It works on my machine!
With the proliferation of virtualization, cloud, PaaS, stacks,… is absolutely necessary to be able to replicate environments for development, QA, pre-production,… Ensuring that proper level of testing is conducted as the product (software + environment) progresses through the lifecycle.
Teams split in Dev, QA, Ops,… cause walls to stand between them, and unnecessary friction, with each team pushing for its own benefit and requiring escalation of issues to account for the overall business good. Getting all the teams on the same table more often the friction is reduced.
Dev Change vs. Ops stability
Developers are usually measured by the number of features implemented, while operation teams are measured by the performance and stability on production. Two different goals that make both teams clash in many occasions. Bring issues early on and involve all the teams in the decisions.
Read more at What Is This Devops Thing, Anyway?
DevOps is a extension of Agile
Does this sound familiar?
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
Exactly, that’s the Agile manifesto, which is still perfectly valid, with some clarifications, if we get into detail:
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable
- Welcome changing requirements, even late in
development any part of the DEV/QA/OPs cycle. Agile processes harness change for the customer’s competitive advantage.
- Deliver working
software products frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and
developers development/QA/Operations teams must work together daily throughout the project.
- The most efficient and effective method of conveying information to and within a
development DEV/QA/OPs team is face-to-face conversation.
- Agile processes promote sustainable development. The sponsors, developers, QA and OPs teams, and users should be able to maintain a constant pace indefinitely.
What does that exactly mean
- software/working software. The concept of product, meaning software running, in production
- late in development. Late in the development, QA or operations phases, not just development
- developers. Don’t consider only developers, QA and operations teams need to be involved too
The key part is the involvement of not just the development team but the QA and Operations teams.
Game theory is defined as the method for analyzing calculated circumstances, such as in games, where a person’s success is based upon the choices of others. If you have watched A beautiful mind, you’ll remember the scene where he tries to pick up a girl at a bar.
What does it have to do with DevOps? The success of the Dev team greatly depends on actions done by the Ops team, good software deployed incorrectly will transmit the wrong impression. Likewise, the success of the Ops team definitely depends on the work of the Dev team, as poorly developed software will cause all sort of performance issues.
If all teams try to achieve their own benefit, it’s not necessarily a good thing for the overall business. Imagine the Ops team not pushing new features because they don’t want to risk the production stability. Or the Dev team pushing new features to production without proper testing because it’s a QA problem, not theirs, and are only measured on the amount of features pushed.