Should Products Be Opinionated?
The balance between building something people can't use versus building something bloated and clunky
For the vast majority of my career, the focus has always been to make products be as generalized as possible so that they can be used by the most amount of people. This fits typical engineering education in making systems where users have so much flexibility that they can do anything they need without more code being written. That also happens to make good business sense. Make more money from more customers while spending less on development.
The attraction to this model of building products is reinforced by the rapid growth of big tech companies like Google (search anything), Facebook (post anything), and Netflix (watch anything) that built generalized products. Founders want rapid growth. Investors want rapid growth. Engineers want to work at places with rapid growth. Generalized products sound like the way to go.
There is one problem with generalized products however: the UX is often not optimized for the specific task a person has. Generalized products can do anything, but that often means they can't do something very well out of the box. Google sounds like a terrible example of this at first given the success of search being generalized, but we'll get to that later. We should start with JIRA and Notion.
JIRA and Notion are big and successful products (certainly more successful than any product I've built to date so take this with a grain of salt). Lots of people say they love them on social media. However, do you use and love these products? If you went to a friend or peer who wasn't active on social media and asked them, would they say they loved these products?
I would bet that the most common response you would get (and the one that I usually get) is
"ehhh, it's ok. It does what I need, kind of. There isn't anything else that can do what I want though."
This is the most interesting conundrum I've seen in software products. I've used JIRA for years and most of my peers have used it. There's a general feeling of "ugh" when using the product, and yet no other product can do *exactly* what we need the way JIRA can.Â
This is where the product domain can make a big difference. Search may have a complex implementation, but the use case is luxuriously simple. Someone puts something into a text box. They get a list of results. Project management tools have the opposite problem. The implementation is largely just a CRUD (create, read, update, delete) app. The use cases are frustratingly complex though as every company has different project management needs. A healthcare company under HIPAA is not going to have the same process as a "move fast and break things" social media company. An e-commerce company with physical goods is not going to have the same process as a SaaS company. A company selling desktop apps is not going to have the same process as a company selling web apps. In making a generalized product, JIRA has to find some way of accomodating all of these use cases and more. And JIRA does not care what your process is. It wants to find a way to work with it.
That's going to result in two things that make people go "ugh":Â
a complex interface with tons of stuff you don't need or care about
a lot of extra setup in figuring out how to properly use the product
The problem with the extra setup is that it's not a situation where you spend a couple of hours to get things to work the way you want and then you're good. The "setup" part tends to be continuous. I've worked at multiple companies that had weekly meetings about how to use JIRA better. We could never get past the "ugh". Building a generalized product with complex use cases means you are asking your customers to continuously tweak your product to fit them, while you are also constantly updating it. They'll never be truly happy with your product because it will never get to where they want it to be.
Why do people keep using JIRA then? There are plenty of other products out there. Trello and Asana are both solid options. They are a lot more niche though and only fit if your process works the way they intended it to work. Those products are opinionated in how your process should be. Some people are very happy with those products, but a lot of people are going to find that they can't do some things that they were able to do in JIRA. They then go back to JIRA.
The challenge with an opionated product is that you can solve a specific use case really well, far better than a generalized product can, but how big is your possible customer base for that use case? Is it big enough to keep a business viable? Can you find a way to expand on that niche to make your business grow?
Take Amazon for example. It started off selling books. Now it sells almost everything. It had a niche and then expanded. Even today though, Amazon is still fairly opinionated. Look at the product page for a book. Then look at the page for a speaker. Then for a chair. Amazon has an opinion at how people want to purchase different types of items and created an experience for each of those use cases. They may have some generalized software in the backend that allows their staff to configure these experiences, but the end experience for the customer is opinionated.
Let's go back to Google. Search for a location, say Outback Steakhouse. See the map widget? Now search for a book. See the book preview? Now search for speakers. See the shopping options? Google has gone from a generalized experience (search term -> list of links) to a more opinionated one depending on the type of content in the search. The big tech companies have determined that opionated products provide better user experiences and are therefore making their generalized products more opinionated.
This kind of leaves us with two models:
Build a generalized product at first and then build opinions into it later
Build an opionated product at first and then expand the use cases later
There's no easy answer to say which is best for you. Building a generalized product at first takes a lot more effort and capital. It may also fit better if the product has a simple use case, like search, but not as good if your product has complex use cases like project management. Building an opionated product may make it easier to get some traction, but only if you can get enough traction to keep the lights on while you work on more use cases. Regardless of what you pick, I'd love to hear about it!