The difference between successful software and abandoned projects comes down to one thing: solving real problems for real people.