Software Maxims
I've learned many things over the past thirty years and some lessons play out in my mind over and over.
- Hubris is the most dangerous sin because it often masquerades as a virtue, like "saving the Earth". The road to Hell is paved with good intentions.
- Complexity is multiplicative but human perception is additive. It's easy to underestimate how fast complexity will grow and get out of hand.
- When you reward something, you get more of it. When you reward lies, you get more lies.
- When you punish something, you get less of it. When you punish honesty, you get less of it.
- Successful systems are not designed around exception cases. They're designed around majority (happy path) cases. But most political discussion in the USA today is about... exception cases.
- You're focused on delivering a product or you're focused on something else. The software crew believe their focus is a product but more often it's their political situation, a promotion, building their resume, virtue signaling, mating...
- Second Project Syndrome - the dangerous belief that your second project should have the perfection that your first project lacked.
- Technology is rarely a deciding factor. Sub-optimal technology choices often succeed. Projects fail mostly from improper business requirements, poor funding, political conflicts or personal weakness, not from bits or bytes.
- People have finite mental bandwidth. They will usually conserve bandwidth by delegating "thinking" to a trusted 3rd party. How is that working out with the MSM in 2022? :)
- Many software folks care little about software. They care about money but make poor decisions because they don't grasp implications. Others care too much and churn out code even when it's counterproductive. They like complexity or mystical powers. You should avoid both if you want to deliver a product.
- Be wary of motives and pre-existing conflicts. I was misled or blindsided in about half of my contracts.
- The software world is filled with a surprising amount of ego, fraud, envy, sabotage and hidden agendas. It took me about ten years to realize this, as I don't suffer much from envy or hidden agendas. :D
- Envy - I've had a few people go to extraordinary lengths to derail my career but I outlasted most of them. I was google-bombed from 2002 to 2004 but I put up Realmeme.com in 2004 to foil it. Kurt's dead now and I'm not.
- Projects have a natural outcome, whether it's to succeed, fail, or twist endlessly in the wind. You can force a different outcome but it's risk and effort and maybe you shouldn't.
- Time is finite. Which means conversations are finite. "Collaboration" takes time and a "collaborative" environment means there's no clear plan and design is ad hoc and chaotic.
- "Inclusive", "diverse", "collaborative" are today's red flags. Is the goal to deliver a product or something else?
- Diversity is always a cost which often has an overriding benefit. But in today's world it's a religion instead of a business strategy and most people can't see the difference.
- Dishonest money creates dishonest people. The current crypto bubble is a great example of the Federal Reserve system, which is a Long Con.
- I avoid perfectionists and physicists for software development. New development has too much ambiguity and their ego can't deliver a flawed product. Because nobody writes perfect software.
- If I offer a 5-year old child a platinum coin or a candy bar, they're always gonna choose the candy bar because it's what they know. The software world is filled with 5-year old kids.
- Organizational problems are often treated as technical problems because nobody recognizes it or wants to deal with it. It's safer to say "Our e-commerce system is broken" than to ask "Why did we hire a moron?".