When Everything Feels New

Ann Yiming Yang

7/17/20252 min read

lighted brown lighthouse beside body of water
lighted brown lighthouse beside body of water
When Everything Feels New: Design by Pattern, Not Panic

As engineers, we love to think we're building something no one’s ever seen before.
A novel use case. A bleeding-edge problem. A weird, uncharted corner of scale or abstraction.

But the truth is: the deeper you go into system design, the more you realize you're never truly starting from scratch.
Getting a patent approved is hard for a reason: most things are just recombinations.

Pattern Recognition Is the Real Superpower

Before jumping into a brand new architecture, I’ve learned to ask a different question:

What shape is this problem?

Because understanding that shape is where the real leverage lies.

  • Oh, the data is distributed across regions? → That’s a pub-sub or fanout problem.

  • We need to support 100k QPS? → It’s a scaling and caching question.

  • Users see different results on refresh? → It’s a consistency model issue.

What feels novel on the surface is often just a remix of something familiar.

And recognizing the pattern early can save hours, even days of chaos.

So How Do We See the Patterns?

It’s not magic.
It’s how we store and index experience in our brains.

Most engineers don’t lack knowledge.
They lack the right mental tags to retrieve it quickly.

Here’s what helps me:

1. Build a library of primitives

Every time you solve something, ask: What kind of problem was this at its core? Not “which product” but what category.

  • Was it a rate-limiting problem?

  • A race condition across async writers?

  • A memory leak caused by reference cycles?

Start labeling your experiences by shape, not surface.

2. Write down the abstraction, not just the solution

It’s tempting to write: “How we fixed bug X in system Y.”

But much more valuable is:

“This was a variant of a stale read problem under concurrent writes. This could apply to mobile sync, metrics pipelines, or real-time dashboards.”

Think in problem classes. That’s where knowledge becomes transferable.

3. Talk in patterns even with yourself

Instead of saying:

“We need to sync these two services,”
Say:
“This is a reconciliation problem. It's like offline sync or convergence.”

The more you practice pattern language, the more instinctual it becomes.

What About When It’s Truly New?

Sometimes, the problem really does feel like there’s no blueprint.

That’s when your brain has to start categorizing creatively. Not by copying code, but by drawing analogies.

“I’ve never built a distributed vector DB… but I have built a system that needed ultra-low latency lookups with non-deterministic inserts.”

That’s the bridge.
That’s the pattern transfer.

My Mental Stack for New System Design

When I hit something unfamiliar, I ask:

  • What shape does this problem feel like?
    (Coordination? Queuing? Deadlock? Eventual convergence?)

  • What existing patterns are close enough even if imperfect?
    (Vector DBs feel like cache + semantic search + graph traversal.)

  • Where have I seen the failure modes before?
    (Clock skew from metrics systems? Write path fragility like delivery queues?)

  • Who else has solved this in any form?
    (Open source projects, former teams, industry talks.)

The Takeaway

Most complex systems are just known patterns that are seen under unfamiliar lighting.

The more fluently you can see the pattern underneath the noise,
the faster, simpler, and more robust your design becomes.

And when there is no exact pattern?
Your job isn’t to panic.

It’s to build the one that someone else will recognize later.