I am the Release
Train Engineer for one of my company’s first Release Trains.
One of my early struggles when we first adopted the Scaled Agile Framework was
understanding what the responsibility of the System Team was and how to
concisely articulate it to others. That understanding finally came during the Quick Start event
where I heard Alex Yakyma say the System Team identifies,
manages, and eliminates bottlenecks. What a powerfully simple mission! I’ve
since dedicated time to understanding and helping the team understand what that
means, and this is what I’ve come up with so far.
First, how do you identify a bottleneck and what does it
mean to be a bottleneck? Sometimes this can be rather obvious, but often it is
difficult to separate the symptoms from the root cause. This can be a process, practice, culture, etc. I have come up with a
process to help myself and my System Team identify
bottlenecks.
First, envision what it would be like if we could deploy to
Production a dozen or more times per day. Not that we would, necessarily, but what
would it take to be able to roll new functionality to Production the same day
we get the request? Second, document our current process and lead time from
conception to Production. Third, identify the gaps between our current process and
the ideal of Continuous
Delivery.
If you find yourself defining symptoms and not the root
cause, start using a Lean perspective and start asking “Why?” For example:
“It takes too long to get a package
to Production once it’s been approved.”
“Why?” “Because we have to find someone who has the bandwidth to get it deployed.”
“Why?” “Because we do not have an automated deploy process in place.”
“Why?” “Because our application runs on WebSphere in a Mainframe environment, and we can’t set up auto-deploy until it’s migrated to a Linux environment.”
“Why?” “Because we have to find someone who has the bandwidth to get it deployed.”
“Why?” “Because we do not have an automated deploy process in place.”
“Why?” “Because our application runs on WebSphere in a Mainframe environment, and we can’t set up auto-deploy until it’s migrated to a Linux environment.”
Here we have identified the primary bottleneck – the
environment on which our application lives in Production – by asking 3 “Why”s.
Expect to ask as many as 5 “Why”s
before getting to root cause.
Next, we need to time box the bottleneck.
This basically means you’re going to work with what you have for the time being
and basically “deal with it”. This is a temporary phase until you are able to
eliminate the bottleneck. You should have a timeframe for how long it is
acceptable to manage a given bottleneck and hold yourself to that timeframe.
You may not always meet your goal, but time boxing is the first
step in giving the bottleneck some form of finality.
Last, we need to eliminate the bottleneck. The easiest
solution is to just do away with it – stop doing it outright. This is also
usually the least feasible. The best solution is usually automation,
simplification, or combination. If you can automate it, automate it! This way
you’re not diminishing the task, you’re making it take less time. If you can’t
automate it, see if you can apply Lean thinking and simplify it somehow. Can
you get what you really need with less? Agile encourages just-in-time and
just-enough to limit the amount of waste we allow in the software development
process. One of the backing
principles to the manifesto states
“Simplicity – the art of maximizing the amount of work not done – is
essential”. Finally, if you can’t automate or simplify the task, see if you can
combine it with another task to “kill two birds with one stone”. Pair Programming, an XP practice, is a
great example of this – you’re essentially rolling your development, code
review, and knowledge sharing all into one activity that typically doesn’t take
any longer than development normally would.
No comments:
Post a Comment