patkua@work

The intersection of technology and leadership

Page 49 of 53

Test Driven Development Requires Less Debugging

I’ve been writing Test Driven code for the last few years and it’s become a natural part of the way I write most code. It was only recently that a co-worker, relatively new to Test Driven Development commented on something I’d never taken notice of.

We were in the midst of some work and ended up with some strange behaviour when we clicked through our application. We inspected the tests to ensure all the tests looked like they were working, and then proceeded to fire up the debugger. My pair then commented, “I’ve noticed you rarely use the debugger when you Test Drive your code”, and you know, he was very correct.

I wouldn’t never say you never need to debug during Test Driven Development (especially when it comes to diagnosing system state and certain triggers) but you definitely spend significantly less of your time in debug mode as you’re verifying bits of your code along the way. And that’s certainly a better place to be.

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.

We Do Things Differently

We’ve almost arrived at the end of my first two week course for internal training. We’d normally hold it in our offices, but space in the office is a huge premium with so many active projects. We’ve had to move our training sessions to the Royal Orchard Hotel. We hold our sessions in one of the conference rooms and I’ve noticed a distinct difference between sessions we’ve held and those that the different groups of people next door hold.

Our sessions use a blend of techniques including individual brainstorming, group brainstorming, facilitated discussion, reflective exercises and a group exercise combined with discussions about principles.

In contrast, the sessions held next door are often a single speaker presenting uni-directionally at the audience with a barrage of powerpoint slides.

As a coach, as a teacher, and as believer in agile methods, respecting people and their individual mechanisms for learning are motives enough to teach using a variety of techniques, especially in group situations. I like to think that our company thinks differently, more effectively, and hopefully much more fun.

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.

When Retrospectives Go Wrong

Some people think that I’m a little bit crazy about how passionate I can be when it comes to retrospectives. I feel it’s an important event for organisations, teams, and individuals to reflect and adapt the things that they’re doing. I find it really strange, if not slightly contradictory when people, who enjoy practising agile, don’t necessarily believe in the value of retrospectives (but I don’t want to detail that thought just yet).

This week I’ve been fortunate enough to share, with my class, my passion for retrospectives and only had enough time to skim through all the ways that you can use them. What I unfortunately didn’t have enough time to cover was the ways that retrospectives may go wrong and, therefore, not be particularly useful for people.

When people misuse or misapply a particular tool, the people involved can, understandably, jump to the conclusion that the tool itself is terrible and a great waste of time. More often than not, I feel those people have shut their mind far too early, and don’t have enough of a chance to understand the contexts in which that tool may bring the greatest value. Sure, I’ve been through, and probably even hosted, quite a few ineffective retrospectives myself, but it doesn’t mean that the retrospective tool doesn’t offer any value.

To fill the gap that I missed with my students, I’m at least hoping to share with them (and everyone else on the web), my understanding about when retrospectives can go wrong.

« Older posts Newer posts »

© 2024 patkua@work

Theme by Anders NorenUp ↑