Software is written to solve a problem. Sometimes, it’s more than one problem, but you get the idea. Being someone who both uses and writes software, I’ve found the best software out there doesn’t just solve a problem, but was written with a clear and definitive opinion about how that problem should be solved. That’s not by accident or coincidence, it’s very much causal.
First and foremost, having a strong opinion about exactly what your software is and isn’t trying one do and how it intends to go about it gives you a set of guiding principles around your software and its scope. It helps you define precisely who your target audience is. It creates a story around your software that tells about the problem you’re trying to solve, as well as why and how your software does it better.
Without a strong opinion as the foundation of your software’s design and functionality, you’ll inevitably end up trying to build something that attempts to please everybody. That’s never going to work, for users and for you. If your software has a strong opinion forming the definition of who your target users are, then you also know which potential users aren’t worth trying to attract. You can ignore the extraneous noise, nonsense, and scope creep and stay focused on the things that matter most.
Not developing software with a strong opinion about how things should be done means ignoring that there are instances where best practices exist, and that your users should be following them. Even in instances where there aren’t hard-and-fast best practices, sometimes there are clear-cut bad practices that your users shouldn’t be following.
Here’s a real-world example: at my old job at a marketing company, I’ve sat in meetings about pop-up functionality at the same time pop-up and ad blockers were becoming so prevalent that Safari and Google had announced they were baking them into the browsers by default. This on top of discussing potentially adding other obnoxious functionality like auto-playing videos. You know, being part of what makes browsing the web so terrible. This is the point where if we were developing software application with a strong opinion we’d have said pop-ups are not going to be part of the future so it’s time to move on, and that we would not be participating in the most annoying behaviors on the web. Yes, I understand the customers wanted pop-ups and marketers like auto-playing videos, but let’s also remember that B2C marketers (AKA our customer base) are a group of people that every time they start doing what they want, behave so badly the US Congress has to step in and outlaw it. Some users require adult supervision, not indulging, and that’s where opinionated software comes in.
The invariable response to me pointing out that we as the makers of the software should be taking a stand about what our users should and should and should not be allowed to do to enforce best practices was to be told “Our users are intelligent people and we should give them the option.” The problem with that statement was that I had seen the support tickets that came in from those same “intelligent people” – and that statement was a lie. That fact just reinforced my belief that we shouldn’t be just blindly giving users options.
Strong opinions about how a problem should be solved naturally informs where you should be building friction into your software, what you should explicitly be disallowing, and what you can leave open to users to customize. They let you “nudge” users towards best practices and discourage people from pursuing edge cases unless they’re absolutely necessary. Making opinionated software gives you a narrative about what it is you’re doing. That narrative tells the story of why your software is different, and why it’s better than the competition. It explains the feature decisions you make, and guides future decisions. It helps illuminate who your target customers are, making it easier to focus on their problems. In fact, strong opinions about how to solve the software’s problem domain is the key to keeping your focus on the important things about your software in general.