How did we get the recipes for chocolate cake that we have today? How did chefs figure out that a 6:2:3:1 ratio of flour to eggs to sugar to cocoa form a batter that can be baked for 22.47 minutes at 396.12 degrees Fahrenheit to produce a wonderful substance called chocolate cake? The answer: stochastic tinkering.
Stochastic tinkering (also known as convex tinkering or cumulative selection) is just a fancy term for randomness over time. More specifically, it refers to the process in which natural randomness and instability brings out the most “fit” in a population. Systems that benefit from stochastic tinkering are antifragile, such as evolution by natural selection.
But let’s take a step back and examine the human-driven case of the chocolate cake. It’s probable that several hundred years ago, there was a recipe for some pastry (#1) that included flour, eggs, sugar, butter, and cocoa in some unknown ratio. Chefs experimented (or accidentally modified) with the recipe by forgetting an extra egg, replacing sugar with honey, leaving the dessert in the oven for an extra minute, et cetera. This produced many new recipes (2A, 2B, 2C), and some were more tasty than others.
Over time, the recipes that people enjoyed the most were used over and over (2A and 2B), while the recipes that produced unpleasant pastries were discarded (2C). This led to a new set of desserts (3A, 3B, 3C) which continued inspiring other recipes. The cycle of cumulative selection continued for several hundred years, and today, we now have a variety of wonderful cake recipes.
So what does stochastic tinkering have to do with software?
Stochastic tinkering affects computer science all the time. The programs we implement today are versions of algorithms invented fifty years ago. Along the way, optimizations have been suggested–some successful, some discarded. In addition, there are hundreds, if not thousands, of programming languages, and the most popular have survived the test of time (whether these are the “best” programming languages is up for debate). And finally, the idea of the minimum viable product is strongly related to stochastic tinkering.
There are many other ways stochastic tinkering is silently influencing computer science, including the structure of college courses, the rise and fall of software companies, the evolution of hardware, and UI development. (I think it’s funny that critics were skeptical about touchscreens less than ten years ago.) In short, the most “fit” technologies of a given period carry on and influence the next generation.
Where do you see stochastic tinkering working in the world?