Srujan Chidarla

CODEDISCIPLINE

Warming up

Building strength

Booting systems

Balancing load

Routing models

Syncing signals

Ready to ship

Back to writing

Long-form note

System Design in the AI Era

How architecture evolved — and why it still decides who ships reliably

AI-era request pathClick a node to inspect the hop

1 · Clients & Edge

2 · Application & AI plane

3 · Data & async

4 · Observe & recover

Tap any hop for a popup explanation.

Why I'm writing this

I'm not a principal architect. I'm a new grad who got early exposure to systems that served millions of requests a day, then spent the last year shipping my own products — CampfireChai, JobHuntOS, StudyGlobal, and Neocortex.

Every time something broke (and things always break), the lesson was the same: cute demos don't survive traffic. System design is the difference between "it works on my laptop" and "it still works at 2 a.m. when one dependency flakes."

How system design evolved (in plain English)

Early web apps were often one big codebase talking to one database. That was fine — until releases blocked each other, one bug took the whole product down, and scaling meant buying a bigger box.

Then we moved toward services: split domains, load balancers, caches, queues, and monitoring. The trade-off? More moving parts. You gain independent deployability and scale, but you inherit distributed failure modes — timeouts, partial outages, inconsistent reads.

Cloud made that model default. CI/CD made shipping continuous. Observability stopped being optional. The "architecture diagram" stopped being a slide for interviews and became the map of how your product actually breathes.

What changed in the AI era

AI didn't replace system design — it added a new unreliable dependency in the hot path. An LLM call can be slow, expensive, rate-limited, or down. Prompt quality varies. Providers have different strengths (reasoning vs speed vs cost).

So modern design asks new questions: Where do we put the model call? Do we stream? How do we fall back when Claude is throttled but Groq is fine? How do we keep secrets client-side (BYOK) while still shipping a product strangers can install?

JobHuntOS forced me to answer those in production. Multi-LLM routing with failover isn't a buzzword there — it's how the Chrome extension stays useful when one provider hiccups. The architecture has to assume AI will fail gracefully, not perfectly.

Why it still matters for someone like me

Recruiters don't hire new grads to invent CAP theorem papers. They hire people who can reason about trade-offs: consistency vs latency, sync vs async, cache hit vs stale data, one service vs a tangle of five.

At Cognizant-scale exposure I saw what 99.9% uptime feels like operationally. In CampfireChai I felt real-time coordination (Socket.io) meet product urgency. In StudyGlobal I cared about data shape for real users. System design is the thread connecting all of that.

If you can sketch the request path — user → edge → API → service → cache/DB → queue → monitors — and explain one failure mode at each hop, you're already ahead of most tutorial portfolios.

How I practice it while shipping

Start from the user journey, not the buzzwords. Draw the path. Name ownership. Decide what must be sync vs what can wait in a queue.

For AI features: isolate the LLM behind a router, set timeouts, log provider choice, and always have a degraded path (cached answer, simpler model, or honest "try again").

Ship small, instrument early, and treat diagrams as living docs — update them when the product changes, not only before interviews.

Takeaways

  • System design evolved from monoliths → services → cloud platforms → AI-aware paths.
  • AI adds latency, cost, and failure modes — design for failover, not demos.
  • New grads win by explaining trade-offs with shipped proof, not jargon.
  • If you can draw the path and name what breaks, you can grow into the role.