efficient - we need to keep the amount of hardware that the customer has to purchase and operate as low as possible, meaning that our software needs to provide high throughput given the CPU and memory used

low-latency - the latency between receiving a request and replying or forwarding needs to be very low (for many applications <10ms) - not just in the average case, but even in the 99th percentile

reliable - availability is measured in '9's (e.g. 5 '9's means available 99.999% of the time, 6 '9's is 99.9999%) and our customers expect at least 5 '9's - including planned maintenance such as upgrades.

We've previously written in C, C++, Java, Scala, Python, and even small bits in Erlang and Lua. While these have served us well,

some (such as C and older C++ versions) are showing their age, and it's harder to be productive in them

some (in particular, JVM-based ones such as Java and Scala) are garbage-collected, and this can cause unacceptable variation in latency

some (such as Python) are quick to develop in, but it can be hard to get great performance and it's hard to be sure that code is reliable

using a selection of languages means that developers need to learn them all, which is expensive.

So we really wanted to settle on one main language - efficient to develop in, performant and robust.