Working in teams is hard, people are hard, but there are things that can make it easier. The morale in my team is pretty low at the moment because I don’t think we’re doing those things.

Side note: I’m a code monkey not a team lead or any or management. When I say “my team” I mean the team I’m a member of

Side note 2: I wrote the original version of this after a particularly bad week… If it could fall apart it did. I stand by what I say but you’ll notice that the post loses energy after the first section. I’ll update it eventually and flesh out the remaining bits

The things

So what are the things then? Well here they are as I see them…

  • Stop making people feel bad for making mistakes
  • Make processes hard or impossible to not follow
  • Spread the pain
  • Don’t be a dick

    Some of these are easy and some of them aren’t. They’re all “constant effort” things though, so once you start you can’t stop.
    These aren’t the only things that keep morale up either but they’re the issue in my team at the moment, so they’re the ones I’m going to write about.

People make mistakes

Take a deep breath

Deeper than that

Hold it

…and release..

People make mistakes. They make them all the time. They don’t want to make them but they are going to make them and that’s ok.

Have a think for a moment, you’ve just made a mistake. You’ve fucked something up pretty bad, and you need to tell people ( you should tell people ). Which one of these responses would you prefer?

  • You moron, this is a simple thing! You’ve been told to do $TASK several times! How many times do you need to be told!? Get it sorted out now.
  • Ah bugger, is it sorted now or do you need help fixing the issue? Once we’re all sorted again it’d be good to have a chat about preventing this in the future, let’s get everyone in the team together and hash something out later

Obviously these responses are highly contrived… but I bet you’d prefer the second one. Sadly, I’ve seen the first used several times recently in my team and received it myself too.

It sucks. You already feel bad for the fuck-up, you don’t need to feel any worse than you already do. The important thing is to try and stop it from happening again.

I’m a big fan of The Swiss Cheese Model of risk. From wikipedia:

It likens human systems to multiple slices of Swiss cheese, which has randomly placed and sized holes in each slice, stacked side by side, in which the risk of a threat becoming a reality is mitigated by the differing layers and types of defenses which are “layered” behind each other.
Therefore, in theory, lapses and weaknesses in one defense do not allow a risk to materialize (e.g. a hole in each slice in the stack aligning with holes in all other slices)

When mistakes happen, especially big ones affecting production, you have a hole in your layers of cheese. The best way to fix this hole is to get together and come up with a new layer, a new defense, against that issue arising again. And no, saying “don’t make the mistake again” is not ok. It’s not helpful in the slightest, actually.

Here’s what I’m trying to push for in my team:

  • What happened? A timeline is useful if possible
  • Who was involved? This is not a blame game, just look for an objective list of people involved
  • Is there a process or code change that would have stopped this from happening? Is it a systemic issue or localised?

Make processes impossible to get wrong

Similar to my last point… people make mistakes ( did you know that people make mistakes?!? ). Processes govern our lives, especially in software development…

Estimate the ticket… do the ticket… send the code for review… deploy the code… fix the code… and so on and so on.

Things break when these processes are not followed, they’re there ( or should be there ) for a reason! The most important thing of all though is that following the process should be easy.
If people need to hand type a fixed set of things in a ticket they will get lazy. We all have several things going on at once, processes should reduce cognitive load not increase it! A fixed amount of information needs to be supplied for a merge request? Make it a template! And not a copy-and-paste-this-snippet-template either, it needs to be the default content of whatever tooling you’re using.

Does something need doing the exact same way every time? Automate it! Computers are far better at following instructions than humans are ( sometimes they’re too good ) … Ok, sometimes automating a task can take quite a while. When it does, it’s important to just keep hack away at it and show that the team is making progress.
There is nothing worse than having great ideas and then never seeing them come to fruition Doing something is better than doing nothing

Spread the pain

Pretty simple one here… There are boring jobs that need doing sometimes. Spread that pain around. Everyone needs to suffer a little to stop that one guy from picking up all the shit jobs.

One of the several issues I see in the team is that some of us always get to do the fun stuff and others don’t. There isn’t much difference between data entry and software development if you’re not having fun.

Don’t be a dick

I hope this one is obvious. We all have bad days but there is no reason to be an ingrown toenail to people every day. Be nice! It feels good to be nice!