Bjarne Stroustrup has a quote that goes
“There are only two kinds of languages: the ones people complain about and the ones nobody uses”. This can be extended to large systems as well. There is no “right” architecture, you’ll never pay down all of your technical debt, you’ll never design the perfect interface, your tests will always be too slow. This isn’t an excuse to never make things better, but instead a way to give you perspective. Worry less about elegance and perfection; instead strive for continuous improvement and creating a livable system that your team enjoys working in and sustainably delivers value.
20 Things I've Learned in my 20 Years as a Software Engineer - Simple Thread
There is an internal pressure amongst developers to find the most elegant solution to a problem. Unfortunately, there is no such thing.
No code is the best way to write secure and reliable applications. Write nothing; deploy nowhere.
GitHub - kelseyhightower/nocode: The best way to write secure and reliable applications. Write nothing; deploy nowhere.
Developers want to be the architects of their own system, and prefer to build something from the ground up than adapt to a system another engineer wrote.
This is partially based in pride and partially based in reality. An employment prospect is much easier to defend if you have visible, physical stake in the smooth operation of a system.
Unfortunately, this supposedly noble work might cause more harm than good.
When we seek to intervene in any system created by someone, it’s not enough to view their decisions and choices simply as the consequences of first-order thinking because we can inadvertently create serious problems. Before changing anything, we should wonder whether they were using second-order thinking.
"Hell is full of good meanings, but heaven is full of good works"
The road to hell is paved with good intentions - Wikipedia
Outside the world of silicon, in the world of atoms, things work...because they do. This sounds dumb and/or obvious, but that's exactly the point.
Systems that don't obey the laws of reality are quickly evolved out or replaced, they crumble under their own weight. Survivorship bias is only noticeable to the survivors, making it a intrinsic bias of any being that is alive.
In fact, everything you see around you is a system that was good enough (or perhaps, not bad enough) to get crushed by reality.
And take note, many of these systems will fall prey to time. In fact, I think the best systems acknowledge an exit point where they will stop working, like good stories having a strong ending.
In other words, natural systems that suck eventually stop working.
This is opposed to human systems, which are wrapped in layers of justification.
Justification in programming systems is a blessing and a curse. It allows for engineering teams to move quickly and with unity due to a shared narrative (our graph database will take over the world!). On the other hand, it punishes common sense, favors ego, and allows systems to trend towards perfectionism.
Justification is human energy fighting the natural entropy of a system that has outlived its tenure. It is propping up the wilted balloon with helium, diving into nostalgia when things were "better", keeping Christmas lights up in July.
These things don't make sense without an external justifier.
The goal of a healthy system is to adapt, to not be propped up by force when the correct move is to let it die to make way for something better suited for the new environment.
Science, however, presumes no ontology. Ontologies are theories, and science—a method for evolving and testing theories—grants to no theory a special dispensation. Each theory, like each species, must compete to endure. A theory that today boasts a long reign may tomorrow, like so many erstwhile species, suffer a sudden extinction.
The Case Against Reality, Donald Hoffman
Each week, I send out something that looks like this. Sign up below if you want in!