Architecting for change. Complex systems and change:
- Distributed systems are inherently complex.
- The outcome of change in complex systems is hard to predict.
- The outcome of small, frequent, measurable changes are easier to predict, easier to recover from, and promote learning.
I’d have thought all the useful things to say about Etsy were said, at this point, but I’d have thought wrong!
There’s a good saying about designing distributed systems that goes something like “avoid it as long as possible”. I think these three guidelines are worth adding to that saying. Iterate, examine, repeat. Don’t make big, tricky changes. In fact, large change you can’t recover from are nearly impossible to make anyway, so route around them entirely.
The last bit, “promote learning”, is great too. I follow distributed systems and database designers on Twitter and see tons of great papers and ideas in the exchange. More than that, always teach your teammates about the distributed systems you’re building. The more they know about the design and constraints of the system you’re making, the easier it is for them to work with those systems. If you can’t teach someone to use your system, you probably don’t understand it well enough.