Skip to content
SparkTime, home
Off-Campus Placements With AI
Lessons
1 · Reality Check and Your Search Plan
2 · Building Credibility From Zero
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
11 · Rejection, Diagnosis and Momentum
Lesson 32 of 44

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.

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:

  1. Requirements (about 5 minutes). Functional: what must it do? Non-functional: how many users, how fast, how available, how consistent? Write them down.
  2. 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.
  3. API (about 3 minutes). The main endpoints with inputs and outputs.
  4. Data model (about 3 minutes). The main tables or collections and their key fields.
  5. High-level design (about 7 minutes). Draw the main components and how a request flows through them.
  6. Deep dive (10 to 15 minutes). Go deeper into one or two parts: the interesting algorithm, the bottleneck, or wherever the interviewer steers you.
  7. 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

#
Code
POST /links          body: { "url": "...", "expiresAt": "..." }  ->  { "code": "aB3x9Kq" }GET  /{code}         ->  302 redirect to the long URL, or 404 if unknown or expired

4. Data model

#
Code
links  code        (primary key, 7 characters)  long_url  created_at  expires_at  (nullable)

5. High-level design

#
Code
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_at on 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

#
Code
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

#

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