gitGood.dev
Back to Blog

System Design for New Grads: Why It Matters Even for Junior Roles

P
Patrick Wiloak
9 min read

"System design is for senior engineers."

I hear this all the time from new grads and junior developers. It's wrong, and it's costing them opportunities.

You don't need to design YouTube from scratch. But understanding how systems work makes you a dramatically better candidate - and a better engineer from day one.

Be a Generalist First

Here's some advice that might go against what you see on Twitter: early in your career, go broad, not deep.

Unless you graduated from an Ivy League school with a direct pipeline into a top ML research lab, you're probably not going to land a job doing cutting-edge machine learning right out of school. That's just reality.

And honestly? That's fine. Because the real world is messy, and generalists thrive in messy environments.

In my time at AWS working with customers and partners, I saw the full spectrum:

  • Some needed sophisticated ML pipelines with MLOps and feature stores
  • Some just needed a RAG system to make their docs searchable
  • Some needed AI agents to automate workflows
  • Some just needed... a website. A really good website.

The engineers who succeeded weren't the ones who went deep on one thing too early. They were the ones who understood enough about everything to figure out what actually needed to be built.

If you're passionate about a niche - ML, security, distributed systems, whatever - by all means, dive in. But if you're not sure yet, being a strong generalist is a superpower, especially at the junior and mid levels.

Here's the thing: you can't become an ML engineer overnight. You can't become a data engineer overnight. You can't become a solutions architect overnight. These roles take years to grow into.

But infrastructure knowledge is a great foundation for all of them. If you understand how systems work - databases, APIs, cloud services, networking basics - you can leverage that knowledge no matter which direction you go. The ML engineer still needs to deploy models somewhere. The data engineer still needs to understand pipelines and storage. The architect still needs to know what's actually possible.

And no matter which path you choose, you'll have to keep learning. The technology changes constantly. New frameworks, new cloud services, new paradigms. If you're the kind of person who gets bored doing the same thing every day, that's actually good news - this field will never let you get comfortable.

That continuous learning is either exhausting or exciting, depending on your personality. For me, it never gets boring.

Why System Design Matters for Juniors

Even if your interview doesn't include a formal system design round, this knowledge helps you everywhere:

In Coding Interviews

When discussing your solution, casually mentioning "in production, we'd probably want to cache this result" or "this approach won't scale past a few thousand users" signals maturity beyond your experience level.

Interviewers notice. It separates you from candidates who can only think about the algorithm in front of them.

In Behavioral Questions

"Tell me about a technical project" is your chance to discuss trade-offs:

"We considered using a relational database, but our data was document-oriented and we didn't need joins, so we went with DynamoDB. If requirements had included complex queries across entities, we would have reconsidered."

That's a junior talking like a mid-level engineer.

On the Job

Day one, you'll join a system with databases, caches, message queues, and multiple services. You'll read code that talks to these things. Understanding what they are isn't optional - it's how you ramp up faster.

For Promotion

The gap between junior and mid-level is often system thinking. Algorithm skills plateau quickly. Architectural thinking compounds forever.

What You Actually Need to Know

Forget designing Netflix or Uber. Focus on fundamentals that apply everywhere:

Core Concepts (Start Here)

How the web works:

  • Client makes request → server processes → returns response
  • HTTP methods: GET retrieves, POST creates, PUT updates, DELETE removes
  • Status codes: 200 is good, 400 is your fault, 500 is server's fault

Databases (the basics):

  • SQL: structured data with relationships (users have orders, orders have items)
  • NoSQL: flexible documents, easier to scale horizontally
  • When to use which: if you're doing lots of JOINs, you probably want SQL. If you need flexibility and scale, consider NoSQL.

What happens at scale:

  • One server can only handle so many requests
  • Load balancers distribute traffic across multiple servers
  • Caching stores frequently-accessed data in memory (faster than database)

That's it for level one. You can learn this in a few hours.

Intermediate Concepts (Once Basics Are Solid)

Caching patterns:

  • Read-through: check cache first, fetch from DB if missing
  • Write-through: update cache and DB together
  • Cache invalidation: knowing when to clear the cache (this is the hard part)

Database scaling:

  • Read replicas: copies of the database for read-heavy workloads
  • Sharding: splitting data across multiple databases (users A-M here, N-Z there)
  • Connection pooling: reusing database connections instead of creating new ones each time

Async processing:

  • Some things don't need to happen immediately (sending emails, generating reports)
  • Message queues let you process these in the background
  • This keeps your main application responsive

The AI layer (increasingly relevant):

  • RAG (Retrieval Augmented Generation): connect LLMs to your own data
  • Embeddings and vector databases: how semantic search works
  • AI agents: LLMs that can take actions, not just answer questions

You don't need to be an ML engineer to understand these patterns. They're becoming standard building blocks, like databases and caches.

Practice Problems (Apply What You've Learned)

Once you understand the concepts, think through simple systems:

URL Shortener (easiest):

  • How do you generate short codes?
  • Where do you store the mapping?
  • What happens when you get millions of URLs?

Rate Limiter:

  • How do you track requests per user?
  • What happens at the boundary (exactly 100 requests/minute)?
  • How does this work across multiple servers?

Chat Application:

  • How do you handle real-time messaging?
  • Where do you store message history?
  • How do you know if someone is online?

RAG System:

  • How do you chunk and embed documents?
  • Where do you store the vectors?
  • How do you combine retrieval with generation?

You don't need to design these perfectly. Just thinking through the questions builds the right mental muscles.

The Real World Is Messy

Here's something they don't teach you in school: most software problems aren't technically interesting.

The challenge usually isn't "how do we build a distributed consensus algorithm?" It's "how do we get this data from System A to System B when System A uses a legacy SOAP API and System B expects JSON?"

Or: "The customer wants AI but their data is in 47 different Excel files."

Or: "We need to ship this in two weeks with a team of three."

This is why generalist knowledge matters. You need to know enough about databases, APIs, cloud services, frontend, backend, and now AI to figure out what the actual problem is and build something that solves it.

The deep specialists are incredibly valuable - but usually at bigger companies, later in their careers, on specific teams. Early on, being the person who can figure anything out is more valuable than being the person who's world-class at one thing.

How to Study This

Read Engineering Blogs

Companies share how they built things:

Don't try to understand everything. Read to absorb vocabulary and see how engineers think about problems.

Build Things (With Real Infrastructure)

The best way to learn system design is to build systems. Deploy something to AWS, GCP, or Azure. Use a real database. Set up a cache. Connect to an LLM API.

You'll learn more from debugging "why is my Lambda timing out?" than from any book.

Design Things You Use

Open any app you use daily. Ask yourself:

  • Where does the data live?
  • How does it handle millions of users?
  • What happens if one server dies?

You won't know the real answers, but thinking through it builds intuition.

Learn the Vocabulary

Half of sounding competent is using the right words:

Instead ofSay
"Save to database""Persist to the data store"
"Make it faster""Reduce latency" or "improve throughput"
"It won't work with lots of users""It won't scale horizontally"
"Store it temporarily""Cache it"
"Ask the AI""Call the LLM API" or "run inference"

This isn't about being pretentious. It's about communicating precisely with engineers who use these terms daily.

Common Mistakes

Specializing too early.
You don't know what you like yet. Stay broad until you find something you're genuinely passionate about and can get paid for.

Trying to learn everything at once.
You don't need to understand Paxos or B-tree internals. Start with the basics and go deeper only when needed.

Memorizing without understanding.
Don't memorize "use Redis for caching." Understand why caching helps (memory is faster than disk) and when it hurts (stale data, cache misses).

Skipping diagrams.
System design is visual. Practice drawing boxes and arrows, even for simple systems. Your whiteboard skills matter in interviews.

Ignoring requirements.
Before designing anything, ask: How many users? Read-heavy or write-heavy? What's the acceptable latency? What's the budget? These questions shape everything.

The Minimum Viable Knowledge

If you're short on time, focus on being able to discuss three things:

  1. Trade-offs - Every decision has costs and benefits. "We could cache this, which would speed up reads but complicate updates."

  2. Bottlenecks - Where will the system break first? "The database is probably the bottleneck since we're doing a lot of writes."

  3. Scale thinking - What changes when you go from 100 to 1,000,000 users? "At that scale, a single database won't cut it."

That's enough to impress at the junior level - and enough to start building real intuition.

Stay curious. Stay broad. The depth will come when you find your thing.


Build system thinking through our question bank at gitGood. $5/month to prep for the complete interview.