At a recent Amsterdam Middleware Meetup I promised I would post some links about the devops movement. I decided to replicate that post here for easier reference.
Start with the devopsdays.org site created by Patrick Debois, who coined the term 'devops'.
It's not easy to come up with a good definition. Devops is a movement where system administrators and developers work together to continuously build and maintain a single system including application, infrastructure and process. It builds on old and recent ideas from software development and lean systems thinking.
Some key concepts and a few links:
- Bringing together people and practice from development and operations.
- Infrastructure as Code
- Continuous Improvement
- Kanban for development
- Kanban for operations
- Criticism (we're over half a year further, and there are now devops workshops, and books:
Jez Humble and David Farley, Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (informit.com) takes the concept of fully automated deployment to its extreme. It covers practically every part of the deployment pipeline, including the various stages of automated testing, the enormous impact of distributed version control system, and a good management summary in the last chapter.
Michael C. Feathers' book Working Effectively with Legacy Code is all about dealing with code that has no (automated) tests. Feathers has a very simple, pragmatic definition for legacy code: The word Legacy here says nothing about age or quality alone. To him, Legacy is code without tests.
Code without tests will resist change. It will fight back. If you don't have tests, you will never know the impact of any change you dare to make. And when you do have tests, better make them run every time you change something.
The bulk of the book deals with various methods for bringing code under test and start refactoring. This is where this book differs from many others on testing; Feathers actually comes with strategies to increase test coverage, instead of just promoting Test Driven Development or writing tests as 'a good idea'. Some of the methods he proposes are not pretty, but they get the job done. They prepare code for change, and that might actually include getting rid of significant parts of the code base.
It is very inspirational: It led me to see how I could write tests for deployment scripts (in Korn shell), and make me explore the various testing frameworks in python/jython (with junit thrown in for reference). I learned something.
Donald A. Reinertsen
The Principles of Product Development Flow: Second Generation Lean Product Development
While Lean and the Toyota Production System are typically associated with manufacturing, Reinertsen shows how the conditions of product development change the playground. By focusing on Economic principles first, he shows that a lean approach in development may mean something different for development than for production. For instance, while variability is undesired in production and manufacturing, it is something you want to seek out in product development.
Original posted on the Middleware Meetup Message Board