But this process is how we move the shared infrastructure forward. In order to advance the state of the art, we have to be willing not only to try new ideas, but to retreat when those ideas prove untenable or when something better comes along. And we have to be able to speak candidly about problematic code without fear of offending the egos behind it.
Software Engineering is an interesting art, one in which you pour over the smallest details of something that you are crafting into existence, but optimally are detached from the work as if you didn’t. It’s a very tricky balance to strike, and one that I believe comes with time and experience. Time and experience that will continue to show you that the beautiful solution you create today will be flawed and ugly by the standards 6 months or a year (if you are lucky) in the future.
I think there is a second lesson here, one that comes from the other side of the equation. Learning how to critique and question the work of others.
Just as you are not your code, remember that they are not their code.
Always seek to build up in collaboration instead of attacking in competition. The enlightened solution you provide today will be the next subject of critique.