Aidan Wang

Engineering Manager · writing about complex systems and tech leadership

Complex systems explained with one diagram and concise text.

The blog is written in Traditional Chinese and translated post by post: 103 of 181 posts are in English so far, across 7 of 16 series. Everything else falls back to the Chinese original under the same URL, so links never dead-end.

Start here → About me 中文首頁

Featured series

Designing Data-Intensive Applications — Reading Notes

12 posts in English

DDIA chapter by chapter: data models, storage engines, replication, partitioning, transactions, all the way to the trade-offs of distributed systems.

Re:Building a Live-Commerce Platform from Zero

21 posts in English

War stories: rebuilding a real live-commerce platform — ordering by comment, inventory, payments and fulfillment; how it was done then, how I'd design it now.

Fundamentals of Data Engineering — Reading Notes

11 posts in English

The whole map of data engineering — a mental model built along the data engineering lifecycle, not held hostage by any one tool.

The full map — all 16 series, with the untranslated posts marked → see everything

Latest in English

The cost of interrupts: not time, but fragmentation work ramp-up interrupt ① a fragmented day complete deep work ≈ none (all fragments) ② interrupts batched into one block uninterrupted deep work (one whole block) interrupts same total interruption → deep work = one whole block An interrupt's cost isn't the time it takes; it's fragmenting what's left until deep work is impossible

Operational Interrupts: What Kills Productivity Isn't the Workload, It's Fragmented Time

· tech · 10 min read · 📚 Google SRE — Reading Notes #17

The on-call post covered "how to design alerts and who carries the pager"; the toil post covered "th…

#sre#reliability

PRR: a gate before launch Dev builds the service features OK ≠ launch-ready PRR · Production Readiness Review ① SLO defined? ② monitoring + alerts (golden signals) ③ load test / capacity / load shedding ④ can a release roll back fast? ⑤ a dependency dies → degrade? ⑥ runbook: usable at 3am pass fail SRE takes over shares the pager sent back to fix pager stays with Dev SRE won't take an "unoperable" service — PRR makes reliability a hard launch gate

Production Readiness Review (PRR): What Makes a Service Worth SRE Taking Over

· tech · 13 min read · 📚 Google SRE — Reading Notes #16

The previous fifteen posts almost all talked about "the service is already live; how do we make it m…

#sre#reliability

Wouldn't change (the core) the FSM · lookup-as-validation append facts + derive on read batches that silt but don't fall 3NF · two stock columns per-provider payment fact tables five boring components · one VM order the queue · merge = release transcoding as validation · generic FKs Would add (protection) four golden signals + a batch lag gauge a language for incidents: severity · runbooks a dead-letter queue for poison pills Cloudflare on day one scheduled invariant queries (self-reconciliation) deleted_at · a reverse lookup before sweeping load testing · the other half of the checklist — all protection, not one of them a feature The core was right; everything owed was protection Which also explains why I later moved towards SRE

Re: If I Really Started Over

· tech · 21 min read · 📚 Re:Building a Live-Commerce Platform from Zero #21

This series started with the journey of one comment and ran for twenty chapters. The finale adds no …

#war-story#live-commerce#retrospective

Station 1: one instance + tenant_id every table carries tenant_id · leading composite index the terminus for most SaaS trigger to move on: connections, data volume, noisy neighbours — not "it feels time to distribute" Station 2: read/write separation replicas absorb reporting and storefront reads writes still single-point; this station buys time trigger: reads overwhelm writes, reports disturb trading Station 3: pool + silo hybrid small merchants share a pooled shard · big hosts get their own DB the DB-layer answer to noisy neighbours = enterprise tiering per-tenant backup/restore = the silo's killer advantage upgrading tiers means a move: one merchant's downtime, affecting only them, scheduled late at night Station 4: real sharding Citus-style shard by tenant_id / NewSQL needed only when the pool itself must scale out honestly: most live-commerce SaaS never reach this station Every station has a trigger — untriggered, you stay put; evolution is a response, not an interest

A Parallel World: What If It Had Become a SaaS

· tech · 32 min read · 📚 Re:Building a Live-Commerce Platform from Zero #20

First, something nineteen chapters never mentioned: every one of us took a pay cut to join. What the…

#war-story#live-commerce#system-design

the peak seven people · shipping daily that day CTO: development is paused contract renegotiated · possible layoffs a month later three people left me · one front end · the CTO new direction purchasing from external orders the split bidding out · monolith demoted Background: the storefront is still up, but there are no customers

Microservices for Three People: After Development Was Paused

· tech · 25 min read · 📚 Re:Building a Live-Commerce Platform from Zero #19

The last chapter ended by saying this team's end was nearer than anyone thought. This chapter starts…

#war-story#live-commerce#microservices

All English posts · Tools · Guides