patkua@work

The intersection of technology and leadership

Page 47 of 53

The Benefits of Should and Following BDD

On one project I’ve been on, all the tests began with the word “should”. Though not necessarily taking on full on BDD using anything like NBehave or JBehave, I think the simple effect of reframing tests using the word “should” worked wonders on this particular project.

We had quite a lot of people pass through the project over a year and a half, so I found it interesting to see what impact it had on tests. I observed that:

  • People focused on understanding intent first, and followed through with how it was implemented.
  • People had better conversations around differences (the test name said it should be doing this, and it’s actually doing this. They asked questions like, “Is the name of this test wrong, or is the test incorrectly implemented?”
  • The statement is not as strong as assert or must so I felt people could challenge it more, leading to better quality conversations. “I though the domain was supposed to be like this, and the test and the code does this – Am I misunderstanding something?”

I think this subtle focus brought many qualitative benefits that I think a lot of projects could benefit from.

Visiting Pune?

Then get the guide here. It’s written from the perspective of staying relative to the Thoughtworks office, though will hopefully have lots of information for the ever intrepid tourist. Thanks to all the immersion students who gave me feedback – it really does work!

Airline Customer Service

In trying to change my return flight to London from Bangalore, I’ve been trying to reach British Airways. Calling two of their numbers (the only ones given to me in fact) resulted in the following experience:

*Ring*, *Ring*

“This is British Airways. You have reached our India free number. This service is currently unavailable. Please redial using the advertised number.”

*Click*

That’s it. No greeting. No explanation. No alternatives. A simple message offerings many lessons to learn from.

Software Architects Of Today

Shouldn’t be sitting in ivory towers dispensing design documents or ideas with no basis of reality.

They should be coding. They should hang around to see how their decisions pan out.

They should be hunting down smells, listening to the team about painful areas, thinking about how to turn them around. They should work with the team to co-ordinate a strategy for redesign or a series of refactoring to turn complex code into simpler designs.

They should be sharing their experience in collaborative ways with the team to create several design choices, to clarify the pros and cons and to refine them to a best choice.

They should still be looking at the bigger picture, and always looking for ways to share that big picture. Part of it might be an XP Metaphor (or the Shared Vision). It might come out looking like an architecture diagram.

I’m sure of missed some things, and I know for a fact, most software architects can’t meet even these. Fortunately I get to work with many who do.

Collaboration Explained

Collaboration ExplainedI’ve been lucky enough to meet Jean Tabaka before I’d read her book, Collaboration Explained. She’s a very humble and knowledgeable lady, and you can see both of those attributes in her book about effective collaboration. It’s probably heavy reading for some people. For the right kind of people, I imagine it’s very easy to digest. If you’re working on projects in a team, especially as a team leader or a project manager, it’s a great book that equips you with lots of practices and tools that come in handy every single day. Even if you’re not working in any of aforementioned roles, as a member of any team, it offers lots of gems worth digging for.

Don’t be daunted by the book’s thickness – Tabaka’s laid the four hundred or so pages well with a decent index and table of contents, making it easy to jump around to topics that interest you. I fortunately had a few hours in the airport and the plane to give me a good chance of reading the detail of the sections that interested me.

A lot of the topics that Takaba covers are very relevant to any environment in which you’re working and even more so in agile development teams where collaboration is key. I definitely relate to many of the stories that she talks about, littering the book and giving real examples of the tools in practice. It’s well written and many of the models are useful straight away.

There’s a little bit of repetition – some of it probably because it’s written in a way that allows you to digest chapters on their own, and maybe so that it really lets the lessons sink in. It also talks about a number of topics that aren’t directly related to facilitation though are still useful in their own way for setting a better context such as leadership and specific agile methodologies. In a way, a lot of the practices draw from many other disciplines and although not necessarily completely new, are presented in a very easy to digest manner.

I’d definitely add this to my recommended reading list, especially for people who want to improve the effectiveness of their teams.

Retrospective Safety Exercise: Three Word Starter

I’ve been looking for alternatives to the standard Create Safety (1-5) Exercise. I’ve found this sometimes fails me when you have new people to a team you’re facilitating a retrospective for. It’s hard to distinguish between “I’ll just smile, nod and agree everything is okay” because they have nothing to add, or they feel very uncomfortable because of things going on in the environment. I adapted this exercise from a coaching technique that a fellow trainer (JJ) suggested. I feel this exercise helps set the scene and mood of the group and gives the facilitator additional qualitative insights. I call it the Three Word Starter.

What it is: A way of gauging the general mood of the group using a qualitative technique.

Time needed: 10 minutes

What you need:

  • 3 sticky notes per person
  • A marker pen
  • A place you can put them up

How to run it:

  1. Ask each person to take 3 sticky notes each
  2. Ask the group to consider how they’re feeling about the retrospective
  3. Ask each person to write down a single word per sticky note. Remind them to avoid pictures or phrases if possible.
  4. Collect them and post them up on the wall/chart/board (you have the option of doing this anonymously or asking them to do so)
  5. Group words together (exact/common ones) and talk through general themes.
Tags

Tips for facilitating the 3-Word Starter

  • Ensure everyone is made aware of the overall mood of the group. Depending on the size of the group, get everyone to read each other’s feelings or read them out to the group.
  • If you see large themes of concern or indicators of low safety, address them directly by asking them to Check-In. Say something like “We recognise that the group is feeling a little bit [insert word or theme here]. I’d like to ask you to “check in” these feelings and be open to this discussion that aims to strengthen confidence and improves effective. It is an exercise for celebration and improvement. It’s not about blame or criticism. At the end of the session you are welcome to “check out” these feelings again”.

Variants
As the group size diminishes think about increasing the number of words per person. For a group of 15 people, I used a 3 word starter. For a group of 8 people, I used a 5-word starter. The aim is to get enough words to draw common themes, but not so many that it’s overwhelming.

Tag Cloud

Summarising
Group together words that are exactly the same, or have the same meaning. When I report back the results of the retrospective, I use a Text/Tag Cloud generator to help put common words together so you get a good feel of how the group is going. I’ve been very happy with the ones TagCrowd produces.

Onboarding Strategy: Catalogue of Patterns Applied

Its Purpose?
Explicitly identifying code patterns in the code base as well as how and why they’re used helps new team members learn more about the system faster. Explaining the system in terms of well known patterns helps new team members identify variants and where patterns are being abused/mis-applied.

How Did We Execute It?
In trying to hand over some work to the support group, the team assembled a list of all patterns used in the system. We listed the pattern name, a reference to the pattern (either book or web link) and how it was being used in the system. We also wrote down the benefits or concerns each was bringing to the codebase. We listed each of these on the team wiki on a page called “System Patterns”.

When new people joined, I would print a copy of the wiki page, and then during or after walking through the System Architecture, helped them understand where they might use them or see them being used.

Catalogue

Image taken from Hubmedia’s photostream flickr stream under the Creative Commons Licence.

Why Is It Important?
Patterns are excellent vehicles for communicating intent and solutions to common problems. Identifying and explaining the system as a set of patterns helps new team members understand the system in much larger chunks, making it easier for new people to focus on absorbing incidental information. It also allows them to focus less on how the code works together, and more importantly focus on what the code does and what value it brings.

Well known pattern names help to identify common problems in the domain, and what the team’s general approach is for solving them.

The number of patterns also indicate a qualitative attribute of your system. If you have a very large system, and only a small number of patterns it potentially indicates that everything is done in very different ways and needs some refactoring. Alternatively if these small number of patterns are used everywhere in the system, then it could already be a very well refactored system. I would also consider looking at a very large set of patterns for a small code base as that might indicate over-design and excessive complexity. In both cases, I would watch out for patterns with only a handful of uses to see if they are actually useful or not.

Things To Watch Out For
Some new team members may not understand all the patterns used in the system. Giving them reading references helps though you may need to do more work to help them understand the pattern.

What I Might Try Next Time
I would revisit this list of patterns with new team members after they’d been in the code base for a while. I think although it’s useful to introduce the catalogue early, it would help to reinforce some of the larger picture after they’ve had an opportunity to discover more detail on their own.

Next time I would also try to link to some part of the codebase that implements the “ideal” version of the pattern and the benefits the team reaps.

Feedback Takes Time

TimeDuring our training classes, we try to convey the importance of effective feedback aimed at either strengthening confidence or improving effectiveness. I feel it’s an important part of learning. We encourage participants to give each other feedback and set aside time once a week with one of the trainers to both give and receive feedback.

For some reason, most people tend to give very ineffective feedback such as “I think that’s good” or “I think you’re lazy”. Breaking these bad habits of giving feedback based on some value or belief judgements is hard to do and is worth the time and effort to unwind. Part of the trick is at least helping people realise when they’re giving ineffective feedback. Helping them formulate effective feedback is the next step.

« Older posts Newer posts »

© 2024 patkua@work

Theme by Anders NorenUp ↑