Camille Fournier speaks brilliantly about the difficulties in distributed systems design.
At 29:00, Camille talks about the Monolith vs. Microservices discussion. One key trade-off, she notes, is that with Microservices, you’re sharding your human resources, so if you lose an employee on a 2-person microservice, it costs a lot more to train someone on that stack. With a monolith, every engineer is proficient in the development tools, the testing stack, the language, and the datastore(s) used, so they’re fairly interchangeable with each other. If one leaves, it’s not too hard for the other employees to pick up the slack. I thought this was a very interesting trade-off which isn’t well-discussed.