McTaba Labs logo
By Bonaventure Ogeto|

System Design Basics for Junior Developer Interviews

Junior system design interviews do not expect you to architect Netflix. They test whether you can break a problem into components, choose appropriate technologies, and think about basic trade-offs like database choice, caching, and API design. The worked example below walks through designing a real system from scratch.

What junior system design interviews actually test

At senior level, system design interviews go deep into distributed systems, consistency models, and scaling to millions of users. At junior level, the bar is much lower. Interviewers want to see:

  • Requirements gathering. Can you ask clarifying questions before jumping into a solution?
  • Component identification. Can you break a system into frontend, backend, database, and external services?
  • Technology choices. Can you justify why you picked PostgreSQL over MongoDB, or REST over GraphQL?
  • Basic data modelling. Can you sketch a database schema that supports the requirements?
  • Communication. Can you explain your thinking clearly?

You will not be asked about load balancers, sharding, or consistent hashing at junior level. If those topics come up, a high-level awareness is enough.

A framework for answering

Use this structure in any system design interview:

  1. Clarify requirements. Ask: Who are the users? What are the core features? What scale are we targeting? What are the constraints?
  2. Define the API. List the main endpoints or operations the system needs to support.
  3. Design the data model. Sketch the database tables and relationships.
  4. Draw the architecture. Show how the frontend, backend, database, and external services connect.
  5. Discuss trade-offs. What would you change if the system needed to handle 10x more users?

Spend the first 5 minutes on requirements. Most junior candidates skip this and design the wrong thing.

Worked example: M-Pesa-paid event ticketing

Imagine the interviewer asks: "Design a system where people can buy event tickets and pay with M-Pesa."

Step 1: Requirements.

  • Event organisers create events with a name, date, venue, and ticket price
  • Attendees browse events and buy tickets
  • Payment is via M-Pesa STK Push
  • Attendees receive a ticket with a QR code via SMS or email
  • Organisers see a dashboard of sales

Step 2: API endpoints.

POST   /api/events          - create an event
GET    /api/events          - list upcoming events
GET    /api/events/:id      - event details
POST   /api/tickets/buy     - initiate ticket purchase (triggers STK Push)
POST   /api/webhooks/mpesa  - M-Pesa callback (confirms payment)
GET    /api/dashboard/:eventId - organiser sales dashboard

Data model and architecture

Step 3: Database schema.

-- Events
CREATE TABLE events (
  id UUID PRIMARY KEY,
  organiser_id UUID REFERENCES users(id),
  name TEXT NOT NULL,
  date TIMESTAMPTZ NOT NULL,
  venue TEXT,
  price_kes INT NOT NULL,  -- stored as whole shillings
  total_tickets INT NOT NULL,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- Tickets
CREATE TABLE tickets (
  id UUID PRIMARY KEY,
  event_id UUID REFERENCES events(id),
  buyer_phone TEXT NOT NULL,
  buyer_name TEXT,
  status TEXT DEFAULT 'pending',  -- pending, confirmed, used
  mpesa_receipt TEXT,
  qr_code TEXT,
  created_at TIMESTAMPTZ DEFAULT now()
);

Step 4: Architecture.

Frontend: Next.js (server-rendered event pages, client-side dashboard). Backend: Next.js API routes or Express. Database: PostgreSQL on Supabase. Payment: Daraja STK Push API. Notifications: Africa's Talking SMS API for ticket delivery.

Flow: Buyer clicks "Buy Ticket" and enters phone number. Backend creates a ticket row with status "pending" and sends STK Push. M-Pesa callback hits the webhook endpoint, which updates the ticket to "confirmed", generates a QR code, and sends it via SMS.

Discussing trade-offs

Step 5: Trade-offs.

Race condition on ticket count. Two people buy the last ticket at the same time. Fix: use a database transaction with a SELECT FOR UPDATE or decrement a counter atomically.

STK Push timeout. If the user does not enter their PIN within 30 seconds, Daraja times out. Fix: poll the transaction status endpoint or wait for the callback. Show "waiting for payment" on the frontend.

Scaling. For a small event (500 tickets), this architecture handles it easily on a single server. For a Uhuru Gardens-scale concert (50,000 tickets going on sale at once), you would need a queue to handle the burst of STK Push requests and a more robust ticketing lock mechanism.

Mentioning these trade-offs, even briefly, shows the interviewer that you think beyond the happy path.

Frequently Asked Questions

Do all junior interviews include system design?
No. Many junior interviews are purely coding and conceptual. System design questions are more common at mid-level and above. But being prepared gives you an edge, especially at startups where junior developers wear many hats.
Should I draw diagrams during the interview?
Yes, if possible. A simple box-and-arrow diagram showing frontend, backend, database, and external APIs makes your explanation clearer. On a virtual interview, use a shared whiteboard tool or just describe the components verbally.
How much detail should I go into at junior level?
Enough to show you understand the components and their connections. You do not need to specify exact AWS services, caching layers, or CDN configuration. Focus on the data model, API design, and one or two trade-offs.

Ready to build real-world apps?

Join the McTaba Labs full-stack marathon. Ship 8 production apps with M-Pesa, USSD, and WhatsApp integrations, and get career support until placement.

See Programs