System Design
How I'm Learning System Design
Most system design content assumes you have already run something in production. Building what the videos explain, instead of only watching them, closes that gap faster than waiting for the experience to arrive.
System design content is everywhere right now, and most of it assumes you have already run something in production and watched it break. That experience is genuinely useful. It is also not the only way in, and waiting to have it before touching the subject would mean never starting.
So I build the systems the videos explain, instead of only watching them.
Watching alone doesn't teach system design
I can watch a video explain load balancers, caching, and database choices, and nod along the whole way through. That is not the same as understanding why a specific choice matters for a specific problem.
The URL shortener I wrote about came directly from this. A system design video walked through the architecture, and rather than just watching it, I built the thing: three copies of the app behind a load balancer, a database chosen for the access pattern, a cache added without touching the rest of the code.
What building it taught me that watching didn't
Watching the video, "add a cache" sounds like one obvious step. Building it, I had to decide where the cache lived in the code, what happened on a miss, and how long an entry should survive before going stale.
None of those decisions are in the diagram. They only show up once you write the code and hit the questions the diagram skipped, and getting them wrong once teaches more than getting them explained ten times.
Small systems have the same shapes
The other thing I keep noticing: the problems do not require production scale to be real. Two requests hitting the same row is a concurrency problem whether the system has ten users or ten million. A slow query is slow at any size. Deciding that a cache and a database can disagree is the same decision either way.
Scale changes how expensive a mistake gets. It does not change the shape of the mistake, which is the part worth learning first.
Where I'm at with this
I am not trying to learn every pattern at once. Each project picks up one or two new concepts, load balancing and caching this time, and leaves the rest for whatever I build next.
That is slower than working through a full course in one pass, and it is the only approach I have found where the concepts stick instead of becoming vocabulary I recognise without really understanding.