Retrospective – This term can elicit a negative response in people in the software development industry (verbally and physically). After all, it is a bit of a loaded term. Looking back can be painful especially since that usually means looking back at mistakes, missteps and decisions we might want to take back.
I have worked for over a decade in software development and information technology fields and during that time I’ve been involved in many meetings you could label as ‘retrospective’. Some of these have been great, others terrible. Some were over-long sessions of moaning and wailing resulting in a great deal of sound and fury, signifying little while others have been productive discussions that led to positive, foundational change in the way a team operated.
Looking back at all of that, I’ve realized a few common truths to the process of retrospectives and how it relates to building software:
- They’re necessary – there’s always room for improvement.
- Don’t focus on the negative – focus on the constructive (ie: “how we can improve”)
- You need an actionable to-do-list – figure out what to change, quickly, then act on it
For the past five months, my team has been employing a process to facilitate retrospectives based around the three bullet points above to foment positive change in the way our team works. This blog post will detail how we do this. This is not to say, “you should perform retrospectives and you should do them this exact way”, because every software team works differently. This however is to say, “here’s an example of how the retrospective process was done with success”. Maybe it could work for you or give you ideas on how you can form your own process that works best for your team.
Step 1: Recognize!
OK, let’s get the grisly stuff out of the way first: Your team needs to improve. And that is OK – because no team is perfect and no matter how well we execute on our goals, there’s always room to improve. In fact, if your team is not at some regular interval assessing or reassessing how you design software, you’re probably ‘doing it wrong’ because (can you smell the theme I’m cooking up here yet?) – there’s always room to improve. If you’re exploring or actively participating management concepts like Kanban/continuous improvement, this process is essential.
Step 2: Togetherness
OK – you want to improve your process and are ready to discuss how that can be done. How does the rest of your team feel about that? You can drag a horse to water and you can drag your team mates into a meeting but you can’t make either drink (unless you’re looking to rack up some workplace violations and future sensitivity training).
It’s important to get a consensus from the entire team in question before proceeding with a retrospective. This will actually be easier than some might think. After all – in software engineering, we’re all trying to solve complex problems. This is just another problem that needs figuring out.
Before going further, you’re going to need a few things:
- Somewhere to meet
- Someone to take notes
- Someone to keep time
- Somewhere to post your meeting notes (Jira, Confluence page, post-it notes, whiteboard, whatever works for you)
- Some time (30 minutes to 1 hour, depending on the size of your team)
Step 3: Good Vibrations
The tough stuff is out of the way at this point. You and your team have decided to fine tune your process and have met in a room together to do so (the 2 boxes of Shipley’s donuts you brought with you is barely a tangent in this case).
When we started performing retrospectives regularly on the Shopper Marketing team, we started our discussion by talking about our recent successes as a team.
In this case, we as a team, one by one went around the room and listed one thing during the past period (sprint, release cycle, week, microfortnight, etc. – the interval doesn’t matter, whatever works for your team) and offered 1 thing we felt the team did well. Doing this has a couple of functions:
- It helps the team jog its memory (a lot can happen in a short amount of time).
- It helps celebrate what the team has done recently (wallow in your success!).
- It sets the right tone (before we focus on what needs to change, lets give a shout out to what we’re doing right).
Note that, especially with larger teams, sometimes one’s perception of how well something might have gone might be very different from someone else’s. If Jane, your engineering head for your web service says she thought the release of the bulk processor was on time and under budget but Bill, your UI lead contends that it in fact wasn’t on time, wasn’t under budget and wiped out an entire village and made some kids cry, then this is the point where you should pause the retro and have a brief discussion about the matter and possibly a follow-up later. This leads us to our next step…
Nick Young asking the important questions of our time.
Step 4: What Could Be Better?
Now that you’re full of happy thoughts about what you’ve done well as a team (and full of donuts) its time to discuss change. This process is the same as the previous step only this time, each team member must call out one thing they think the team could have done better.
Note that this isn’t about what was bad, or what sucked, or so-and-so is a doofus and has bad breath – but what can the team do better. In order to keep the discussion productive and expedient, each person is limited to 1 item and that item has to be something the team has direct agency over. You also might find it handy to nominate a moderator for this point of discussion.
Here’s an example of a real issue that was brought up in a retrospective at a previous company I worked for and the right and wrong way to frame it when it comes to focusing on ‘your team’s agency’.
“Marketing and sales sold our client a bunch of features that our product doesn’t do and we had to work 90+ hours this week just to deliver it”
“We should work and communicate closer with marketing and sales so they understand our product features as well as the effort required in developing said features”
While the first statement may be true it’s the second one that actually encapsulates the problem in a way the team has a manner of dealing with. I found that focusing strongly on the positive aspects of a retrospective discussion helps some teams to self-align toward reaching toward the kind of perspective found in the latter statement above than the former.
Other teams I found realized the need to appoint a moderator to help keep the discussion focused. Its important to figure out what sort of need your team has in this regard early in the retrospective process. This might seem tough at first (and emotionally charged) and that’s OK. What’s important is to keep a positive frame of mind to work through this discussion.
As previously stated, if there appears to be a major disconnect between team members regarding issues that could have been done better, this is a good time to discuss that and hopefully iron out any misunderstandings or make plans to do so soon after the retrospective.
Whoever is taking notes, I hope you’re getting all of this because we’re about to tie it all together.
Step 5: Decide
By now, you and your team will have come up with a good deal of input on what the team did well and what could be improved. You might be surprised but having done this numerous times, often a very clear pattern to what the team though went well and could have improved on appears and does so quickly.
As a team, go over the list of items to potentially improve on and note which ones are the strongest, common denominator. Pick 1 or 2 of these and this will provide some focus for the team for the next period of work (sprint, cycle, dog year, etc.). These can be process-oriented intangibles or even technical issues. Here are some examples:
“Our front end engineers were idle during much of the sprint waiting on services to be updated”
“We spend 1-2 hours doing process Y manually every week and we should probably automate it”
The first item has to do with improving the team’s process of how it interacts with itself. The other is a clear, intangible need that can be solved using a technical solution.
A high-valued issue.
Once the team has identified 1 or 2 high-valued issues they feel need to be addressed, its time to do just that.
Step 6: Act!
This is the most important step. It’s one thing to identify a problem to be solved, another to actually act on it. Hold a discussion as to what potential solutions to your issues might be. The time keeper at this point should be keeping an eye on the clock to help the team keep the meeting moving forward in a productive manner. At this step, try and keep the following in mind:
- By now, whatever issues the team has identified that need to be addressed, it should be something the team has full agency to solve (the matter is firmly in the team’s hands)
- Depending on the issue at hand, it may be something complex and the team might need a couple of tries to solve it. Don’t get discouraged if the issue appears gargantuan or if you can’t solve it within your next period of work alone.
Once you’ve brainstormed on solutions to how you and your team can make improvements, it’s time to really act. In this case, you should have some ideas that can be transformed into action items (you get a Jira ticket and you get a Jira ticket and…). The retro should conclude with the team being able to break down a solution for improving into 1 or more workable tasks and then assigning them to team members for the next sprint, cycle or galactic year.
The key to making this all work is that last part. What comes out of the retrospective should be treated as any other item of work your team normally commits to in the confines of your regular working period (sprint, release, Mayan lunar month, etc.) with one or more team members responsible for delivering the solution, whether technical or otherwise.
Now you’re ready to move forward with improving as a team and dive into that post-donut food coma.
Woooo! Food coma!
Step 7: Going Forward
Whether you use this process or some other framework to run a retrospective, repeating that process is very important. To what degree or frequency your team does that is for the team to decide. Some teams I’ve worked with performed retrospectives after every sprint, others only after major releases and some just whenever the team felt it was necessary. The key is for the team to decide on that interval and after your initial retrospective, be sure to devote some time at the beginning of subsequent retrospectives to review your action items from the previous session (did you complete them and were the issues related to them resolved?).
Hopefully this post has given you an idea how your team can not only perform retrospectives but also improve your team’s working process and even look forward to looking back.
And on that note…