As I sit down to write, I noticed a tug at the back of my neck—a tension forming as I begin editing my words obsessively. It's a habit of writing characterized by my attempts at achieving the best possible outcome. "I know that I can write well," I tell myself, "I've just got to strike the right tempo, tone, voice..."
I often have the same sensation when I'm writing code. The giants of our industry, whose shoulders I stand upon, tell me all sorts of things that should be true about my code—the way it reads, the way it's coupled to other parts of a system, and the amount of complexity its allowed to have—it's all qualified and quantified.
This tension, of balancing all of the small discrete decisions that crop up when implementing a software feature, causes me to try to painstakingly eke out the "correct" way to do things. It's as if when faced with a choice, I scan through an endless tree of outcomes trying to game out what my best option would be. "Do I extract a shared setup for these tests, or do I duplicate it for each assertion?" "Under what circumstance should I choose the builder pattern over a factory method?" "Should this method be called
is_prepared?" The list goes on and on.
If this sounds familiar to you, you're not alone. People who tackle decision-making in this way are called maximizers.
In order to determine their optimal decision outcome, maximizers feel compelled to examine each and every alternative available, which is often infeasible in reality due to the limitations in human cognition (Roets, et al., 2012).
In theory, maximizers make the best choices, but research shows that, in practice, maximizers aren't ever sure that the choices they make are the best choices, and it's this "not knowing" that leads to analysis paralysis, and ultimately, regret.
Satisficers, on the other hand, are happy with whatever "good enough" choice they make:
Several options may fall within a satisficer‘s threshold for acceptability, providing greater flexibility and latitude in achieving a desired decision outcome. As soon as [they encounter] a good enough option, the satisficer can easily ignore the addition of new choices to the decision domain (Peng, 2013).
Satisficers are pragmatists at their core; the solution that works is the solution they commit to.
This way of decision-making is embedded in the fabric of agile methodologies, which gives us permission to make small incremental changes over time, rather then grasping for the perfect solution from the start. From this, we know that iterative design can help us build tighter feedback loops, deliver value to stakeholders sooner, and ultimately keep our development reactive and responsive to the needs of our customers.
Our projects' bottom line isn't the only beneficiary to thinking like a satisficer. Even though the research is still out over whether maximizers or satisficers achieve objectively better decision-making (Peng, 2013), what is clear is that satisficers are happier. In fact, even if a better option occurs to them later, satisficers are less likely to experience regret (Schwartz et al., 2002).
If you find yourself like me, trying to game out the best future outcomes based on limited knowledge and with bounded cognition, remember the ways of the satisficers. Make a good enough decision today, and remain flexible and forgiving in order to make another good enough decision tomorrow. Of course, we all have metaphorical hills on which we may choose to die, but choose your metaphorical battles wisely and dare to be good enough.
Roets, A., Schwartz, B., & Guan, Y. (2012). The tyranny of choice: a cross-cultural investigation of satisficing effects on well-being. Judgment and Decision Making.
Peng, Starry. "Maximizing and Satisficing in Decision-Making Dyads." ScholarlyCommons, 2013, https://repository.upenn.edu/cgi/viewcontent.cgi?referer=&httpsredir=1&article=1101&context=whartonresearchscholars
Schwartz, B., Ward, A., Monterosso, J.,Lyubomirsky, S., White, K., & Lehman, D. R. (2002). Maximizing versus satisficing: happiness is a matter of choice. Journal of personality and social psychology.
Agile Alliance. "What is Incremental Development?", 2019, https://www.agilealliance.org/glossary/incremental-development