"For every complex problem there is an answer that is clear, simple, and wrong." -…
The first couple of years after getting my driver’s license, I was a really bad driver. Taking a seat behind the wheel (if I could find the correct one) really freaked me out. I vividly remember several cases of horror and despair when the engine of a car failed on me right before a traffic light went green. But after two flat tires (simultaneously) in the Nevada desert, one flat tire in the Interior of Brazil, a broken gear box in the Interior of South Africa, and ending up in a ditch alongside the Loch Ness Lake in Scotland, I eventually learned to handle all kinds of circumstances.
A performance system is the name for the collection of rules in a complex system that determines how it behaves under the input that it receives from its environment. A rich performance system is one with lots of rules for many different situations. My driving style is a performance system which I have been tuning to near perfection over a period of eighteen years. For example: I now know that I should never drive in reverse over a strip of road spikes, that while driving in the night I should watch out for pot holes in underdeveloped countries, that I must treat the gear box of cheap rental cars with gentle care, and that the shoulder of a road may not be the best place to turn a car around in a pitch dark night. They never told me these things during my driving lessons. I had to experience them, and I had to update my performance system correspondingly by adding and updating the rules that I keep in my head. In complexity theory this is called rule discovery.
Another part of the learning process in a complex system is called credit assignment. Every time when I like the results of having applied a rule, I assign one more credit to it. The validity of the rule, given the context of a situation, is confirmed and its importance is increased for that situation. Likewise, every time a rule did not give me the result I liked, I deduct one credit, and its relative importance, for the current situation, is decreased. Of course, this credit assignment is something I rarely do consciously. For example: I never change to a lane on the left while I’m passing a car on the right. After having once been hit on the side by a truck that I was overtaking, I always want to keep an eye on every vehicle that I’m passing by. After eighteen years of driving I have a very complex set of rules, with some rules being very important, but only in specific situations, while other rules are less important, but applicable to a much wider variety of circumstances. Without even realizing it, there are probably even contradictory rules with different priorities, as a result of different credit assignments in contradictory situations.
Organizations and software projects maintain their own performance systems. Some do this explicitly, in the form of documented processes, but most maintain their rules in the minds of employees and team members. Rule discovery is the practice of learning what went wrong and how to do better next time. Credit assignment is the practice of finding out, by experience, which rules work best in which situations. Project evaluations, introspections, reflection workshops, daily standup meetings and several other best practices have been proposed by experts to assist organizations in their rule discovery and credit assignment processes. But people always discover and prioritize rules, even without workshops and meetings. Rules about handling customer emails, rules about high-priority maintenance issues, rules about changes to the planning, rules about vacation and sick days, rules about file names and storage, rules about beta and live deployments, and many, many more. The software development processes and process improvement initiatives in an organization are simply one example of a performance system. But one should realize that, despite all driving lessons and documented processes, most rule discovery and credit assignment is done in people’s minds. They don’t read manuals while driving their car, and they don’t read manuals while responding to customer feedback. There’s nothing wrong with that. It’s just the way the world works.
It is good to know that many performance systems exist in biology, sociology, economy and several other disciplines. It enables us to learn how complex systems are able to manage themselves. And I would never have thought that my learning experiences while driving would be even more useful to me than just getting me out of the road spikes, pot holes and ditches that I got myself into.
So, what do you think? Is your driving style in any way related to your software projects?