First and foremost, have you asked yourself and your team the ever important question:
What is the REAL "level" of programming required to be successful at this job? Please don't keep the trend going of asking whiteboard questions to a person who will be coding CRUD apps all day.
A junior developer is a person who's looking to learn and make an impact in what it means to develop a system. I find it best to interview for potential. Ask them to solve the same problems you'd ask a senior to solve, but with a different bar and more focused on seeing how they think through them.
A senior developer should be a person who's technically competent, experienced, knows how to make technical decisions, and understands the basic idea of value proposition. They get why they're building what they're buidling. Sure you can sit there and ask them a crap ton of coding trivia, but that's not what you actually need from them. A senior should be able to tell you the differences between languages they've used, the challenges they've faced and how they over came them, and clearly highlight key aspects of their technical decision making capabilities.
A lead and manager should be more people oriented.
Asking someone to do coding tests is fun, but it's a really bad signal. Asking someone to work with you on a problem is a lot more interesting and can help you gather much more valuable information. Do your best to setup a test environment that is as close as possible to your real environment. Respect candidates, allow them to highlight their strengths, make them comfortable enough to admit their short comings honestly, and think carefully through what "level" you need.