Book Review: DevOps for Developers
“DevOps for Developers” was published late last year and the title promised to help developers understanding the DevOps movement and what’s in it for them. DevOps has been driven so far mostly by sysadmins tired of receiving software “over the wall” and having to put in long hours to make it work in a stable and (hopefully) highly reliable production environment. On the other hand, coping with operational requirements on top of the business pressure to deliver new functionality continuously does not seem something developers are going to embrace with a smile on their face. Not unless the business understand the need to consider IT as an equal partner in supporting business needs as illustrated in “The Phoenix Project”.
Therefore this book promised to fill in a gap in DevOps literature. However, early in the book the author clarifies that he uses the term “developers” in a broad way, covering programmers, quality assurance and ops people adopting infrastructure as code as well. What follows is a relatively comprehensive introduction to DevOps from an ALM point of view. In fact the book covers aspect from the whole spectrum of agile development to continuous delivery including some slightly off-track topics such as specification by example. The concepts are generally well tied together but the broadness of content for a considerably small book compromises its depth and reduces its appeal to anyone already familiar with both Agile and DevOps concepts.
The book takes an interesting approach to DevOps by focusing on these three perspectives: Metrics and Measurement View, Process View and Technical View, as opposed to the CAMS approach, popularized among DevOps community. Particularly because the process view can get diluted in the Culture/Automation/Measurement/Sharing approach and yet it can easily become a show stopper in heavily process-oriented organizations.
The Metrics and Measurement View covers the need to include QA and testing during development, whole-team approach and aligning goals between dev and ops. Albeit important points, this part of the book could have delved deeper into more specific DevOps concerns such as continuously measuring application performance and stability, integrating ops feedback in development iterations or sharing monitoring tasks and access between devs and ops.
The Process View covers the need for extended collaboration between devs and ops and sharing ownership of the delivery process and infrastructure management code. In one chapter the author proposes Kanban as a process enabler for DevOps. Another chapter discusses conceptual deficits and moral hazards which seem a bit out of a place for an introductory book. Especially considering the lack of some more hands-on advice on how individuals with very different backgrounds and motivations can collaborate on a daily basis and share knowledge while still attending to their core job responsibilities.
Finally, the Technical View takes up the largest chunk of the book, divided between a continuous delivery chapter ( “Automatic Releasing” is the author’s definition), a chapter on infrastructure as code (including multiple code examples, illustrated using Puppet and Vagrant) and a chapter on specification by example. The hands-on approach in this part is welcome but the specification by example chapter could have been discarded in favor of a more comprehensive continuous delivery explanation.
Overall the book is a decent source of information and references on agile development and DevOps at an introductory level. However, the varying depth of concreteness throughout the book and a lack of balance between theory and practice make it less usable for those looking for DevOps field guidance. Finally a negative note for the publisher as the book could have used a few more rounds of proofreading before publishing.
About the Book Author
Michael Hüttermann is a principal developer, delivery engineer and expert for Agile and DevOps who helps projects to improve their software delivery process. An Oracle Java Champion, Michael is certified as SCJA, SCJP, SCJD and SCWCD, is a member of the JCP and Agile Alliance, is a java.net JUGs Community Leader and founder of the Cologne Java User Group. He led the “Tools for Agility” track at “Agile 2009” conference in Chicago. Michael gives seminars and presentations at leading conferences. He has written three books: “Agile Java-Entwicklung in der Praxis” (German, O’Reilly, 2007), “Fragile Agile” (Hanser, 2010) and “Agile ALM” (Manning, 2011).