I've written multiple articles about eliminating waste in software development. This time, I'm going to delve into the biggest waste ever, which is:

Writing software that nobody wants, or that you're unable to sell.

I've been there. Spending years writing software only to discover that nobody really wants it. And it hurt. A lot. Not earning money hurt, but having nobody use the software I wrote hurt even more.

What You Need To Create Software That People Want

There are three things you need:

Product

Obviously, you do need a product to sell. We software developers are good at creating products. The big question is: what product to make?

Hungry Market

You need to have a group of people that are hungry for what you want, like a restaurant with a crowd of hungry people at its front door. And, that group needs to be big enough to justify the amount of time and money that will be spent making the product.

It's quite easy to make a product for which there is no demand, or a product for which there is demand, but it's too small to cover the development costs. The first program I wrote and sold was a photo correction app called Relight. It could correct the colours/lighting of photos to match the original scene. I thought that's what people wanted because that's what I wanted. However, most people wanted to make their photos look like the ones they see in glossy magazines. Magazine photos have a special "look." Portraits are particularly touched up compared to the original photos. So, I missed the mark, and created something people weren't hungry for...

The Ability to Reach the Hungry Market

So, you're certain people will want your product. But, can you reach them? Relight's "target market" was photography enthusiasts who want to fix their photos. Unfortunately for me, professionals and serious amateur photographers generally want a full photo editing suite like Photoshop, and those who are less into photography generally aren't looking for software to fix their photos. They just discard the sucky ones. I couldn't figure out how to target light photography enthusiasts. From memory, advertising cost over 10x the sales it generated, and that really hurt. It was especially painful to have spent a few years working on the software only to have negative income from it.

To be fair, I made it extra hard for myself by trying to outsmart hackers. I decided to release a demo with saving and printing disabled instead of a 30 day trial. There's no way to crack the software, because the necessary code is physically missing from the program. It worked, except that it also stopped people from trying it properly. Why would you use software if you knew that you couldn't save the results? You wouldn't. So, only those who got an immediate benefit from the software might buy it; those who needed more time to try it out were lost.

Avoiding Writing Software Nobody Wants (or You Can't Sell)

Here are a few suggestions:

  1. Ask people what they want/think. I know it's hard for introverted software developers, but you won't know what other people are interested in unless you go out and talk to them. However, beware that what people say they like/want, and what they want enough to buy are two very different things
  2. Ask for pre-sales before writing the software. This isn't always possible, but having people pay you money before you create the product is a good indication that there's a "hungry market" waiting for it. You still need to make sure the market is big enough, though
  3. Write a Minimum Viable Product (MVP) as quickly as possible, and try to sell it. Take short cuts if needed, and implement only the minimum features needed to release it publicly. I spent a long time writing a well-designed framework for Relight so that I'd be ready to expand it when the sales came in. Those sales never came, and all that effort was wasted. Don't do this. Instead, find out if people want it as quickly as possible. If they do, then you can refactor/rewrite to improve the architecture. If not, you can tweak the software to match what people actually want, or ditch it and move on
  4. Learn marketing. And don't think it'll be easy just because you're a smart software engineer. Marketing involves people not machines, and requires a totally different way of thinking. It'll help you both design products & services that people actually need/want, and how to persuade them to buy/use it