Life is like a box of software
In software engineering, there is a concept dating back to the sixties, called the “second system effect.” The second system effect is the second try at solving a problem, the one where you try to fix all the shortcomings of the first solution, and is generally doomed to failure. This is true because the second system is too ambitious too succeed. It suffers from “feature creep,” in which every little feature anyone could think of makes its way into the system, destroying any sort of conceptual integrity that might have been there. The added complexity makes it unstable to the point that it’s not usable or secure. The second system is dangerous, and to this day, you should never buy version 2.0 of any software program. Stick with 1.0 or wait for 3.0.
I have been writing software for a long time, and I generally try to avoid the second system effect by jumping directly to version 3.0. Actually, that’s not true; I generally write the first version in a quick-and-dirty manner, and quite often leave it at that. But if it is a piece of software with any importance, one that will be in use for a number of years, I find some faults with it. I think of all the things that are missing. Then I begin to write it again. The trick is not to finish writing it again, because I know it’s going to suck; I just work on a design and carry out the implementation until I see the warts start to bubble up. Then I stop, and try to learn what would have made the second version a failure. About half the time I decide that 1.0 wasn’t so bad after all, and the other half of the time I write the third version with less ambition and more wisdom.
The pattern of the second system is visible outside of the world of software. If you look at any situation long enough, you will see its flaws and shortcomings, and seek to remedy them. Do so with too much ambition and you will fail; in trying to please everyone, you may end up pleasing nobody at all.
At this time in my life, I’m facing version 2.0 of a lot of things and wondering at what point it will become obvious that I’m being too ambitious. There are a number of changes going on where I feel like I have an opportunity to start fresh, which is both good and bad. The bad part about starting fresh is the tendency to be too greedy. I have a lot more experience in the world of software with realizing when I’ve bitten off more than I can chew, and that it’s time to scale back if I want to succeed. In life, not so much. Sooner or later I expect the warts to start surfacing, and hopefully it will become more clear to me what really needs to be fixed, what solutions are worse than the problem, and what was best left alone in the first place.
