Software development is a really curious thing to study. It is all about rapidly changing environment, endless risks and people (the most important thing here) that try to hit moving targets in that mess.
There are numerous thoughts on the web about the things that should be done in order to succeed in this game. Here's the list that I currently agree with:
- Adopt efficient development methodology. And keep doing that. There is no best methodology; only continuous improvement will give the development (and the business) a chance of staying efficient.
- Communicate efficiently. Use meetings, teleconferences, newsgroups, flash movies in emails - anything that's needed to find problems and make decisions quickly. Efficient and stable communication channel saves resources. Additionally there is the problem of communication between the knowledge domain boundaries (i.e. business to development). Well, in this case either get better communication channel and media, or eliminate the problem by putting both ends into the head of a single person.
- Know your field. The majority of wrong decisions were made because there is not enough information about the problem and the alternatives. Wrong or suboptimal decisions lead to wasted resources. Spending some resources to prevent chance of wasting a lot of them, could be a good deal. This applies to everything: picking development tools, technologies, platforms, market niches etc.
- Be flexible and open to changes. Statistically it is more efficient to operate with risks, chances and probabilities, rather than to try to nail the Plan that was carved in stone.
- Minimize the waste. That is it. Saved resource unit does not differ from the resource unit that was earned.
- It is all about the people. Right people in right positions can move mountains.
Basically, if the rules of the game change frequently and you neither can predict those changes, nor influence them, then the only way to succeed is to adapt to those changes. Evolve. Faster - the better.