How a Founder Thinks About System Design
You don’t need to design like a staff engineer. You need enough of a mental model to make good calls fast, scope honestly, and talk credibly with engineers. The goal isn’t the “right” architecture — it’s the simplest system that solves the requirement and won’t trap you later.
The loop
- Start from the requirement, not the tech. What does the user need to happen? Write that first. Most over-engineering comes from designing for an imagined future instead of the stated need.
- Build the simplest thing that works. Solve today’s problem with the least moving parts. Complexity is a loan you repay with interest.
- Know where each piece sits. For any feature, be able to say: where does the data live, what talks to what, and who is allowed to do it. That’s most of system design at an early stage. (See Databases-and-APIs.)
- Hold a few options across the spectrum. Cheap-and-simple → robust-and-complex. Pick deliberately, not by default. (See Engineering-Practices.)
- Leave a door, not a wing. Don’t build the scaled version now — just don’t make a choice that’s expensive to reverse. Reversible decisions can be fast and rough; one-way doors deserve thought.
The three questions for any feature
- Data — what do we store, and how do the pieces relate? (an ERD answers this)
- Flow — what calls what, in what order, and what happens when a step fails?
- Access — who can do this, and how is that enforced? (auth + roles — see OAuth, RBAC)
If you can answer those three, you can spec a feature an engineer can build.
Founder-specific instincts
- Speed of iteration beats theoretical scalability early on — but watch for the one or two things that are genuinely hard to change later (your core data model, your auth model).
- Being a little technical is leverage: you scope better, estimate better, and earn trust. Take on small builds and learn from the mistakes.
- Match the system to the stage. A two-engineer team shipping fast needs different architecture than a 50-person org. Don’t cargo-cult big-company patterns into a startup.
Open questions
- When is it worth introducing a queue / async processing?
- What’s the cheapest way to add caching, and when does it actually pay off?
- How do I reason about a data model I’ll regret in a year?