One of the most common memes in software development is that great products come from a programmer scratching an itch. They needed software to do something, did not like what was out there, and created a great product. They were their own customer, they knew what they wanted and they made the software for themselves.
As with most meme’s, this one is only somewhat true. They did have an itch. They did create some software. And hundreds of programmers do this every day. But very few of them make great products with this software. Instead, they create something for themselves, to be used by themselves and never shared. And if they do share it, it’s usually a subset of a product that never grows, never sells and never becomes great.
So what about the ones who did create the great products? Ask any of them, the product that they created is not the product they envisaged at the start. In many cases, it’s not even the product they set out to do. The core of the product may still scratch their specific itch, but the essence of the product scratches the itches of their friends, family, co-workers and finally, customers.
One of the most humbling lessons a software product designer has to learn is that you have absolutely no idea how your customers are going to perceive, understand and use your product. And no idea what problems they are going to use your product to solve (screwdriver manufacturers had no idea people would use their handles as hammers). Great product designers value the experience of watching their customers use their products, seeing how they interact and respond, and love the feedback that customers give. Great product designers know how to filter that feedback down to its essence and meld the product to meet and exceed their customer’s needs.
The real thing these programmers did to make great products was to apply their experience in software and design to the real world problems of their customers, distill the itch into a simple to use and easy to understand product, remove all distractions and complexity, and made just that.
Programmers, you are not your customer. Your customers are your customer. They have different skills, experiences, needs, and backgrounds. Sometimes they know what they need, sometimes you do. Knowing when to listen to them and when to ignore them comes from understanding them, knowing them and the problem space and the possible solution spaces. And then making an informed decision. And in understanding the decision and its consequences. And then applying that decision to the product.
Make a product for the customers you know and understand, add your skill and experience into the mix, and you will make great products that will make more people happy than you can imagine.