Being Agile in Release Management
http://jamesbetteley.wordpress.com/2011/11/16/being-agile-in-release-management/
2 great things happened in 2005: Wales won the Grand Slam, and I had my first taste of “agile”. And after having worked on a 3-year-long waterfall project (which still wasn’t finished by the time I left) agile came as a breath of fresh air for me. I was hooked from day 1. I was working as a release manager in a fairly large development team, and since then I’ve worked in a number of different departments, such is the broad spectrum of the work involved in release management. I’ve also worked with teams of all sizes, including offshore teams and partners. Each situation poses its own unique set of challenges and I like to think that working in an agile fashion has equipped me well to overcome these challenges.
You might wonder how a “development methodology” can help a release manager overcome so many different challenges, given that release management doesn’t necessarily lend itself to working like an agile dev team (mainly due to the number of unplanned interruptions) and the answer is simply that agile, for me, goes further than just being a development methodology, it’s a culture.
One of the things that I really love about agile is how it teaches you to think differently to how you otherwise might. It teaches you to evaluate things using different criteria – or rather it clarifies which criteria you should be using to evaluate tasks. For instance, I now look at the tasks that I work on in terms of business value and customer demand, rather than my value and my demand! In the past I have spent months working on complicated build and release solutions, which may well have been ultimately successful, but weren’t delivered on time and on occasion didn’t do everything that the users wanted.
These days, I certainly wouldn’t approach such a large challenge and try to get it right first time, it simply doesn’t make good business sense – it’s likely to be too costly in terms of time and effort, and by the time it eventually gets to the users it may well not be fit for purpose. Adopting an agile approach certainly helps here. But it’s not quite as simple as this in real life…
Thinking Agile
Thinking in an “agile way” doesn’t necessarily come naturally to release management – the solutions we’re tasked to come up with are often very complicated, need to support a multitude of projects and users, and still need to be simple and robust enough for the next person to be able to pick up. Working out a system like this takes some time. There’s also the added problem that we’re often dealing with live systems, and the risk of “getting it wrong” can be very costly and visible! For that reason, the temptation to do a great deal of up-front planning is HUGE! Another problem is that we try to (or are asked to) produce a one-size-fits-all solution to a very disparate system. I’m talking about things like:
- We only want one CI system, but there are already 3 being used in the dev team.
- We only want to use one build tool, but we need to support different programming languages, and the developers have already chosen their favourites.
- Everyone has their favourite code inspection tools but management want stats that can be compared.
- QA do things one way, dev do it another. And let’s not even start talking about how NetOps do it!
- Deployments are done differently depending on which team you’re in, which OS you use, and which colour socks you’re wearing that day.
So as you can see, we’re often faced with competing requirements and numerous different “customers”, each with their own opinions and priorities. The temptation to standardise and make things simpler for everybody leads us down a long and windy road to a solution that invariably ends up being more complex than the problem you tried to solve in the first place. The fact is, there has to be complexity somewhere, and it often ends up in the build & deploy system.
How Do I “Think Agile”?
Well, first of all you have to stop looking at the big picture! I know it sounds crazy, but once you’ve got an idea of the big picture, instead of diving straight in and working on your Sistine Chapel, just write down what your big picture is in terms of a goal or mission statement, and then park it. I like to park it on a piece of A4 and stick it to the wall, but that’s just me! Just write it down somewhere for safe keeping, so that you can refer to it when needs be.
I once had a goal to standardise and automate the builds and deployments of every application to every environment, a-la continuous delivery. At the time, that was my Sistine Chapel.
User Stories
The next thing is to start gathering requirements in the form of stories. User stories help you get a real feel for what the users want – they give a sense of perspective and “real-life” which traditional requirements specs just don’t give. I honestly believe you’ve got a much better chance of delivering what people are asking for if you use stories rather than use cases or requirements specs to drive your development. Speak to your customers, the developers, testers, managers and netops engineers, and write down their requirements in the form of stories. I literally go around with a pen and paper and do this. Don’t forget to add your own stories as well – the release engineering team has its own set of requirements too!
Next up is to turn these stories into tasks. Some stories can be made up of dozens of tasks, and they may take several sprints to complete, but this is the whole point of this exercise. By breaking the stories down into tasks, you’re creating tangible pieces of work which you can then give relatively accurate estimates on. You’ll often find that some stories contradict one another in the sense that your solution to one story will almost definitely be rendered obsolete when you get around to completing another story later on. Don’t be tempted to put one task off, just because you know you’ll end up changing it later!!
Eventually, when the time comes, you will have to change the work you’ve already done. This is the natural evolution of the process. Obviously it’s better to be future proof and keeping one eye on the distance is a very useful thing. It would be foolish to write a system that will need to be completely torn down in a matter of a couple of weeks, but there’s a constant balancing act to perform – you need to get tasks completed but you don’t want to be making hard work for yourself in the future. My tactic is to make each solution (be it a deploy script or a new CI system) self-contained, and only later on will I refactor and pull out the common parts – but the point to realise is that this won’t come as a surprise, and you can make sure everyone knows that this work will eventually need doing as a consequence.
Customers and Prioritisation
I’ve learned that all stories must have a sponsor, or “customers”. As I’ve mentioned, these are likely to be developers, testers, management and netops engineers, as well as yourself! Strangely enough the customers are actually a really handy tool in helping you manage your work…
There’s never enough time in the day to get everything done, or at least that’s the way it often seems when you’ve got project managers hassling you to do a release of the latest super-duper project, and management asking you automate the reports, and developers asking you to fix their environments, and then your source control system throws a wobbly. It’s organised chaos sometimes. However, when you’re working on your stories, and your stories have “customers”, you can leave it to your customers to fight it out over which work gets the highest priority! From the list above there are the following high-level tasks:
- Automate the builds and deployments for the super-duper project
- Automate the generation of management reports
- Stabilise the dev environments
- Implement failover and disaster recovery for your source control system (why has this not been done already???!!!!)
Each of these tasks has a customer, and they all want them doing yesterday. Simply get all the customers in a room and then get the hell out of there work together to sort out the priorities.
How to Deal With Unplanned Work
Probably the single hardest issue to overcome has been how to manage the constant interruptions and unplanned work. A few years back, Rachel Davies came in and gave us some valuable agile coaching, and from those lessons, and my own experiences, I’ve worked out a few ways of dealing with all the unplanned work that comes my way.
First of all, I’ll explain what I mean by unplanned work. I’m essentially talking about anything that crops up which I haven’t included in my sprint plan, which I have to work on at some point during the sprint. Typically these are things like emergency releases, fixing broken environments, sorting out server failures and sometimes emergency secondment into other teams. “Fixing stuff that unexpectedly broke” is probably the most common one!
The way I have come to deal with unplanned work is to start off by pretending it simply doesn’t exist. Plan a sprint as if there will be no unplanned work at all. Then, during the course of the sprint, whenever unplanned work comes your way, take an estimate of how long it took, and more importantly, make an estimate of how much time it has set you back. The two don’t necessarily equate to the same thing, I’ll explain: If I’m working on a particularly complicated scripting task that has taken me a good while to get my head around, and then I’m asked to fix a broken VM or something, the task of fixing the VM may only take an hour or two at most, but getting back to where I was with the script may take me another 2 hours on top of that, especially if someone else has changed it in the meantime! Suddenly I’ve lost half a day’s work due to a one or two hour interruption. The key is to track the time lost, rather than the time taken. I record all of the time lost due to unplanned work in a separate sprint called “Unplanned Work”. I use acunote for this. This allows me to see how much time I lose to unplanned work each sprint. After a while I can see roughly how much time I should expect to “lose” each sprint, and I adjust my sprint planning accordingly.
One way of working, which helps to highlight the amount of unplanned work you’re carrying out, is to plan your sprints as normal, and then say to the customers/sponsors (who should ideally be represented in your planning session) “right, that’s what we could be doing without unplanned work, but now I’m afraid we have to remove x points”. This is a rather crude way of ramming home the reality of working in a department which has a higher than average amount of interruptions and unplanned work (certainly in comparison to dev/qa). It also works as a good way of highlighting the cost of unplanned work to the management team. They hate having work taken out of the sprints and when they realise that unplanned work is costing them in terms of delivery, they are far more likely to act upon it. This could mean investing in better hardware/software, reprioritising that work that you wanted to automate, or hiring more staff.
- If you’re interested to know more about user stories I highly recommend Mike Cohn’s book “User Stories Applied”.
- Rachel Davies is an agile consultant who co-authored the “Agile Coaching” book. She also runs agile coaching courses at skillsmatter
Leave a Reply Cancel reply
author
other posts
- What is DevOps, and Other Fluffy Questions
- Team Transformation for Continuous Delivery with Chris O’Dell – as it happened
- Adopting Agile in 3 “Easy” Steps
- A Sprint Retrospective
- Infrastructure Automation and the Cloud
- ITOps Sprint 1 Review
- Agile ITOps: Day 4
- Agile ITOps: Day 1
- Continuous Delivery with a Difference: They’re Using Windows!
- A Really $h!t Branching Policy
- Why do we do Continuous Integration?
- Installing Artifactory on Ubuntu
- How Do You Do Fixed Bid With Agile?
- Read-only Gradle Wrapper Files Are Bad, mmkaay
- PowerCLI: Reverting CI Agents to Snapshot
- Continuous Delivery Warts and All
- Upcoming Agile/DevOps/CI Events
- Sonar Analysis Using Gradle
- Upgrading Gradle
- What’s Going On?
- Maven the Version Number Nazi
- Beer and Pizza with Facebook
- Design Driven Testing – Half a Book Review
- Test-Driven Infrastructure with Chef – Book Review
- Continuous Delivery Using Maven
- Being Agile in Release Management
- Exporting MAVEN_OPTS not working for Freestyle Jenkins Projects
- How Mature Is Your Continuous Integration?
- Coping With Big C.I.
- 8 Principles of Continuous Delivery
- Ten Mistakes That Software Team Leads Make
- Changing File Permissions On Files in Perforce
- Continuous Delivery in Practice
- Greasemonkey script for CI system
- What is in a name? Usually a version number, actually.
- Exclude pom file from jar using maven jar plugin
- Are Tools and Processes Stifling Our Creativity and Productivity?
- The Boy Who Cried Wolf – Why Broken Builds Must Not Be Ignored!
- Nant NUnit and FxCop Build Script
- Continuous Integration: The Last Mile
- Maven Assembly Plugin Filtering Part 2
- Maven Release Plugin and Continuous Delivery
- Maven Release Plugin and Perforce Clientspecs
- POM ‘ release:prepare release’ not found in repository
- Build Versioning Strategy
- Continuous Delivery using build pipelines with Jenkins and Ant
- Maven Release plugin: issues with Perforce
- Maven Assembly Plugin Filtering
- Acunote – Agile Project Management Tool
- Changing a filename using the maven assembly plugin
tweets
- "A plan is your best guess on what will happen in the future. As it unfolds you correct it for reality" - Dave Brailsford, @TeamSky #agile 4 hours ago
- @AgileSteveSmith @matthewpskelton Yep, I'm certainly planning to be there! 5 hours ago
- Thanks to Dropbox and Google Drive I now no longer feel compelled to save my laptop during fire drills :-) 4 days ago
- Google's scaled Trunk-based development: goo.gl/QBGH4 4 days ago
- Martin Fowler explains the difference between user journey tests and story tests goo.gl/3i0NZ 4 days ago
- RT @SimonThomasAber: If there were a referendum tomorrow I would vote to stay in the EU, but leave the UK. There said it. 6 days ago
- I have no idea why, but I just bought some ground coriander from sainsbury's. I have not been drinking. 1 week ago
- RT @wallaceiam: @jamesbetteley Assert.IsTrue(unitTests.Count() == 0, "Ship it!"); 2 weeks ago
- 0% unit test coverage on this proj? No, probs, must be a mistake.... wait a minute, there really are NO unit tests. That explains a LOT! 2 weeks ago
- Continuous Deployment at Quora goo.gl/TtIge #devops 2 weeks ago
tags
archive
- April 2013 (1)
- March 2013 (2)
- February 2013 (1)
- January 2013 (1)
- December 2012 (1)
- November 2012 (4)
- October 2012 (1)
- July 2012 (3)
- June 2012 (4)
- May 2012 (3)
- April 2012 (1)
- March 2012 (2)
- February 2012 (1)
- November 2011 (3)
- October 2011 (1)
- August 2011 (3)
- July 2011 (3)
- June 2011 (10)
- May 2011 (6)
- April 2011 (8)
- March 2011 (2)
- February 2011 (6)
- January 2011 (2)
- December 2010 (1)
- November 2010 (7)
- September 2010 (1)
- August 2010 (1)
- July 2010 (2)
top posts & pages
- Continuous Delivery using build pipelines with Jenkins and Ant
- Continuous Delivery Using Maven
- Changing a filename using the maven assembly plugin
- Installing Artifactory on Ubuntu
- 8 Principles of Continuous Delivery
- Changing File Permissions On Files in Perforce
- Maven Assembly Plugin Filtering Part 2
- Best Practices for Build and Release Management Part 2
- Ten Mistakes That Software Team Leads Make
- Build Pipelines Using Hudson/Jenkins or Bamboo
- Building ClickOnce Applications with NAnt
- A Sprint Retrospective
- Build issue with maven-project-info-reports-plugin
- Maven assembly plugin inheritance headache
- Exclude pom file from jar using maven jar plugin
- Maven Release Plugin and Perforce Clientspecs
- Sonar Analysis Using Gradle
- About My Blog
- How Mature Is Your Continuous Integration?
- Automate Configuration Management Using Tokens!



Nice post, James. I especially like your statement, “Don’t be tempted to put one task off, just because you know you’ll end up changing it later!!” That is great description of why we often get stuck with analysis paralysis.
Hi there! I simply wish to give an ermuoons thumbs up for the good data you may have right here on this post. I can be coming back to your weblog for extra soon.
So what do you do for the auditing process? Anything? Is there a best Practices for an Agile environment?
Plutora is a toolset developed specifically for Agile Release Management http://www.plutora.com