One uncomfortable thought that terrifies me lately is that in the day and age of AI-assisted coding the concept of System Design will change again.
Hear me out.
SysDesign used to be about patterns. When the "bad OOP" [1] era was in full bloom, a "good" "system designer" effectively was the person who can tell you where and how to use a SQL database and how to [not] use the visitor and the observer patterns.
Throw in some knowledge of how to separate the read path from the write path, and how to invalidate caches, and one is a decent engineer SysDesign-wise as of ~2015. If the candidate can clearly articulate how strong consistency is different from eventual consistency, and which cloud primitives are best at replacing which self-hosted solutions, they truly are on top of their game.
As the "bad OOP" [1] era started its decline, by ~2020, we had a period of renaissance for System Design. People started talking about causality, vector clocks, logical sharding, read-your-own-writes, consistency, message queues vs. message buses, idempotency and fencing tokens.
I remember in ~2022 you could base an interview on offering the candidate to explain how they understand the CAP theorem after they brought it up in the context of consistency models. For a well-articulating candidate, asking how the Bitcoin protocol maps to these "C, "A", and "P" letters was almost guaranteed to result in an insightful conversation, with tons of signal to extract from follow-up questions.
Now we are entering the post-OOP era, which is great. Rust, for example, specifically makes the claim that we do not need inheritance and what not for the language to be powerful and easy to use. Fantastic. Unfortunately, humankind entering the post-OOP era coincided with, well, Cursor.
So we are at this weird spot where on the one hand it still is seemingly important to understand SysDesign fundamentals. On the other hand, an increasing share of code is being written with or by the AI assistant.
All in all, using tools to boost productivity is great. On the flip side, AI-assisted coding makes it far too easy for an inexperienced developer to make expensive mistakes reliability- and consistency-wise when it comes to making changes to a complex system with many moving parts.
Naturally, on this journey towards conquering complexity, we're back to square one: SysDesign is about making sure the candidate is _less likely_ to use the AI in a way that introduces an expensive-to-debug error.
Which, in my book, is even worse than when a SysDesign interview is about "tell me about the pros and cons of the visitor pattern".
Because instead of designing systems thoughtfully we're inevitably teaching less senior engineers how to speed-run this game of "shipping something". The end result, predictably, will be far more legacy code that no one dares to touch.
Only this time the people who wrote the code did not just leave. They never existed in the first place. It was LLMs all the way down.
27
4 Comments