I’ve lost count of the number of times I’ve had to sit through some sort of motivational, life lesson-style speech. I have not however, lost count of the number of lines from those speeches that actually stuck with me, because it’s literally “2.” Most people trying to write 1 of these speeches would be better served by rolling in a TV and playing the song “Everybody’s Free to Wear Sunscreen” instead. But there is another idea, from talk about sales and marketing strategies for a company I used to work for, that has so subtly stuck with me and now pops up with frightening regularity.
Here’s the basic context behind the idea – someone was speaking about a feature a team at the company had worked hard on, and quite frankly was really good, and helped make our customers non-trivial amounts of money. The presenter was discussing how our functionality worked better, did more, and just superior in every way (yes, there’s obvious bias, but that’s not relevant here – just assume the statements are true, even if not to the extent the sales team rep was saying) than what our competitors were offering. However, and this is the part that should stick with you, people my former employer and their competitors were trying to sell to didn’t care that our functionality was better. They were looking at a checklist of features, and all the companies had checklists with the {functionality A} box checked, at which point the prospective customer just moved on.
Now eventually we could get into the details about how our version of the feature feature was so much better than our everyone else’s version, and win some deals with it, but that came much later in the process, well after the checklists. So our superiority didn’t mean anything until much later in the sales process. Most of the time, the specifics of what we built were utterly irrelevant.
There’s a few quick and easy lessons we can learn from this. First and foremost: “good enough is good enough.” This is how the tyranny of the defaults works – you have something in place that’s good enough for basic usage, which is all you need, so you never really bother switching. Which brings me to a corollary to this lesson – “most people don’t have more than basic requirements for most of what you write.”
I’m not trying to talk about that though – I’m trying to talk about “checkbox thinking” – focusing on being able to “check the checkbox” and not worrying about anything else. Think about every time you had to work on something because “that’s what other companies do”. Or every instance of cargo culting you’ve seen. It’s all just “checking the checkbox.” Once you catch that first glimpse of doing just enough of something to say that you’re doing it, you can’t unsee it.
“Checking the checkboxes” isn’t all bad. It serves as a way of making sure base functionality is met. Remember when Windows Phone came out in 2010? Maybe not, it was a flop1. But for the small percentage of people that do, do you remember how it released without copy and paste? Just like the iPhone did? Even though iOS had finally added the year before? Failing to complete the “checklist” made Microsoft’s phone look incomplete.
It’s 1 thing when you’re using checkbox thinking to make sure you’re providing a minimum amount of functionality to users. The problem is using the checkboxes as a justification in and of themselves. We’ve all seen some iteration of this. “Other companies {do X}, therefore we should too.” No reason other than buzzword compliance. And the wild thing is, once you learn to recognize it you start seeing that sort of thinking more and more often. The emphasis on being able to say you’re doing something more so than on results. The “keeping up with the Joneses’ing” in decision-making. Logic that sounds like it’d make your mama asked if everyone else was jumping off a cliff, would you do it too?
Once you learn to recognize checkbox thinking, you start to realize that there’s a lot of people who don’t really know why they’re making the decisions they are. Not everyone comes out and admits that they just think something because that’s what everyone else is saying. But there are signs – a refusal to consider that there’s another way to do things, or fixating on what other companies (which may not even be in your industry) are doing rather than the problems you got into business to solve. But as easy as it is to spot in others, the bigger (and more important challenge) is turning this kind of perception on yourself.
How much of your decision-making has been to make sure you’re “checking the expected boxes?” I’ve been working on web applications for nearly all of my career, but trying to move to terminal apps lately has made me appreciate just how useful installed software with a plugin architecture has been over my career. Yet every app I think about working on has fundamentally been a web application, because…it should be a web application, otherwise it doesn’t check the required box. The gift registry project I’m working on to learn Go is web-based, but there’s a scenario where instead of running in a Docker container on a server, it’s an installed binary using SQLite that only calls out online to send and receive gift list updates. In fact, that may be a “version 2” of the gift registry app, because it certainly seems like a better fit for what I want the application to be (a private gift registry for family members where people can control who sees what items on your list).
I’m trying to be more sensitive to checkboxes in decision-making to help make sure I’m not another NPC. I’m starting to get back to more “old-school” thinking about software development, focusing less on pulling in stuff because “that’s what enterprise companies do” and instead on getting back to basics: keeping it simple (stupid), focusing on understandability, and trading in a focus on isolating tests at the “unit” level for a suite of tests I can run from the command line quickly that just run the code and confirm it works. And here’s the thing that everyone who catches themselves before diving down the rabbit hole of copying what every other big tech company does realizes pretty quickly – these companies do things the way they do because it solves their problems, which may or may not be your problems. And you know what, it’s completely OK to do things differently if you can form a logical chain of thought starting from the problem(s) you want to solve all the way to the how you’re doing (or want to do) things.
It also forces you to think about what checkboxes should be on your list of things to check off in the first place, and how important they are. Do you really need to be doing it at all? If not, take it off the list. If you do, how important is it to you? If it’s not something you really care about but need to be able to say you did, then sure, just “check the box off” and move on. If it’s on the list because it’s actually important, then you need to make sure your approaching it from first principles, focusing on the problem, it’s impact to users, and what an ideal solution to the problem would look it. Yes, you’ll just be another “checked box” in a feature comparison done by people who don’t care – but for those who do, there’s a very clear and easily visible difference between “checked the box” and “solves the problem.”
Ideally, this awareness of the difference between “checking the box” serves as a useful tool for focusing on the things that matter, without forgetting to make sure basic minimums are met. Sadly, it seems like focusing on trying to “check all the boxes” is increasingly a goal in and of itself. That’s certainly frustrating and incredibly demoralizing, but it’s not a 1-way street. Just like businesses want to “check all the boxes” when making sales pitches, it’s also becoming increasingly common from employees, from areas like returning to office, “passion” in their job, and even agile software development.
At the end of the day, we’re all just checking off boxes. Some of those are completed with high quality and true craftsmanship. Some of those are completed by going through performative motions. While it’s easy to figure out which was which by looking closer at the things you care about, the reality is that nobody seems to. Probably because “confirming that all the boxes are checked,” is just another box to check. At the end of the day, putting something in the market and updating it to make customers happy is the only “checkbox” that matters.
- The Live Tile UI was a great home screen though, and had real potential if the phone had actually taken off. ↩︎