A garden's for life...

Portia Tung:

And no matter how much we try to hurry the seed along, Nature will run its course. Assigning ten gardeners won’t make the seed grow faster. In fact, fussing about with the seed could put it in peril.

And:

As my father says, “A garden’s for life. And it needs you.” Given this commitment, it’s natural to want to make repetitive tasks, like weeding, as effective and efficient as possible so you have time to “grow” things.

I couldn’t have put it better myself.

Banishing the Inner Critic...

Denise Jacobs on A List Apart:

Why be concerned with your inner critic? In essence, an overactive inner critic acts as a deterrent between the seedlings of great ideas and the fruits of accomplishment. Don’t think you have an inner critic? Think again. The question is not if the troll is there, but rather how big, loud, and disarmingly influential and persuasive it is.

The article is targeted at web creatives. But, I think it’s equally applicable to my last post about courage. The inner critic is what you need the courage to overcome most of the time.

A lesson in courage...

Kent Beck in Extreme Programming Explained (first edition, page 31):

We will be successful when we have a style that celebrates a consistent set of values that serve both human and commercial needs: communication, simplicity, feedback, and courage.

Of all the agile values, courage is the one that doesn’t translate directly into specific practices. Communication is fostered by sitting together in an open space. Simple design pushes the simplicity meme, as does refactoring out duplication and YAGNI. And, feedback is built into the processes with things like Sprint Reviews and Retrospectives. But, courage? Which one of the practices embodies courage?

This is not a question I was asking myself. It wasn’t even on my mind until my test-obsessed friend and mentor, Elisabeth Hendrickson, offered to let me pair program with her on Entaggle this week. You see, Entaggle is written in Ruby using Rails, rSpec and Cucumber – tools I’ve never used. And, I have (as Elisabeth so delicately put it) “competence issues” – meaning that I have a fear of incompetence.

So, I was fairly aware that it was going to take some courage to overcome my fear of not knowing the tools in order to just sit next to Elisabeth in front of a keyboard. But, it wasn’t until we were sitting there and Elisabeth was muttering on about how she couldn’t believe she was showing me the code in such a sorry state – in need of multiple refactorings – that I realized that pairing with me took as much courage from Elisabeth as pairing with her took from me.

Suffice to say that the next time I sit down to pair program with someone, I’m going to be cognizant of the courage it took to bring both of us together with the code. I might even go so far as to recognize it before we begin pairing, just to get the fears out in the open so we can move past them.

I also think the next time I pair with Elisabeth, I’m going to muster the courage to write at least one test. (I can’t believe we didn’t write one!)

Roles on Agile Teams

Elisabeth Hendrickson, in Testing is a Whole Team Activity:

Testing is an activity. Testers happen to be really good at it. We need testers on Agile teams. But, if we want real agility, we need to see that completing testing as part of the sprint is the responsibility of the whole team, not just the testers.

To which my brain immediately responded:

Programming is an activity. Programmers happen to be really good at it. We need programmers on Agile teams. But, if we want real agility, we need to see that completing programming as part of the sprint is the responsibility of the whole team, not just the programmers.

Thing is, you could put any traditional software development role (e.g. “planner”, “builder”, etc.) into that paragraph and it would work. Try it. It really works.

So, what do I mean by "Agile?" (Part 3)

Release and Iteration Duration and Structure

Release and Iteration lengths are highly dependent upon local circumstances. But, given the ability, I prefer to do Quarterly Releases and Weekly Iterations.

Quarterly Releases

Quarterly Releases may seem like a long time. But, many businesses are incapable of absorbing change much faster than that. So, unless you’re at a web start-up or in a highly regulated industry, I say try to match your release schedule to an existing organizational heart beat, like quarterly financial reporting. (Though, perhaps you don’t want to try to release new code the same day, week, or month you release financials.)

As for the structure of a release, here’s what I like to see:

  • Twelve development iterations with one day of slack each
  • One review, deployment and planning iteration

Alternatively, I could also support a structure that looked more like this:

  • Three development iterations
  • One slack iteration
  • Three development iterations
  • One slack iteration
  • Three development iterations
  • One slack iteration
  • One review, deployment and planning iteration

A development iteration is a normal iteration. The customer pick stories for the team to build, as described above. A slack day or iteration is just like a development day or iteration except that Team decides what work to take on, from exploratory testing to refactoring items on the Technical Debt Backlog, to spiking new technologies. No new stories are implemented during slack time, though new tests may be added to shore up code coverage. And, the review, deployment and planning iteration is exactly that: review the release, deploy it, and plan the next release.

Weekly Iterations

Short iterations allow for rapid customer feedback. Longer iterations allow for more work to be accomplished. In my experience, Weekly Iterations provide the best balance between getting stuff done and running off into the weeds. Plus, it has the side benefit of guaranteeing you your weekends off!

I like to see the following structure to iterations:

  • Planning happens first thing in the morning on the first day of the week.
  • Review happens on the afternoon of the last day of the week
  • The rest of the time is devoted to implementing user stories, exploratory testing, etc.
  • Except for weekends, which are reserved for personal use