If you decide to implement part of the project outside your group or company, the clean interface prevents any undue coupling with the rest of the project, and you can develop it in any language. Also, you may decide to use rapid prototyping to implement all the interfaces, and later optimize particular ones as appropriate. Design with exceptions. There will always be mistakes in either design, coding, or module use, and unless the software itself announces those mistakes by throwing an exception, you will spend hours or months hunting for problems. Only through rigorous exception use can you guarantee that a problem will not unexpectedly bog down your project.
Elegance always pays off.
This is a hard one to sell to management, but elegant is synonymous with maintainable and reusable. More than that, an elegant program just feels right. But since we ve convinced ourselves that this is about business and making money, not about feeling, it can be difficult to see that an elegant program tends to animistically hold together under rough treatment rather than flying apart as with many programs. But because software is an art form that also makes money, there will always be a battle between aesthetics and expedience. Human communication is the bottleneck.