Engineering At Scale

Brenn
2 min readDec 21, 2022

Engineering at scale is much harder but also much simpler than people realize.

At a small scale, almost anything can work. At big scale, choices become constrainedโ€ฆ

In the past, the first thing people did to scale applications was to buy a bigger computer. This works OK for a ๐˜ท๐˜ฆ๐˜ณ๐˜บ ๐˜ฃ๐˜ณ๐˜ช๐˜ฆ๐˜ง period. Pretty soon you run out of โ€œbiggerโ€ or the next step up costs something like the GDP of a small country.

So the only way forward for reasonable people is scaling horizontally. Splitting your work across lots and lots of small/medium machines.

Thereโ€™s a lot of advantages here. Small/medium machines are plentifully available, cheap, and there is an intrinsic redundancy. Thereโ€™s just one BIG downside.

You have to figure out: How do you split the work correctly, accurately, and efficiency across 5, 10, 100, 10,000+ machines?

And this is where the difficulty and simplicity of distributed systems comes in. Turns out there are a pretty limited set of ways to make this work. So you need to be ๐˜ƒ๐—ฒ๐—ฟ๐˜† ๐—ฎ๐˜„๐—ฎ๐—ฟ๐—ฒ, ๐—ฎ๐—ป๐—ฑ ๐—ฐ๐—ต๐—ผ๐—ผ๐˜€๐—ฒ ๐—ฐ๐—ฎ๐—ฟ๐—ฒ๐—ณ๐˜‚๐—น๐—น๐˜†.

Those successful methods almost inevitably involve at least 3 key things:

1. Partitioning/sharding/splitting data and computation.
2. Decoupling different parts of the system through messaging systems and async processing
3. Caching

Understanding these concepts is the simple part. Applying them in practice is the hard part.

In future posts, Iโ€™ll go over the key techniques used to scale systems.

--

--