From Eugene's blog What Programmers Do. My favorite ones:
Do not expect a detailed specification
Customers do not understand it till you start showing them early prototypes. And once they see what you are doing, they are likely to give you more feedback, which changes the system.
Keep your eyes on the real problem
Understanding the real problem lets you focus on the goal of the system instead of being carried away by some trivial aspect or some corner cases which may never occur.
Have a team of smart developers
I have seen the benefit of working with a few smart developers. You can actually get more done for less. Throw a few mediocre developers in the mix and a lot of energy of the smart ones will be dissipated in supporting and fixing the problems created by the mediocre ones.
Do not optimize your code without solid reliable data
Many of the systems we built were used in ways we never expected. Once we get the product working, it is fairly easy to find hot spots and optimize (sometimes rewrite the code).