1 Understanding distributed systems
This chapter covers
- Knowing versus understanding
- Thinking about systems
- Your first day at Distributed Systems Incorporated
Software engineering can be a delightful profession, but at the same time, software engineering can be a dreadful profession. For me, software engineering is particularly dreadful when I experience confusion.
Unfortunately, in this industry, confusion is a constant state of mind. Our ability to think about software systems and our ability to talk about software systems lacks the maturity of other professions that have developed strong mental models and means of communication. For example, ask yourself: What is a microservice, what is the cloud, what is meant by cloud native, or what is serverless-it’s an endless list of questions. Do you know the answers?
Often we have a fuzzy notion, a vague idea, that we cannot communicate effectively and efficiently.
For me, this is a source of great frustration. I do not want a fuzzy notion of a system. I do not want to probe the system, poke it with a stick, or observe and rationalize its behavior until the next poke unexpectedly yet inadvertently invalidates what I think I knew.
I want an accurate and concise mental model to reason confidently about the system.