The intersection of technology and leadership

Category: Teams (Page 6 of 8)

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.

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.

Onboarding Strategy: Airing of Grievances

Its Purpose?
Allows new team members an opportunity to express their discomforts, concerns and puzzles about the project in a constructive environment. This strategy focuses on explaining the circumstances or reasoning of decisions and to come up with new approaches and suggestions for improving any identified problems.

Grievances

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

How Did We Execute It?
I ran this session with the entire technical team. I asked them to think about things that they had questions about, or things that had been troubling them on the project. I asked for them to write each of those items on a sticky note and let them put them all over a whiteboard.

We talked about each item, trying to understand what problem they caused. We talked around some of the drivers and decisions that might have lead to each of these items and alternatives that had been tried or considered. We also highlighted some as known problems and where to find more about what we’d acknowledged about them. I asked everyone to use three votes to help prioritise which items we should talk about.

For each of those items, we talked around the current circumstance and to help understand current forces at play. We also talked around attempts that we’d made to help address them (if any) and where we’d failed and learned from them.

As the final step, we brainstormed on a number of activities we could try out to improve them (attempting to be as specific as possible). Our final board looked like the following:

Board

Why Is It Important?
The newest people to the project have the freshest eyes to see things that aren’t obvious enough. They lack prior context and don’t necessarily understand why the team made certain decisions or design choices. It’s a bad sign if they can’t work it out for themselves very quickly as it implies code is not well refactored enough or they cannot access the right information.

After being on a project long enough, new people who can’t understand these strange peculiarities assume the existing team made foolish or unwise decisions. These assumptions sometimes manifest themselves very strongly in the way they act, and the way they say things. I’ve found they range from something like “Why would you even consider that?” to “What idiot made this decision?” Understandably, the incumbent team no longer wants to listen to the important message behind the new person’s concerns and they no longer attempt to improve the situation.

Creating a safe environment to “air grievances” allows new people to highlight potentially problematic issues, or demonstrate the lack of clarity without focusing on who caused it, or whether or not it was the correct decision. What’s done is done. Instead the team now works together to improve the situation instead of focusing on blame.

I feel it’s still very important during these sessions to cover why decisions were made as some of those factors might still be in play and influence the direction of any solutions developed during this session.

What I Might Try Next Time
If I had lots of people joining incrementally, running this session continuously might not be as beneficial for the entire group, so I might run it individually with new participants. I would also use this strategy even out of the context of on boarding, as I ran it semi-intentionally as a technical retrospective (without calling it as such).

Onboarding Strategy: Pair Programming

Its Purpose?
Working with people closely on a day-to-day basis creates a safe environment, ideal to learning more about the current culture of the team including the norms, habits, style and general approaches to way things are done.

Pair Programming

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

How Did We Execute It?
On this particular project, programmers pair programmed most of the time. As a technical lead, I wanted to make sure people were comfortable working with each other so I encouraged a bit more of a pragmatic pairing approach and asked the team to take on the responsibility of ensuring enough pairing was going on.

I highlighted the benefits of what we were trying to achieve with pairing (knowledge transfer, style nuances, spreading different problem solving approaches, review of code) and asked new people to be comfortable raising flags when they were getting uncomfortable. Interestingly I think on this particular project we still ended up with a very high percentage of time spent pair programming and noticed that people also appreciated having a little bit more freedom if they wanted to investigate something.

Why Is It Important?
Working closely with someone (that you are bound to do with pair programming) gives a great insight into the working culture of the team that you happen to join. It’s easier to incidentally pick up the certain style that the team has towards different items though can be sometimes very frustrating depending on the people working on that team. I think that pair programming helps with the onboarding process, but it alone is not enough. I personally think that this technique is best combined with the Big Vision Business Problem, the Visible Architecture, and the Transparent Technical Debt strategies.

What I Might Try Next Time
I find pair rotation an interesting experiment. I’d like to try doing a day pair rotation with new people so that they more rapidly get a feel for the way individuals work and contrast their different experiences. Talking over their experiences and finding out what they discovered themselves or see what important lessons they found could be very powerful. I’d be quite concerned about over-doing it though.

When Retrospectives Go Wrong: The Format Becomes Too Repetitive

As a facilitator and a participant of teams leveraging agile practices, regular, heartbeat retrospectives become an essential part of the team’s toolkit. Doing retrospectives so continuously inevitably leads to some repetition, and on some occasions team members seem to find it boring. I’m sure there’s plenty of reasons why someone might find it boring. I believe one of those reasons is that perhaps no important issues are being brought up, to which I would respond by scaling back the frequency of the retrospective – so say, holding one every two weeks instead of every one.

On the other hand, some people find the standard format of What Went Well, What Didn’t Go So Well (and sometimes Puzzles) too monotonous for their tastes. Even as a facilitator, I admittedly find repeating the same exercise slightly boring.

Luckily the Agile Retrospectives book offers a plenty of options you can implement and still achieve the same outcomes. I think it’s important to ask different questions, and also use different formats. Sometimes asking a different question exposes a set of very different answers from what you’d expect. Using different formats, especially those that are highly visual (symbols, graphics, colours, charts, etc) is enough of a subtle change to keep people interested and excited.

Onboarding Strategy: Preparation Email

Its Purpose?
This strategy gives individuals a chance to gain some context and do some background research before actually arriving on the first day of the project.

Email

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

How Did We Execute It?
Before we started our new team, I sent out an email that covered a few different topics. Some of the content would repeat some of the information they receive during other onboarding activities but I think it was still useful to help set some expectations. Some of the topics that I covered included a list of all the tools that we use, the technology stack that the application is built on, a description of common software patterns that we leverage in the system and an opportunity for them to reply with some questions.

Why Is It Important?
People coming to your project may come from very different backgrounds. They may not have had the same level of skill, or exposure to the same sets of tools. When you send out a concrete list of items relevant to your project, you help them understand what they may need to do more reading on or where they need to develop further skills. It also helps alleviate any concerns about not having the right level of skill or understanding and gives them more context about the project.

What I Might Try Next Time
Next time I would want to include more about the business, include more on what life on the project is like, and discuss any unusual or unique aspects to it.

The Goal

Final DestinationOn my way to Kochi, I finally finished The Goal by Eliyahu M. Goldratt. It’s a great book that I think anyone who cares about improvements should read. Here’s my interesting take-aways from the book.

  • Common sense is very different from common practice. It’s easy, in retrospect, to see how obvious something is, yet people are terrible at following it.
  • Courage is needed to break common practice to implement common sense.
  • Telling stories is an effective way at helping other people understand the reasoning. Stating theories and proof isn’t a great way of gaining a common understanding. Dialogues talking through the thinking is much more effective. Even the characters in his book use the same technique.
  • Apply the scientific method. Propose a theory and then collect data. Avoid collecting data and then trying to draw conclusions.
  • Understand the problem you’re trying to solve, and put everything into that context. Here’s a hint – it’s rarely the one someone asks you to solve.

Some open questions for me to continue thinking about:

  • What does exploiting the constraint mean to software development?
  • Is the coding activity of software development always be the constraint?

Photo take from James Jordan’s Flickr stream under the Creative Commons licence.

When Retrospectives Go Wrong: All Action and No Talk

This is the corollary to the previous “All Talk and No Action” post.

I remember talking to two different facilitators about the way they run retrospectives. Facilitator A said “I don’t care too much about getting to action items”, implying that they wanted the people to discuss their problems. In contrast, Facilitator B said, “Why would you run a retrospective without any actions?”. I saw both sides of the argument, but also saw danger in both extremes. In the last post, I wrote about what happens if you only ever run retrospectives without ever changing it.

What would happen if you ran retrospectives only focused on action items?

Context is never shared
Running a retrospective gives some people a forum to be heard. Sometimes people need to get things off their chest, and need to be fully heard by all parties (keeping in mind it’s under the Retrospective Prime Directive). Regardless of whether an action item is created or not, some people may feel resentful if they don’t get a chance to tell their side of the story. By sharing a story, the team is also more likely to relate to the other person’s problem.

The wrong problem is solved
Often I hear people propose solutions in retrospectives without explaining what it’s trying to solve. Only by drilling into the issue further, do you sometimes uncover a very different problem. To this root problem, others may propose a better solution that is more effective, or works better for the entire team. Jumping to actions without discussing what you’re trying to fix often results in a poor solution, and often one to the wrong problem.

Teams lose a shared understanding
I’ve been in one retrospective where a team member only saw the result of the action items and never heard the discussions around it. They felt very resentful over a number of the action items, both because they felt left out and couldn’t see why they were needed. After the retrospective, we revisited the items and the reasons they came about to give them a better context but I don’t think it had the same impact if they had been there during the discussions.

What you can do about it.

Understand the the retrospective is simply a tool, so truly understand what you’re trying to achieve with it and facilitate it accordingly. Use a different set of activities to achieve your specific goals, and ensure you balance the needs of the group to make progress and the needs of the group to talk about the issues at hand.

When Retrospectives Go Wrong: All Talk and No Action

I’ve talked with a number of people who dislike retrospectives, and I feel a common reason they dislike them is that they feel that things don’t change. It’s all very well talking about problems, like what occurred and why, however when they come up with solutions, they still keep finding the same things coming up over and over again.

I, and several facilitators I’ve talked to, have many good reasons for holding retrospectives without being excessively focused on action items as it can be a useful place for different members of the team to better relate to each other’s problems and understand each other’s situations. On the other hand, you want to avoid creating situations where they feel they can’t work on their problems or they are not making progress.

Regardless of whether or not problems persist, I feel retrospectives still serve as a useful tool for highlighting these problems. Like Information Radiators, they are simply showing you where pain points lie. They don’t automatically make them go away.

The question I ask people about these situations is “What did the team do to make the problems go away?”, and “How did they approach fixing their own problems?”. I’ve seen a few retrospectives where the actions involve people outside of the retrospective, and committing them to changing external environments.

Some useful techniques for dealing with this include Bas’s Planning for Action, or by creating and ensuring that better action items are created. Perhaps they’re too big and they never get done, or perhaps action items are too general for them to be really executable. Creating action items that the team have no control over, and involve people not present in the retrospective are generally never realised. Focusing on smaller, more specific action items that the team actually has an ability to influence ensures that at least incremental progress is made and sometimes that’s enough.

When Retrospectives Go Wrong: The Facilitator Controls the Retrospective

I participated in one retrospective run by a contract Project Manager whose style was to stand in front of the group, and ask individuals one by one for a single idea for a “What Went Well”, “What Went Less Well” wall. I felt horrified as I saw each person uncomfortably offer a very brief statement, or in general, skip their turn and all with little discussion around it.

I look back at that situation and guess that it wouldn’t have been so bad if the team already had trust and confidence in the facilitator, but it was obvious from my perspective, based on the lack of interaction and productive conversations, this retrospective offered little value.

Strategies that I would employ (and some that I did) to improve the situation include using an independent facilitator (with no vested interest) to run the retrospective, collate input using sticky-notes to improve anonymity and efficiency, and to spend more time, drawing out the story behind the items to identify any common root causes.

« Older posts Newer posts »

© 2024 patkua@work

Theme by Anders NorenUp ↑