Join a new company and pick legacy code from a developer that has departed, personally I cannot help but form opinions of them. "This guy was brilliant", "this guy is a moron", "this guy way over engineered this, and it should be like 2/3 the size. Also why 1000 character line statements?", "why do we have 3 separate caches in the server for the same data along with why does that server have to broadcast a multicast update over the network to update the other caches?". I could go on, but this a sample.
That's certainly true of some less than stellar code I've left behind. It's not for lack of desire to improve it. It's from (1) having written code against a different set of requirements than what they eventually became, and (2) it ain't broke and I have plenty of stuff that is broken.
By crude solution I mean half-hardcoded or not well generalized methods as the other cases are coming in a year or so. This is also a way to limit the scope and to achieve deadlines. What this means though, is that when new needs arise we need to go ba k and make them better later. Kind of managed techincal debt.
We do mandatory code reviews in our company, and at least a couple of times, I have received a comment which made me go "whoah, this is much better than my idea!", followed by a new version which is 10x shorter and way more reliable.
Being the author of the code in question, I can tell you with full authority that sometimes:
(1) no, I had no thoughts of fixing the code, I did not know it was non-optimal.
(2) no, I had no good reason for not getting around to fixing it. I had no special requirements that would justify my decision.
(3) yes, I just did not think about it. It is like searching for something for a long time and then suddenly finding it in the obvious location -- except this time, I did not find the obvious solution, so I almost ended up committing this huge code monstrosity.
The real has become virtual, and the virtual has become real. The "full human experience" that you are urging people to seek, which was previously modernism in the Western civilization, is currently undertaking cracks and erosions. The central modern narrative, which was at first managed by the media and the state, are now being dismantled, decentralized, and replaced by other realities, resulting in a more turbulent cultural climate. (One could view this as a reason why the political climate of the US is so strange nowadays)
It's especially challenging to communicate effectively when the waiter is not a developer. The language of structure vs. behavior is an excellent way to describe the challenges of building a system to a waiter, especially when frustration with a slow perceived pace of behavior change is coupled with a lack of understanding of needed structure. This vocabulary is universal and clearly conveys what is happening- thanks Kent!
Part 2: https://medium.com/@kentbeck_7670/software-design-is-human-r... Part 3: https://medium.com/@kentbeck_7670/software-design-is-human-r...