One thing that has been really useful for me in this regard is to review my interview notes on the one year anniversary of hiring an employee.
I have a standard interview script, although I usually tweak it for the particular candidate. In any case, I type up the questions that I asked and summarize the answers into a word document directly after the interview while the information is still fresh. I also have a section for my general gut feel about the candidate and what stands out about them either positively or negatively.
Of course I use this document extensively throughout the rest of the hiring process, especially when I am talking to a lot of candidates when it is easy to get confused about who said what, but it really comes in handy for fine tuning my interviewing process.
On or about one year after the hire, I think about how well the person has worked out. I look at both the positive and negative surprises over their first year. Then I go back to my interview notes and evaluate how well my questions drew out that information. Finally, I use this analysis to tweak my template interview script so that I can make sure to extract that information in future interviews. Also, I use this to get rid of questions that aren't contributing useful information and wasting valuable time during the interviews.
Over time this has really honed my recruiting process and the quality of my hires has improved steadily. I think the most important lesson I have learned from doing this is to never ignore your gut when you have qualms about a candidate, even when you can't put your finger on what the specific issue is. Not once did I have a concern from an interview that didn't manifest itself over that first year.
I blogged about this a while back in my article "19 Tips For Recruiting Great Developers".