There are a number of techniques, primarily from the Agile space, that are great for getting the best work out of yourself, and your team. They keep you focused on real problems (not anticipated or imagined ones) and focus on high levels of communication across the company.
The best way to keep people on target is to provide them feedback as often as possible. The sooner you can provide feedback, the more likely the behavior is to change. I don't wait until Christmas to correct my daughters when I see them drawing on the wall. I stop them immediately and we 'discuss' the reasons they shouldn't write on the walls. Usually this an effective feedback loop.
But we expect developers to write code that no-one looks at for weeks or months, then learn and grow from the "feedback" they get from testing or QA groups. History tells us that's a pretty inefficient way to improve. People don't remember what they were doing a week ago, much less four months. We've got to provide feedback in a more timely manner.