When I started working in the late 80's, interviewing for a programming gig was almost always a full-day affair. I don't really have a problem with this. I think you have to go through a few stages.
First of all, make sure their resume describes the person you want. Then your only job is to make sure they match their resume, that's easy--right? :)
Also, if they are going to be at all customer facing, examine their resume for it's communication ability. If it went past 2 pages, were there places they could have removed information? Is it written to be read and not just convey information? If the grammar isn't virtually perfect, don't expect them to be writing any customer specs (this is one of the most important documents they are ever going to write! If they can't bother to have it peer-reviewed and keep it in good shape, then they don't understand writing documents to be read.)
Phone interview a LOT of people. Probe them technically, see if they actually know what they say on their resume. If they don't seem to be lying and you like their resume, bring them in.
Don't spend a ton of time showing them around the building. Most developers don't need to be "Sold" at this stage, don't try to sell the job to them until you are sure you want them. Instead, split this into two parts. Have some good technical people probe deeply so you are sure they can actually code. This is critical, but don't dwell on it. Don't have every interview be technical, just a couple hours of it. (Lots of people we've interviewed are pretty much completely unable to code past the "Hello, World" stage. It's true).
The rest have them get to know their (potential) team. Take them to lunch--check their development practices.
This should be about 2/3 of the process and you need to find out:
Are they flexible? Are they willing to learn new practices? (Critical!)
Are they willing to admit mistakes? If not, there is no use in continuing.
Give them an impossible problem (like one of these behavioral questions) and see how they handle it. They should not get too frustrated or upset, they should spend some time on it, they should come back to with refinements that attempts to make the question solvable, and they should give up if they can't find a solution. The really nebulous/impossible problems lead to the best discussions. Have a teammate ask these too so they can get to know the person's reactions.
Personally, I always want to get an idea for how they feel about duplicated code. This doesn't go for everyone, but for me--any duplicated code is unacceptable.
Ask about a project they were really proud of. Find out why they were proud. Are they proud they could code? (Meh) Was it because a customer appreciated something they did (perhaps a GUI invention?) Was it a technical solution that other programmers failed at? It'll tell you a lot about what they try to do with their code.
Personally I've always wanted to give an interviewee some code in their favorite language and editor and say "What would you do to clean this code up". Check refactoring skills, see if they would write tests, see if they solve a problem do they comment it. When they see something ambiguous do they ask what it's actually trying to do or guess? I've never done this because it takes too long to do during an interview--but I may try some day...
When you find a good person it's pretty rare. Although you can't always do it this way, it is nice to always be hiring, but very slowly. If you interview a person a week all year long, you might find one or two a year that are obviously BRILLIANT. It'd be nice to hire them even if you aren't really looking for someone.
Ramping up quickly isn't good for you, your project or your team--Your standards get lower and the number of people you can choose from is restricted.