I spent probably 6 months to an entire year working on failed or unreleased projects. Some were just little things to learn the language, like a trojan written in VB6 that would do various annoying to the user (like "earthquake" their windows), to a couple of sites I've recently launched that are currently too complicated and/or just not valuable to anybody except me. My outlook at this point is admittedly pessimistic.<p>Lessons learned, in no particular order, except for the last:<p>- If you need to explain your app to customers in more than one sentence, or if that sentence contains any four-or-more syllable words, or if any of those words' definitions fail the above two criteria, it will probably fail.<p>- If you are working on a project to scratch your own itch, confirm that other people have a rash.<p>- Do not give in to feature creep, unless that feature presents itself immediately and without intervention. For example: Back-end features to improve search results: good. Sliders, filters, color coding, additional search options, menus, extra words, animations, hover effects, etc, will probably only confuse people, unless you are a UX genius, in which case those features will merely go unused.<p>- People trust their gut instinct on what something does, rather than read instructions, or discover, or wander into unfamiliar territory. Find the design for your product that mimics something people have used to solve a similar problem.<p>- People are generally incapable of abstraction. If you are the "x of y", that means people need to thoroughly understand x, y, and what it means to abstract one to the other.<p>- People will exert very little effort into learning something unless the rewards are immediate, have been stated to them by a trusted source, or are made extremely enticing.<p>- Ideas that require a critical mass of users to be useful are easy to come by, nearly impossible to execute.<p>- Hope for the best, expect failure.<p>- Stay the fuck away from anything "meta," or anything involving variables. People like being served things that they pick from a menu, or that people suggest. The most complicated task the average person has to deal with, on any regular basis, is probably choosing multiple toppings for a pizza.<p>- It is far better to release a crappy implementation of something awesome than it is to release an awesome implementation of something crappy. Awesomeness in the idea is easier and more valuable than awesomeness in the implementation.<p>- Presentation is much more important than you'd like to believe.<p>- It is far better to be lucky than any of the above. Yes, you can slightly increase your chances of being "lucky," but don't kid yourself.