System Design Framework – A Simplified 6-Step Method

🧠 Welcome to Episode 2 of our series – High-Level System Design: A Simplified Guide
🎥 Watch the episode on YouTube
In this post, we’ll explore a 6-step mental model that simplifies any system design problem — whether you’re preparing for interviews or building scalable, real-world products.
🚀 Why You Need a System Design Framework
System design interviews are intentionally vague.
You're told:
“Design a pastebin”
“Design a ride-sharing app”
But where do you even begin?
The mistake many engineers make is to jump directly into databases, APIs, or buzzwords. That’s like starting a building by placing bricks without a blueprint.
You need a framework — a repeatable approach that brings clarity and structure.
🧩 Step-by-Step: The 6-Step System Design Framework
1️⃣ Clarify Requirements
Start by understanding what you're building — not how.
Ask:
What are the functional requirements?
What are the non-functional constraints (latency, availability, scale)?
What are the edge cases, user types, and data retention policies?
🧠 Example: Designing Pastebin? Ask:
Can pastes expire?
Are they private/public?
How many pastes per second?
👉 The quality of your design starts with the quality of your questions.
2️⃣ Define APIs
Before diving into architecture, define the interfaces.
This makes the problem smaller and modular.
🧱 For Pastebin:
POST /paste
GET /paste/:id
Also address:
Idempotency – Should retries create duplicates?
Versioning – How do you evolve APIs?
Rate limits – How do you prevent abuse?
We'll go deeper into these topics later in the course.
3️⃣ Design the Database
Now decide:
→ Should it be SQL or NoSQL?
→ Do you need joins or flexibility?
📌 General rule:
Use SQL when: data is relational, needs strong consistency (e.g., orders, billing)
Use NoSQL when: flexible schema, massive scale, high write load (e.g., Pastebin content)
🧠 Pastebin Schema (NoSQL):
jsonCopyEdit{
"id": "xyz123",
"content": "Text content",
"expires_at": "timestamp"
}
4️⃣ Estimate & Handle Scale
This step separates junior engineers from senior ones.
Estimate:
QPS (queries per second)
Storage (daily/weekly/monthly growth)
Bandwidth (data in/out)
🧠 Pastebin:
10M pastes/day × 1 KB = 10 GB/day
100K reads/sec = requires caching
Design for scale using real numbers, not assumptions.
5️⃣ Add Async Components
Offload non-critical operations to background workers.
🧠 Examples:
Archiving expired pastes
Sending notifications
Pre-processing data
Use tools like:
Kafka, SQS (queues)
Cron jobs
Event-driven microservices
This helps:
Improve responsiveness
Isolate failure
Allow retries and decoupling
6️⃣ Identify Bottlenecks & Tradeoffs
Good design is not perfect design. It’s well-balanced design.
👉 Key trade-offs to consider:
Trade-off | Explanation |
Caching | Speed vs. Stale Data |
Consistency | Accuracy vs. Latency |
Sharding | Scalability vs. Complexity |
Replication | Read scale vs. Update lag |
Eventual Consistency | Throughput vs UX Confusion |
Great engineers don’t avoid trade-offs. They make conscious choices with full awareness of their impact.
🧠 Recap: The 6-Step Framework
Here’s a quick recap of the framework:
Clarify Requirements
Define APIs
Design the Database
Estimate & Handle Scale
Add Async Components
Identify Bottlenecks & Tradeoffs
This framework applies to almost every backend system — from Uber to Instagram to UPI.
📢 Coming Up in Episode 3:
We’ll go deeper into breaking down requirements, using real-world examples.
Thanks for reading. Let’s simplify system design — one concept at a time.
✍️ Written by Rajdeep Dutta
🎓 TechSimplified by Rajdeep
#SystemDesign #SoftwareEngineering #Backend #FAANGPrep #Microservices #Architecture #TechSimplified
Subscribe to my newsletter
Read articles from Rajdeep directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
