I’m undertaking a 1000-day reinvention project, blogging here daily to track my progress. In Saturday Reflections, I take time out to reflect.
In his classic 1986 essay “No Silver Bullet: Essence and Accidents of Software Engineering” (PDF), Fred Brooks suggests that building software systems is hard for both accidental and essential reasons. From the abstract:
All software construction involves essential tasks, the fashioning of the complex conceptual structures that compose the abstract software entity, and accidental tasks, the representation of these abstract entities in programming languages and the mapping of these onto machine languages within space and speed constraints.
He suggests that even if you eliminate all the accidental complexity, the essential complexity remains. He writes, “shrinking all the accidental activities to zero time will not give an order of magnitude improvement.”
What exactly is the nature of the essential difficulty that writing software faces?
The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions. This essence is abstract, in that the conceptual construct is the same under many different representations. It is nonetheless highly precise and richly detailed.
I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation.
This is relevant to the use of artificial intelligence for software engineering. AI, I propose, mostly eliminates the accidental difficulties, not the essential. AI can make a convincing imitation of specifying, designing, and testing the conceptual construct at the heart of a software system. But without a human actually first doing the real work in specifying a system, and creating design principles for its instantiation, and, just as important, understanding just why such a system should be built, you’ll end up with something useless.
No silver bullet
Brooks borrows the idea of a silver bullet from fairy tales:
Of all the monsters who fill the nightmares of our folklore, none terrify more than werewolves, because they transform unexpectedly from the familiar into horrors. For these, one seeks bullets of silver that can magically lay them to rest.
His essay is called “no silver bullet,” and it must have been lodged in my mind since whenever I came across it; or maybe I heard other people say “there’s no silver bullet” even without having read his essay. Perhaps I read it in the 1995 anniversary edition of Brooks’ famous set of essays about software engineering, The Mythical Man-Month, which had an enduring impact on my own software engineering project.
I was thinking about my options trading yesterday and realized, “there’s no silver bullet, but I keep looking for one.”
I keep looking for some options trade that will either or all at once: remove discomfort from when a trade is looking poorly, save me from having to wait for a trade to play out over weeks and months, or bring me bigger payoffs faster.
In fact, there’s no trade like that. Perhaps there are silver bullets for algorithmic trading firms that can do those things. But even then there’s an essential complexity to figuring out and specifying such a system.
Meanwhile my attempts at silver bullet trades are the ones that went most spectacularly wrong.
Silver bullets in solving Life’s problems?
I also sometimes look for silver bullets in the structures of my life. I want to make some choice that will forever take away my dissatisfactions, my insecurities, my feeling like I could have a life that is altogether more worthy of my time and effort.
But I realize that life has an essential complexity to it. There is no way to set up life so that you are always fully satisfied, delightfully happy, and not given to dysfunctional behaviors.
I think of the idea of “doing a geographic” that I learned about when I, for a time, attended AA meetings (fun, like a weird church, lots of friends and dating to be had, ultimately too dogmatic for me).
When you seek a geographic cure you look to solve all your troubles by moving somewhere else. You relocate to a new city or a new state or you become a vandweller, living life on the road.
The reality is that changing settings often can change your satisfaction with life, and your functional and dysfunctional patterns. But it’s working on the accidental complexity of life, not the essential. It’s intended as a silver bullet for your problems.
But there is no silver bullet for life problems!
Fantasies of easy solutions
I’ve lately been thinking I want to move somewhere else, to a different state, which I’m not going to mention here in any specifics. Part of me thinks that by moving I can get rid of so much difficulty in my life, and I can set the stage for so much satisfaction. But this is an illusion, only a fantasy.
My life in another state will likely be equally difficult and satisfying (and dissatisfying) in much the same ways that my current life is. Or perhaps not in the same ways but in roughly equivalent ways.
I look for easy solutions to options trading, easy solutions for my art practice, easy solutions for my continued though much lessened struggles with drinking.
But there are no easy solutions to trading options profitably, building an art practice that fits properly in my life, or managing my drinking at the level I want to.
Something that options trading is teaching me is how to deal with essential complexity in my life. The essential complexity of options trading includes the following:
- Coming up with a particular trading system that wins via a probabilistic edge rather than via predictions and convictions about outcomes
- Outlining guidelines for how to trade that system that manages risk, guides behaviors, and maximizes positive outcomes while accepting the inevitable negative ones
- Tracking the system over time in order to measure performance and, more important, provide a basis for analyzing it and improving upon it
There’s plenty of accidental complexity that comes along with this, and this weekend I’m going to work on tackling that. I’m planning to take the Google Sheets system I’m using for planning and tracking trades and turn it into a local Python app to make the tracking easier and more seamless. I may eventually even incorporate the ability to trade from my app, using the Schwab Trader API.
What I hope provides a good foundation for this is that I’ve already figured out the essential complexity of my trading system, and built it into the spreadsheet tracker. But there’s always going to be more to think about, such as how I represent opportunities and trades, and the trading lifecycle.
The freedom of giving up on silver bullets
Understanding that you can’t solve your problems with one big change is liberating. It frees you to focus on bringing diligence, practice, attention, and equanimity to the real complications you face.
I wonder had I learned this lesson sooner would I have lived a better life?
But that is just thinking that the silver bullet is realizing there is no silver bullet.