Practices to increase the bus factor
Practices for your engineering team to move faster and/or project to live longer.

Just a guy who loves to write code and watch anime.
Search for a command to run...
Practices for your engineering team to move faster and/or project to live longer.

Just a guy who loves to write code and watch anime.
No comments yet. Be the first to comment.
Qualities that make outstanding builders.

Bipedal vs quadrupedal: how many legs This is about the number of legs the creature walks on. Bipedal. Two legs. Humans, ostriches, T-rex, kangaroos, most fantasy humanoids. Quadrupedal. Four legs. Do

Intro You hear "lerp" and "smoothstep" everywhere in game dev. They sound like math jargon. They're not. Both are small tools that do the same job: smoothly move from one value to another. The problem

What is Kinematics Kinematics is the math field. It's the study of how things move without worrying about forces (which would be dynamics). FK and IK are the two branches: forward kinematics and inver

Intro Textures are usually the biggest cost in a 3D scene. Memory, bandwidth, and load time all get eaten by them. Resizing them is the obvious lever. There's more. This post is about the less obvious

In this article, I'd like to go over practices to increase the bus factor of the team.
The definition Wikipedia gives us:
The bus factor is a measurement of the risk resulting from information and capabilities not being shared among team members, derived from the phrase "in case they get hit by a bus".
To me, it means more or less: How many engineers need to be gone before the development either slows down immensely or stops?
You will have to look at the whole team, and it isn't too difficult to measure.
Example points:
There can be many more scenarios of course, but the point is to increase the shared knowledge on the team, and there are numerous ways we can achieve that. Two major principles:
You may wonder whose responsibility it is to ensure the bus factor is kept high, in my opinion, it is the whole team, but especially the engineering leaders.
Why engineers as well? Because I believe professionalism in software engineering is more than putting your head down and writing code, it is about making sure that the software & product succeed short-term and long-term in multiple aspects, and among them is the lifespan and pace of development of the software.
Let's go over practices to increase the bus factor.
In pair programming, two engineers come together and work on something. Oftentimes one is the driver and the other passenger, meaning, one is the typer and the other behind as support.
Pair programming is great because the engineers get to collaborate in real time when working on something. This leads to knowledge being shared through exchanging ideas, discussions & giving each other feedback.
Ideally, pairing partners should be rotated often, so you get to work with different people on multiple parts of the system and learn from everyone.
Mob programming has a few definitions, but the definition I'm going with: Mob programming is when 3 or more engineers on the team get together and work on something.
It is not pair programming, but mob programming.
It is great & can be fun, with multiple people learning from one and other.
Points I brought up talking about pair programming could also be said here, about real-time collaboration for an instance.
If you want an in-depth read about TDD, I recommend this article of mine: The truth about Test-Driven Development (TDD).
By doing TDD, and following the 3 steps of the cycle, we can reduce the cost of change in our software greatly through:
Also, tests themselves can serve as documentation when you want to know what a part of the system should be able to do, shouldn't do, and how it responds to i.e. edge cases. In the future, new engineers can refer to the tests when they've to learn more about a part of the system.
Mob Reviews is a practice I introduced in my previous company where after an engineer was done with a feature, they would present it quickly to the team. Demoing the feature and also showing the code, and how they implemented it from a high-level perspective. I found it amazing, it often leads to discussions and feedback for improvements. I really enjoyed it.
This way features don't get implemented and shipped without engineers on the team missing it, not just how they work of course, but more importantly, how they were implemented.
Mob reviews may not fit every company or team, but when they do, they are awesome.
Try to automate most things. For things that you need to do quite frequently, you may want to add documentation for them, but automating those steps is better because writing good documentation and keeping it up-to-date over time is NOT the simplest approach.
There might be things you want to do manually, just make sure to add documentation but be aware that they don't become out-of-date.
There will be things that require documentation, i.e. how to debug a system in a certain environment.
Strive to write good documentation and keep an eye out to make sure it doesn't get stale.
It is also good to ask for feedback from your peers when writing documentation, making sure it is understandable and simple.
You may notice you need to either automate or document something when people consistently ask where to find or how to do something. It is good to document things right away when you know you know that others will have to do the same things following chronological order.
Invest in your team as the title of this section says. Train them, educate them, take them to conferences, book workshops for them where they can learn collectively and more.
You should train your team in the areas needed, depending on your software and team:
These are just some examples, whatever your use case might be.
There are ways to increase the bus factor within the team. It isn't the easiest problem, but it is also not the hardest.
Keep the bus factor high and increase the lifespan of the software as well as the pace of development whenever members leave and new ones join.