Suggestions for New Companies

I've worked for a couple of startups now, and I have a few brief things I want to say about what they shouldn't do. I've been bitten by these things at least once. And really, in the end, everyone loses -- employees, customers, and entrepreneurs.

Requirements Analysis

Doing all the requirements analysis upfront obviously isn't going to be very effective for large (interesting) projects. It helps to spend some time thinking about them and to get something down on paper. But ultimately, without building some type of prototype and letting people try the product, you just can't know exactly what you need.

Well that's no big deal. But it's the ever changing requirements startups incur that is reallly frustrating. I've had requirements change on me repeatedly. OK, you say, that doesn't sound too horrible. But I've had them change back and forth! I've been told, we need it to do x, then later it's y, and then later it's x again. This is just a horrible use of time. And it certainly doesn't make me feel good having to do the same thing over and over again.

There are some things you can do. It's worth a considerable amount of time really trying to figure out what the customers want. I've heard that microsoft makes a paper prototype of their GUIs before they code them. Then they show potential customers the interface and get feedback.

If you really can't get decent input from the customer and you have no idea how the interface should work and what features it should have, you can quickly build a prototype and let them try it for free. Another thing you can do is refuse to make any changes in a given amount of time. That way you can queue up requests for changes. And hopefully in that time, x will "change" to y and back to x without any actual work being done (only in people's heads).

Customers may not know what they want. They'll insist on having such and such a feature and then no one will ever use it. And managers won't know either. They'll insist on the features they think people will use, and then no one will find a use for them. People are unpredictable. Even they don't know what they want. Sometimes it's better to just let the engineers design what excites them. If the customers don't know, and the managers don't know, then certainly this is not going to hurt. And by giving the engineers freedom, motivation will go up, and you will get a higher quality product in far less time. Think about how math becomes applied. A genius pursing his own interests invents some elegant but utterly useless math. A hundred years later, someone else figures out how to make it do something we care about. In this same sense, by providing freedom, you may get something useful (and hopefully on a shorter time scale) even though it was not obvious at the time.

Technological Maturity

There are different types of problems. There are easy problems, hard problems, problems with a single obvious solution, problems with many solutions, good problems, and bad problems. Trying to solve a problem with the wrong technology is a bad problem. In fact, it's a pseudo problem. The real problem is either finding the right technology, or inventing it yourself if it doesn't exist.

If the technology doesn't do quite what you want, then it's either immature or you're using the wrong technology. If the right technology doesn't exist, then this is the extreme form of immature technology. In either case, you don't want to use it. When you first start out trying to force it to work for you, everything will seem OK. You'll find clever solutions to get around the little problems. But they'll just come back and bite you later. More and more little problems will creep in. You may find the project is getting messier and harder to manage and difficult to understand (and this can happen regardless). It's very likely you'll run up against a problem that has no clever solution.

Resist. Resist the urge. Resist any pressure. If it's not feasible to create the technology to solve your problem, you might be better off letting go. Move on to something that you can do. Trying to make something do what it doesn't want to do will not have good results.