Required Knowledge

  • Monolith - a single application where all the code lives and runs together. Simple to start, harder to manage as it grows.
  • Microservices - splitting an application into many small, independent services that each handle one thing. More flexible at scale, but far more complex to operate.
  • Dependency - when one piece of code relies on another to work. Too many dependencies between parts of a system makes it hard to change anything without breaking something else.
  • Static analysis - examining code without running it. Tools can read your source files and flag problems - like a spell checker, but for code structure.
  • Component - a self-contained section of the codebase with a clear boundary and a defined owner. The goal of Shopify's effort was to carve their monolith into components.

My Key Takeaways

  • Keeping everything in one codebase is harder to organise, but avoids the enormous complexity of running dozens of separate services
  • Getting hundreds of engineers to change how they work is harder than any technical problem - you have to make the right way feel easy, not forced
  • If every part of your code depends on every other part, clean separation is impossible - untangling those connections matters as much as drawing good boundaries
  • Catching problems by scanning code before it runs is far more useful than discovering them later - faster feedback with less noise
  • Good structure at a large scale only works if the small-scale code is also well-organised - messy internals will always bleed through any boundary you draw