Where Do We Start?
If I could recommend only one practice to programmers, it would be collaboration with the testers. Many inconsistencies between what's written and what's expected could be avoided with a little talking along the way. When I give developers my tests to review and discuss before they start coding, extra test variations are exposed that I hadn't considered, and requirements are clarified. For example, on a simple search, my test showed searches by wild card, but the developer had assumed a full-word searchone less bug to be found after coding was complete.