A source of annoyance for developers is that some of the early choices made on a project turn out not to have been good bets. This is usually only obvious in hindsight. In general, people don’t choose technologies that are not a fit for what they’re trying to achieve; rather, what they are trying to achieve changes faster than the choices can be unwound.

“If only we’d chosen X, done Y, not done Z” only makes sense in hindsight and is only directly useful if you are going to build exactly the same thing again from scratch based on what you’ve learned so far. However, we don’t build exactly the same thing over and over again (or we’d automate it). Picking, or not picking, technology because of how it performed on the last project is a bit like armies designed to fight the last war—they’re not going to be good at the next one.

This makes choosing architecture and technology for a new project hard. Whatever choices you make get baked into the system, and some of them are going to turn out wrong. At some point, if the project is successful, someone will say, “If only we’d chosen X, done Y, not done Z.” This means the initial choices were successful enough that more people are now working on the project. Well done!