Credit to Hanna Morris

A 5-step guide to system design

How to tackle a tough system design discussion as an engineer

Ben Scheer
7 min readJul 27, 2022


System design conversations can be really challenging. There can be a lot of ambiguity, options, and ideas —mixed with limited time and hard problems to solve. From experience, I’ve found a versatile approach that helps make these conversations more structured, interesting, and productive.

Let’s dive right in!

1. Requirements & Goals

A system design discussion often begins with an open-ended problem to solve. Think, “Let’s design Twitter”.

From the start, everyone needs to stay on the same page. You can make this happen by clarifying the problem and then hashing out an agenda for the discussion.

The first step in this agenda will be talking about requirements and goals, which can essentially be broken down into two pieces: Functional requirements, and non-functional requirements.

Functional requirements

Functional requirements are about the big-picture things like:

  • What are we building?
  • What are the main use cases (post tweets, follow users, etc.)?
  • What are the target platforms (desktop, mobile?).