Lessons
1 · Reality Check and Your Search Plan
2 · Building Credibility From Zero
- 06What Credibility Means for a Fresher: Proof of Work
- 07Choose and Build a Project That Mirrors Your Target Companies
- 08Ship It: Deploy, Document and Make Your GitHub Easy to Read
- 09External Proof: Open Source, Hackathons and Writing About Your Work
- 10Honest Numbers: Measuring and Quantifying Student Projects
3 · Resume and LinkedIn
4 · Finding Jobs Before the Crowd
5 · Applications and Referrals
6 · Online Assessments and DSA
7 · Company Research for Interviews
8 · Technical Interview Rounds
9 · Behavioral and HR Rounds
10 · Offers, Negotiation and Joining
Lesson 32 · Technical Interview Rounds
System Design for Freshers: What SDE-1 Interviews Expect
Freshers are increasingly asked light system design questions, but nobody expects them to design a global platform. This article calibrates what entry-level design rounds usually test, gives a seven-step framework, walks through a URL shortener at fresher depth, explains the building blocks you should be able to name and justify, and shows how to practise with AI and with your own project.
For
Freshers and early-career candidates facing a system design or high-level design discussion for the first time.
Level
Before you start
Read Machine Coding and Low-Level Design for Freshers (article 31). Basic knowledge of web applications (client, server, database) is enough.
On this page
Key takeaways
- For freshers, design rounds test structured thinking: asking about requirements, naming sensible components, explaining trade-offs and seeing what breaks at scale. Not a production-grade architecture.
- Follow a fixed sequence: requirements, rough estimates, API, data model, high-level design, a deep dive into one or two parts, then bottlenecks and trade-offs.
- Know the common building blocks well enough to say when you would use each: load balancer, cache, database choices, replication, message queue, CDN, object storage.
- Always say why. "I would add a cache because reads far outnumber writes and the same links are read repeatedly" beats "I would add Redis".
- Practise by designing systems out loud, by asking AI to play an interviewer who pushes on failure cases, and by scaling your own project on paper.
"Design a URL shortener." For a senior engineer, this question is about sharding strategies, global replication and consistency trade-offs. For a fresher, the same question checks something simpler and still important: do you ask what it needs to do before drawing boxes, can you name the parts of a web system and say why each is there, and do you notice what breaks when traffic grows?
Many freshers either panic (because they think they must produce what senior engineers produce) or skip preparation entirely (because "design is for experienced people"). Both are mistakes. A few weeks of structured practice is enough to handle an entry-level design discussion well.
What you will learn
#- What entry-level design rounds actually test.
- A seven-step framework for any design question.
- A URL shortener designed at fresher depth.
- The building blocks you should be able to name and justify.
- How to practise.
Calibrating the expectations
#Expectations differ by company, and some companies do not ask freshers design questions at all. Where they do, entry-level rounds usually look for:
They look for | They do not expect |
|---|---|
Clarifying questions about features and scale | Exact capacity numbers memorised |
Sensible components: client, servers, database, cache | Detailed knowledge of specific cloud products |
A clear data model and API | Advanced consistency protocols |
Reasons for choices and awareness of trade-offs | One "correct" architecture |
Seeing what breaks as load grows, and one or two fixes | A design for hundreds of millions of users on day one |
Clear communication and a readable diagram | Perfect diagrams |
A seven-step framework
#For a 30 to 45-minute discussion:
- Requirements (about 5 minutes). Functional: what must it do? Non-functional: how many users, how fast, how available, how consistent? Write them down.
- Rough estimates (2 to 3 minutes, if useful). Requests per second, storage per year. Round numbers are fine; the point is whether the system is read-heavy or write-heavy, small or large.
- API (about 3 minutes). The main endpoints with inputs and outputs.
- Data model (about 3 minutes). The main tables or collections and their key fields.
- High-level design (about 7 minutes). Draw the main components and how a request flows through them.
- Deep dive (10 to 15 minutes). Go deeper into one or two parts: the interesting algorithm, the bottleneck, or wherever the interviewer steers you.
- Bottlenecks and trade-offs (about 5 minutes). What fails first as load grows, single points of failure, and what you would change.
Say the framework out loud at the start ("I'll start with requirements, then the API and data model, then a high-level design, and then go deeper where you'd like"). It reassures the interviewer that you have a plan.
A worked example: a URL shortener
#1. Requirements
#Clarifying questions and illustrative answers:
- Create a short link for a long URL; visiting the short link redirects to the long one. (Yes.)
- Custom aliases? Expiry? Analytics? (Expiry yes; custom aliases and analytics optional, out of scope for now.)
- Scale? (Assume 100 million new links a month and reads about 100 times writes.)
- Latency and availability? (Redirects should be fast and highly available.)
2. Rough estimates
#- Writes: 100 million per month ≈ 100,000,000 ÷ (30 × 86,400) ≈ 40 per second on average.
- Reads: about 100 times that ≈ 4,000 per second on average, more at peaks.
- Storage: if each record is about 500 bytes, 100 million a month is about 50 GB a month, roughly 600 GB a year.
Conclusion to say aloud: read-heavy, modest write rate, storage that grows steadily. That points to caching reads and choosing a database that handles simple key lookups well.
3. API
#POST /links body: { "url": "...", "expiresAt": "..." } -> { "code": "aB3x9Kq" }GET /{code} -> 302 redirect to the long URL, or 404 if unknown or expired4. Data model
#links code (primary key, 7 characters) long_url created_at expires_at (nullable)5. High-level design
#Client -> Load balancer -> Application servers -> Cache (code -> long_url) -> Database (links)A read: the server checks the cache; on a miss, it reads the database and stores the result in the cache; then it returns a redirect. A write: the server generates a code, stores the row, and returns the code.
6. Deep dive: generating codes
#Two common approaches, and their trade-offs:
Approach | How | Trade-off |
|---|---|---|
Counter encoded in base 62 | A unique, increasing number (from a database sequence or a range allocated to each server), encoded with 0-9, a-z, A-Z | No collisions; codes are predictable, so links can be enumerated |
Random code | 7 random base-62 characters | Unpredictable; collisions are possible, so check uniqueness on insert and retry |
Seven base-62 characters give 62^7, about 3.5 trillion codes, which is plenty for the stated growth for many years. Say which you would choose for this system and why.
7. Bottlenecks and trade-offs
#- The database for reads. The cache absorbs most reads, because popular links are read repeatedly. Add read replicas if needed.
- A single application server. Run several behind the load balancer; they hold no state, so this is easy.
- Expired links. Check
expires_aton read; clean up periodically. - Caching and expiry together. Set the cache entry's lifetime no later than the link's expiry, or a stale redirect may be served.
- Abuse. Rate-limit link creation per user or IP; this connects to a rate limiter design.
That is a complete fresher-level answer: clear, justified and aware of where it would strain. A deeper treatment, including scaling further, is in Design a URL Shortener (and Pastebin): A Complete Walkthrough.
Building blocks to know
#You should be able to explain each in two sentences and say when you would use it.
Building block | What it does | Use it when |
|---|---|---|
Load balancer | Spreads requests across several servers | You have more than one server, or need to survive one failing |
Stateless application servers | Servers that keep no user data in memory between requests | You want to add or remove servers freely |
Relational database (SQL) | Tables, joins, transactions | Data has relationships and you need consistency (orders, payments) |
Document or key-value store (NoSQL) | Flexible records, fast lookups by key, easier horizontal scaling | Simple access patterns at large scale, flexible schemas |
Index | Speeds up lookups on a column | You query by that column often |
Cache | Keeps frequently read data in memory | Reads far outnumber writes and slightly stale data is acceptable |
Replication | Copies of the database | You need more read capacity or survival of a failure |
Sharding (partitioning) | Splits data across databases | One database can no longer hold the data or the writes |
Message queue | Holds tasks or events for later processing | Work can be done asynchronously, or you need to absorb bursts and retry failures |
CDN | Serves static files from locations near users | Images, scripts and videos for users in many places |
Object storage | Stores large files cheaply | Uploads, media, backups |
Rate limiter | Limits how often a client can call | Protecting against abuse or overload |
How to practise
#- Design common systems out loud, one or two a week: URL shortener, rate limiter, notification service, chat, news feed, file upload, ticket booking. Use the seven steps, with a timer.
- Scale your own project on paper. "My booking API works for 100 users. What breaks at 100,000? At 10 million?" This prepares you for the project deep-dive too.
- Draw diagrams in whatever tool your interviews use (often a shared whiteboard such as Excalidraw), so the tool is not new on the day.
- Read one good design walkthrough a week, such as the System Design Primer on GitHub or the System Design From Zero to Interview-Ready course on this site, then redo the design from memory.
Practising with AI as an interviewer
#Act as an interviewer running a 40-minute system design discussion for anentry-level engineer. The problem: [design a notification service / rate limiter /URL shortener]. Rules:- Do not reveal requirements unless I ask; answer my questions briefly.- Let me lead through requirements, estimates, API, data model and design.- After my high-level design, ask about one failure: "What happens if [component] goes down?"- Later, ask: "What breaks first at 10 times the load, and how would you fix it?"- At the end, tell me what I did well, what I missed, and what would have made the answer stronger for an entry-level candidate. Keep expectations at entry level.A voice mode makes this closer to the real thing (article 33). Assistants can be confidently wrong about specific numbers or product behaviour, so check facts you plan to rely on against a reliable source.
Common mistakes
#- Drawing boxes before asking what the system must do.
- Naming technologies without reasons ("Kafka, Redis, Kubernetes") instead of explaining needs.
- Going silent while thinking about a component.
- Over-engineering a design for a scale nobody asked for.
- Ignoring failure: no answer to "what if this server dies?"
- Memorising one design and forcing every question into it.
Exercises
#Exercise 1
Requirements first
#For "Design a ticket booking system for a cinema chain", list five functional and three non-functional requirements you would ask about, and say which one most affects the design.
Exercise 2: Rough estimate
#A notification service sends 50 million notifications a day, with peaks five times the average. Estimate the average and peak notifications per second, and say what this suggests about the design.
Exercise 3: Justify the choice
#For each, choose and justify: (a) SQL or NoSQL for a payments ledger; (b) whether to add a cache to a product catalogue page read 1,000 times for every update; (c) synchronous call or queue for sending a welcome email after sign-up.
Exercise 4: Scale your project
#Take your main project. Write the seven steps for it as if it had to serve 100 times its current users: requirements, a rough estimate, the API you have, your data model, the current design, the first bottleneck, and two changes.
Show solutionHide solution
Functional: browse shows by cinema and time; choose specific seats; hold seats while paying; confirm a booking after payment; cancel or refund a booking.
Non-functional: no double booking of a seat (strong consistency for seat assignment); high availability around popular releases; fast seat-map loading during peaks.
The most design-shaping requirement is no double booking. It drives how seat holds work (a temporary hold with a timeout), how the database update is made atomic, and what happens when payment fails. A good answer spends its deep dive there.
Exercise 2
Show solutionHide solution
- Average: 50,000,000 ÷ 86,400 ≈ 580 per second.
- Peak: about 5 × 580 ≈ 2,900 per second.
Implications: the system must absorb bursts much larger than the average, which points to a queue between the producers (services that request notifications) and workers that send them, so peaks wait briefly instead of failing. Providers (SMS, email) have their own rate limits, so workers need retries with back-off and a dead-letter queue for repeated failures. 580 per second on average is moderate; the peaks and provider limits are the real design drivers.
Exercise 3
Show solutionHide solution
(a) SQL. A ledger needs transactions, consistency and auditable relationships; losing or double-counting money is unacceptable. Scale is usually handled with careful indexing, replication for reads and partitioning later if needed.
(b) Yes, add a cache. With 1,000 reads per update, most reads can be served from memory. Invalidate or update the cache entry when the product changes, or use a short expiry if slight staleness is acceptable (prices may need more care than descriptions).
(c) A queue. The user should not wait for the email provider, and a failed send should be retried without failing the sign-up. Sign-up writes the user and enqueues an "send welcome email" task; a worker sends it.
Exercise 4
Show solutionHide solution
A good answer, for example for a booking API, might say:
- Estimate: 100 times current users means about 50 bookings per second at peak and 2,000 reads per second.
- First bottleneck: the single database, especially seat-availability queries during peaks.
- Changes: an index on (show, seat) and a cache for seat maps with short expiry; several stateless application servers behind a load balancer.
- What must not change: the atomic seat assignment that prevents double booking.
If you cannot say what breaks first, measure your current system (article 10) and look for the slowest query or endpoint. Interviewers often ask exactly this about your project.
Where to go next
#- Next: Mock Interviews: AI Voice Practice, Peers and Recordings puts coding, design and behavioral practice under realistic pressure.
- For a structured approach to design interviews, see The System Design Interview Framework: A Repeatable Method for Any Problem.
- For where to start with system design, see Start Here: What System Design Is and How to Learn It.
- Career
- Software Engineering
- #AI
- #coding interviews
- #freshers
- #interview preparation
- #job search
- #off-campus placement
- #system design interview
Connected lessons
References
Linked from 1 guide
Other pages in the library that point here.
Keep reading
More in Career →Guide · Career
Interview Preparation and Mock Interviews with AI
Guide · Technology
Heaps and Priority Queues
Course · Technology
DSA From Zero to Job-Ready: A Practical Guide with Java

