§1. You want to make sure that your app solves a real problem well that users actually care about.
This is easy to understand, but sadly many talented software people ignore the wisdom and pay dearly. It fair enough if you WANT to write yet another text editor or you WANT to write something in Go and you pick yet another password manager as an exercise. But to build a commercially successful product, you should do plan for success and not leave it to luck. What areas are underserved for Linux, what groups have the budget to purchase your program and also are actual Linux users? (How) can you reach them?
§2. Develop apps that are better than the free apps.
This isn't very hard for many areas, since there are a lot poor free applications out there. However, many app types are not "mission critical", which means you can live fine without using/having them at all.
An example of a killer app was the spreadsheet app on the Apple II: people literally bought the machine to use the software. Of course there's a lot available today, so the bar for success is higher.