Using System Design to Build Engineering Teams

System Design... but for building engineering teams!

System Design... but for building engineering teams!

Hear me out:

Most engineering leaders are already familiar with the concepts and principles of System Design. Usually, these are applied to services, applications, and databases. However, I think we're underutilizing these concepts! Let's take a look at how we can apply those same concepts to running engineering teams.

1. Scaling.

There are two main ways of handling scale. Vertical and horizontal. You can scale your team vertically by offering more money + perks and in return getting more output. Just like in real servers, there's a limit to this strategy. Horizontally scaling teams means hiring enough developers to share the load. There are several ways to do this. You could even have a "serverless" approach that could involve having a bench of engineers that are ready and waiting to help a project scale up as needed.

2. Redundancy.

What happens if your lead engineer quits today? Is your team fault-tolerant enough to handle that? If not, let's start cross-training!

3. Caching.

Lots of extra communication ( DB hits / HTTP calls in our metaphor ) can be reduced by creating and maintaining good documentation. Having commonly asked questions, architecture diagrams, and strong README.md files can go a long way in reducing excess communication. This increases focus and helps in the onboarding process.

4. Load Balancing.

This is where Engineering Managers shine! EMs can help play "traffic cop" for our teams to make sure they don't get overloaded or confused about priorities. Having a solid load balancer in your department can streamline processes and communication.

As you can see, there are definitely a few ways that we could use techniques from System Design to build better teams.