Post #Agile2011 Playlist

Reading time ~ 2 minutes

An insight I picked up from Jeff Patton during his user story mapping workshop at Agile 2011.

  • Use music to help you facilitate your sessions

Jeff used “Kung-Fu Fighting” as backing/timing music for one of the group exercises.

When I got home I sat at my computer trawling my music collection for perfect facilitation tunes ranging from 3 to 10 minutes long.

I have loads that I’ll unleash on teams over the coming months 🙂

There’s an important trick to these though. They have to be the “right” tempo and style to match the activity and team – generally upbeat and well-known enough that team members can “feel” the end of the tune coming.

In the meantime, in a change from my normal programming I’ll switch to my other passion; music…

If like me it’s been a really intense week and you’re on a post conference come-down (see Doc List’s post on similar here), here’s my recommended selection of music (in this order) to recover to…

If there’s any of these you don’t own, buy them now or cue them up on your favourite online station! I’ve added links to the hardest-to-find tracks.

2011-08-14 All Agiled Out – on Spotify

* playlist heavily influenced by available music selection on the airplane journey home

Note – If you’re not feeling so cheerful, It’s important you don’t stop part-way through.

For anyone who’s a fan of “High Fidelity”, the art of the compilation tape is the journey you’re taken on.  This one will only leave you happy if you make it to the end!

Where’s My Tools?

Reading time ~ 3 minutes
hand

The most effective tool in the box

Most of the really big successes and game-changers I’ve seen in my career have been initiated through individuals seeing a problem and fixing it themselves rather than waiting for others. 

If you need something done that isn’t already happening, nobody else is going do it for you.

Here’s 4 lessons learned from adopting TDD…

It takes time & effort to get TDD into place

You will have to sacrifice “new code” time in the short term. From my experience, time is probably the biggest barrier to successfully introducing TDD on most teams (closely followed by motivation & accountability). Seeing the pay-off on the other side is notoriously hard to when you’re not there – either starting out or sitting at the bottom of the change curve.

If you’re coaching teams, sometimes you might just need to say “Trust me, I know what I’m doing”

“It can’t be unit-tested”

When you or someone else makes this statement they probably mean one or more of the following:

  • “I don’t believe I have the time to make this testable”
  • “Nobody has provided the infrastructure/harness/test data for me”
  • “I don’t know how to unit test this” (and need some help to figure it out)
  • “We have some architectural impediment to resolve in order to achieve this”

From these statements, which do you think is least common?

Break this cycle by encouraging accountability for making code testable. 

This doesn’t just mean the product code it includes taking ownership of your testing tools and abilities as well.

If you’re struggling…

There’s 2 options for you; “abdicate” or “own”

Option 1 – Abdicate responsibility.

  •  You’ll set the tone for your whole team. The next time someone hits the same problem, the cycle will repeat.
  •  At best, someone better than you may eventually address the issue. (And I hope they make you feel mediocre or inferior).
  •  At worst you may find them saying that you didn’t provide the solution for them.

The “best” case is highly unlikely to happen during your current project – maybe even the one after.  Just think how much testing debt can build up over the life of a single project. We should be avoiding that, right?

Someone has to break the cycle.  If you’re facing pain, why aren’t you responsible for fixing it?

Option 2 – Take ownership of the problem yourself

Great! You’ve recognized that your accountability is part of the problem.

Nobody else will do this stuff for you!

  • Establish a Personal strategy for implementing TDD – how are YOU going to solve the problem?
  •  The teams and individuals I’ve seen that are successful with TDD have all got there by taking a personal responsibility to do so.

Just Do It

Here’s some suggested steps to get going – you can either do the first few alone or as part of a team.

(If there’s an accountability gap in your group you’ll probably need to start alone)

Round 1

1. Get a unit test harness and environment in place – there’s plenty online but write one yourself for starters if you have to!

2. If you have a database, break that dependency and channel it through something replaceable.

3. Write your first round of tests and see what hurts – now resolve those pains.

Limit the time spent on this first cycle and determine whether you should ask for time in advance or for forgiveness later – it’ll depend on your local context.

Round 2

4. Educate & support your team on what you’ve provided so far.

5. Get other team members to write their own round of unit tests (treat it “as  an experiment” if there’s concerns over the effort required). See what hurts and resolve those pains.

6. Encourage and develop shared long-term ownership of the test harness, test data, stubs and mocks (if used).

Remember you’re setting the tone. If someone needs something that isn’t available, pair up, help them provide it and share the results with the team. Don’t leave them alone but don’t do it for them either.

Round 3

7. Repeat round 2 during development until writing tests is fast, easy and natural. (Don’t give up too soon – this is hard work and takes time!)

8. Capture any “wins” and “losses” during this cycle – what benefits are you seeing and what new pains are coming through?

9. Review the wins & losses. Decide what to do about the losses and how to promote the wins up the management chain and across the team. For example either publicise as you go or use as fuel for your retrospectives.

Think about the positive impact that little bit of extra effort and ownership has on you and your team in leading by example – doing a great job that others will want to share, not just a good job.

Abdication or accountability is a personal choice but it affects everyone around you. What are you doing to help your team?

Piratical Management (Pirarticles)

Reading time ~ 2 minutes

I’ve spent very little time on writing articles directly related to my nom-de-plume.

There are 3 main reasons behind this.

  1. Most* of my “Bad Captain” thinking is fuelled by negative workplace, management and team experiences and I’ve not had any for a long time.
  2. I have a backlog of 70+ more valuable articles and ideas already without adding pirate concepts into the mix.
  3. There are plenty of articles already discussing pirates and management on the web, why re-invent the wheel!

*The rest is probably fuelled by cider, rum and late-night ramblings with close friends – think “Father Jack with earrings”

So as I make final preparations for a dawn raid at the Grand America Hotel in Salt Lake City and a week at Agile 2011 I’ve been digging out some reading material…

Here’s a quick pick-through of piratical management articles (“pirarticles”) I’ve found on the web so far plus a couple of potential reads to add to my “booklog” (thanks @MarkDalgarno for that very sticky term last week).

Articles

Some short articles for when my cognitive load means I don’t have space for anything more plus one or 2 that are more formal.

Books

I’ve not read either of these, I’d be interested in some reviews from people that have done but for now they’re going onto the booklog.

Music

  • Pressgang – Not directly about Pirates per-se but they do belt out a few amazing seafaring related folk-rock stories.

A little history (not much)

Deadly Serious:

A reminder that whilst my moniker is a light-hearted dig at my appearance and occasional nocturnal ramblings, there’s a whole other side to “real” pirates…

Transactions for Managing Technical Debt

Reading time ~ 4 minutes

If you’re losing capacity maintaining brittle code or infrastructure, the “litter patrol” in a related neighborhood may be good practice but how do you visualize and manage the true source of your pain?

This is based on a mix of my own experiences and great nugget of insight picked up from Jim Highsmith at Agile 2010 who in turn credited Israel Gatt.

First the paraphrased nugget from Jim…

“Teams need both debt reduction and debt prevention strategies.”

Here’s the quote from Israel back in December ’09.

“If your company relentlessly pursues growth, the quality/technical debt liability it is likely to incur could easily outweigh the benefits of growth. Consider the upside potential of growth vis-a-vis the downside of the resultant technical debt. When appropriate, monetize technical debt using the technique described in Technical Debt on Your Balance Sheet.”

Here’s my expansion to Israel’s article…

How do we know we have debt?

We “know” it’s there, we feel it. But do the right people know about it? You may be allocating permanent team capacity to keep bailing without seeing the hole.

  • Train all your teams in spotting technical debt
  • Develop and communicate your debt strategy to your teams and stakeholders.
  • Determine a common unit of currency (points, hours, money, NUTs) that your stakeholders can understand and engage with and use this to describe the transaction decisions you’re making.

Communicate current debt – “Balance”

  • This is obvious but hard to achieve. For the debt that hurts; quantify the cost and determine what you could do if it were resolved. Get that opportunity cost shared and get your solution sponsored. In most large companies if you can demonstrate a cost reduction or productivity improvement you can get support.

Communicate new debt – “Recent Transactions”

  • Not the decade-old pile in the corner! Focus on what you’re forced to add because of deadlines and market pressure. Every time you make a debt-related compromise, get that conversation exposed. Determine the maximum acceptable age for any debt being added, a cost (in your selected currency) and a priority. Whilst there are cases where a debt may never need to be repaid, chances are you’ll need to pay the next transaction off.

Limit debt – Set yourself a “Credit Limit”

  • What’s the maximum debt your team/project/product is willing and/or able to tolerate? Set a credit limit and stick to it. If we blow our limit, we’re in trouble. My personal rule-of-thumb is if it’ll take more than one whole sprint for the entire team to clear all new debt then you’re worryingly-leveraged and heading away from releasable software. This approach means a simple default credit limit for a new project (using story points as currency) is the same as your velocity – simple to calculate and remember. You could convert this into the average hours (and therefore financial impact) a story of that size takes if that means more to your leaders.

Whatever you do, don’t over-mortgage your product. You don’t want your product portfolio to collapse under unrecoverable bad debt.

Set a maximum age threshold – “Payment Terms”

  • Use topping & tailing approaches to control and ratchet your debt age to keep the span down.  If your debt exists for more than N sprints (say 3) promote it to the top of the priority stack. Fixing new debt when it arrives is hard work and items do slip through. For those that escape, setting a maximum age means you’ll cycle all your debt through and keep it fresh. Even tough problems get resolved rather than rotting in the debt heap.

Visualize and report your debt – provide a “Debt Statement”

  • Put all debt visibly on your wall as cards or stickies, give it a different color, heading, whatever – make it visible. Now every sprint let’s highlight the numbers, the growth, reduction, reiterate your limit. If you’re using an electronic tool, try putting all the debt items under a single parent and tracking cumulative flow and burn-up of debt rolled up to that item.

Prioritize your debt – “Positions”

This is getting a little more advanced and difficult to manage – I’d reserve this for only projects that already have high debt where the simple strategies alone are too invasive.

  • Partition your debt into 3 positions. New:Short-term, New:Long-term, Old:All.

Set a different credit limit and payment terms for each of these and as part of prioritization set a ratio of effort/pay-off against each that ensures that at a minimum debt is sustained at a constant level but focus on cycling through so that the contents remain fresh.

Taking Action

Here are a few other points to explore – mostly around debt reduction.

• What “small wins” exist for you? Are there some simple debts than can be cleared quickly?

• If you sacrificed a team member for 1 sprint to pay off some short-term debt, would you be able to increase the overall team performance in later sprints?

• If a particular single debt item is too big for a team to swallow in a single sprint, can you call in or implement a parallel “SWAT Team” to fix it?

• What capacity do you need to reserve to sustain your current debt level?

• If you were going to reduce your debt burden by 10-20% what effort/capacity would that require and how long would it take?

• Can you demonstrate a return on investment for a particular piece of debt-reduction?

• Worst-case scenario: Could some debt control run “under the radar”? (And if this were discovered, what problems would be caused?)

Wrapping up:

Develop both debt prevention and reduction strategies for your teams, don’t just focus on reduction.

Treat technical debt like real personal or business debt: use “credit limits”, “statements”, “balance”, “transactions” & “payment terms” to your advantage.

To achieve effective reduction, work through the Oubliette strategies and in worst cases, consider a “SWAT Team”.

The Point of Maximum Learning

Reading time ~ 2 minutes

This post draws on some exceptional leadership training I attended in Cincinnati some years ago, a personal near-legendary experience from Summer 2009 and the fact that many of us actually flip back and forth from being visibly outgoing, strong and confident to being introverted, quiet and shy.

Recognising this model was something quite special for me – it highlighted why I gain so much from conferences, talking to customers, like-minded strangers and other controlled but potentially stressful situations…

http://www.socialpedagogy.co.uk/concepts_lzm.htm

In order to learn we have to explore, leave our comfort zone and enter the learning zone. Beyond the learning zone lies the panic zone where we are blocked (by fear) from learning – lessons here are only recallable in similar negative situations.

  • Individuals must find their own way into their learning zone, it’s unique to them.
  • Forcing someone out of their comfort zone out of their control may tip them immediately into panic.
  • The point of maximum learning lies at the cusp of the learning and panic zones.

I believe this is why we learn so much from failure and stressful situations and why we often only realize it when we face them a second time.

It’s also why I learn most from group workshops and preparing presentations. Getting out of my comfort zone and talking to people in public gets my adrenaline going and brain working.

A cautionary note. I’ve found that having recognized what’s happening and broken the seal on the comfort zone it becomes somewhat addictive. The boundaries between comfort, learning and panic zones shift and you need to keep finding something else to drive you onward.

Chris Matts is somewhat of a master at demonstrating learning on the fringes between learning and panic – talk to him about exploring deserted conference facilities at 2am armed only with a shopping bag, red wine and no water.

What things do you do that make you really uncomfortable but maximise your learning?