Evolutionary Thinking

Iterative improvement, accepting imperfection, and human evolution

Thinking · Created Jun 09, 2026 · Updated Jun 09, 2026 · 1239 words · 6 minutes read

The Imperfect Math

In Poor Charlie's Almanac, Charlie Munger points out that, even in the purest, most perfect sounding realm of math, many contradictions and imperfections nevertheless exist. The real world is on the opposite end of the spectrum of messiness compared to math, thus, contradictions and imperfections will certainly exist in the real world, and we can't do much about these blemishes because even perfect math has unsolvable contradictions, let alone the messy real world.

I've been reading and practicing the PyTorch machine learning framework a lot recently, and one idea really struck me: in machine learning, for almost any model more sophisticated than a 1-layer linear regression, mathematically, the optimal closed-form solution simply does not exist. Thus, in practice, machine learning models train by iteratively correcting their parameters through trial and error in a process known as gradient descent; you can't find the optimal model parameters in one go, you have to iteratively improve it through many rounds.

In parallel to Charlie Munger's imperfect math argument and machine learning's lack of a closed-form optimal solution, I argue the following: in real life, for almost every objective we optimize for -- such as one's career, an organization's org chart, the design of a piece of software, the implementation of software, or anything else -- whatever the scope or type of objective, no closed-form solution exists, and iterative improvement is the only way to go. Simply put, whatever we are trying to accomplish, we cannot plan and execute to achieve perfection in one go; we can only iteratively improve our roadmap and implementation to get better and better each iteration.

In machine learning, even with the objective perfectly defined and the implementation structure fixed, a closed-form optimal solution does not exist, and gradient descent is the only way to go. Then, by Charlie Munger's argument, if in a mathematical field like machine learning we can't expect a closed-form optimal solution, in the much messier real world, a closed-form optimal solution certainly does not exist.

And real life makes the problem messier in the following ways. First, the objective is never perfectly defined, and it may even change over time. Second, the implementation is also imperfectly defined, and there are many roughly equivalent implementations to accomplish the same goal. Finally, the environment variables change -- the greater economy we are in, politics, random events, new discoveries -- and can reshape, if not completely override, the feasibility and strength of prior objectives and implementations at unexpected times.

Accepting Imperfection and Embracing Evolution

By the prior arguments, this means that, for whatever endeavor it is -- be it a software codebase, a company's operations, or one's life trajectory -- having no closed-form optimal solution with evolving objectives means that we are never at a perfect settling point, and something, however big or small, will always feel wrong or intolerable.

As a kid, then a teen, and now an adult, I hear people complaining all the time about whatever grievances are troubling them -- in text messages, in gossip, whatever medium it may be, about school, work, relationships, whatever subject it may be. For a long while, I had been confused and saddened by all the grievances I heard, and I believed living in this world meant being inevitably doomed with all these grievances and imperfections. Now I realize that's simply the way life is, because no closed-form perfection exists, thus we are always in a state with many imperfections waiting to be improved in the next iteration.

"To be improved" is the point of emphasis. Imperfections exist; we could accept them as a way of life, lament over them, and do nothing, or we could try, when the right window of opportunity seemingly emerges, to improve them. We don't have the capacity to improve everything, we won't always have the window of opportunity to improve something, and many times, when we strive to improve something, the effects might be trivial, or they might even backfire. But once again, even in the mathematical realm of machine learning, each step of gradient descent doesn't always guarantee getting closer to the objective, and backfiring zig-zags in progress exist too, in the real world, attempts to improve something certainly follow this pattern as well.

It doesn't matter if one attempt to improve fails, backfires, or accomplishes little, it just matters that we are improving something while the window of opportunity allows. In one go, attempts can swing wildly. Across many attempts and across years, attempts to improve can add up and compound, and grievances will be much more likely to be alleviated over the evolution of our attempts.

History, and Human Evolution

The arguments above also imply that, since changes usually come as improvements over some prior problems, changes usually won't happen until something is wrong, or feels wrong.

Viewed from the perspective of a time horizon, it means the lineage of change would closely follow the lineage of problems that prompted the change.

This lineage phenomenon is especially prominent in fields like, say, law, where one financial or political or criminal case triggered outrage and prompted legislators to act. Another example more relevant to us software engineers is computer security, where one hacking event or cracking of a cryptographic algorithm leads to a stronger algorithm.

At a personal level, this is roughly how an individual learns too. We learn from mistakes.

It also means, whenever we want to understand a subject matter -- be it an academic field, a distributed software system, an organization, whatever -- we should examine the problems it faced, the solutions tried, and the solutions accepted. The lineage of change should explain the present state more effectively than only looking at the present state.

Much like biological evolution, a species cannot be properly understood unless evolution is factored into account. In so many books and articles I've come across, from Poor Charlie's Almanac to Paul Graham's blogs, human evolution is a common root cause for explaining social behaviors like greed, collaboration, jealousy, to name a few. And actually, in topics like this, human evolution has been the only explanation I've seen. Thus, arguably, sometimes a present phenomenon exists for no other reason than its history of change.

If you are in the software industry, think "technical debt" or "historical reasons".

Finally, the thinking point is, can changes occur purely because something can be done for the better for the sake of being better, even when the status quo doesn't expose serious problems? In other words, do changes only come from problems, or can changes come simply because they can?

I believe changes for sure can also happen simply for the sake of being better. And in this case, it's still a problem-solution driven change, with the subtle difference that, the problem is not a problem relative to the status quo. The status quo may work fine, but the future may work better. The status quo is not a deficiency relative to today, it's a deficiency relative to tomorrow.

And perhaps, that's how many great innovations happen. Not because something is horribly wrong today, but because something will be horribly inadequate by tomorrow's standard, and the future can be done much better.

And unfortunately, much pomposity and impracticality occur too as a byproduct.