Sunday 8 March 2015

Quick DevOps glossary

I write a lot about the meaning of DevOps as there is a lot of misunderstanding of the term.

There are other hipster terms which also seem to get banded about as "sub-DevOps" concepts although in reality they are quite different things.

Inspired by the many inaccurate articles I read from DevOps "experts" (i.e. http://devops.com/blogs/devops-is-agile-for-the-rest-of-the-company/) and the many conferences I attend where the speaker just talks about automation (i.e. a distinguished IBM fellow at IBM InterConnect 2015 I cringed at) -  I thought I'd pen my own quick reference guide.

I'd be really arrogant if I said that I'm right and all these guys are wrong.

But... I'm right and all (well a lot of) these guys are wrong :)

Agile
The name of a group of process for delivering short time-boxed, incremental delivery allowing early visibility of software to the customer.  Processes such as SCRUM and XP are examples of Agile processes.

Continuous Integration (CI)
At the rawest level CI serves to integrate and build code from multiple developers, several times a day.

CI aims to provide fast feedback that developers code integrates with one another.  It is often extended with things like unit tests to give visibility into the working state of the code.  Failing early (and more often) should make it easier and faster to resolve any defects.

Continuous Delivery(CD)
CD aims to ensure that software is always in a releasable state.  It's often said to finish the job CI started.

CD means continual  building the code, running tests against that code and making it automatically deployable into what's known as a delivery pipeline.

Martin Fowler (and he really knows what he is talking about) says you know you are doing CD when...
  • Your software is deployable throughout its lifecycle
  • Your team prioritizes keeping the software deployable over working on new features
  • Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them
  • You can perform push-button deployments of any version of the software to any environment on demand
http://martinfowler.com/bliki/DeploymentPipeline.html

Note Continuous Delivery doesn't mean you HAVE to deploy to production dozens of times a day.  Its really about getting the software in a releasable state.  You don't necessarily have to release it however.

Continuous Deployment
Continuous Deployment extends Continuous Delivery by automatically deploying into production depending on having passed multiple (automated) "gates".

Good article here

DevOps
DevOps is a culture of shared goals, incentives, empathy and empowerment.

The DevOps movement arose the counter the silo mentality endemic in IT organisations.  It aims to influence teams to realise they are trying to achieve the same goals by having empathy for the challenges that face their co-workers.  Empathy is great but if you aren't empowered then you won't be able to make anything better.  Therefore in a DevOps culture, teams are empowered to make decisions as proposed to more traditional manager-led, top-down organisations.