“Just be aware that you reach a point of diminishing, or even negative, returns as the specifications get more and more detailed.”
“More testing should be done automatically. It's important to note that by "automatically" we meant that the test /results/ are interpreted automatically as well.”
“If you work closely with your users, sharing their expectations and communicating what you're doing, then there will be few surprises when the project gets delivered. This is a BAD THING. Try to surprise your users. Not scare them, mind you, but /delight/ them.”
“Providing a comfortable transition through familiar metaphors is one way to help get buy-in.”
“Don't be a slave to history. Don't let existing code dictate future code. All code can be replaced if it is no longer appropriate. Even within one program, don't let what you've already done constrain what you do next -- be ready to refactor... This decision may impact the project schedule. The assumption is that the impact will be less than the cost of /not/ making the change.”
“In addition, build dependencies may not be the same as test dependencies, and you may need separate hierarchies.”
“Don't gloss over a routine or piece of code involved in the bug because you "know" it works. Prove it. Prove it in this context, with this data, with these boundary conditions.”