How to make breaking changes and not break all the things
matthew.mceachen.us
matthew.mceachen.us
One thing that surprised me when I started at Twitter was the requirement for every line of code to be reviewed by another engineer—and if you change or add implementation, you can't ship if there isn't corresponding test changes or additions. More tests isn't a panacea, of course, though. There's definitely a spectrum of good, explanatory tests and tests-that-just-cement-the-implementation-details.
At some level you have to trust your eyes.
This turned out to be quite useful. If we were throwing exceptions in the new MySQL code, or even just suspected the new system of causing problems, we could switch it off. We also switched it off so that we could easily run migrations without taking down the site.