We've published a number of articles on this topic, but from all the experts I spoke to my favourite advice about hiring came from a high-level recruiter.
His advice was to conduct a structured interview that answered three basic areas - 1) candidate's background, 2) skills & 3) reasons they should accept a position with your firm .
He recommended that in a 1 hour interview you spend 15 minutes on Q1, 30 on Q2 and the final 15 minutes selling your company (especially if you like what you heard in the first 45 minutes). Too often the first item takes up most of an interview, esp in smaller companies.
Tips for asking good questions: ask for concrete examples to back up claims made on the resume, for example, "Your resume shows that you have strong project management skills. Tell me about a project that you think best demonstrates how you were able to use those skills in your current position."
Challenge the candidate and probe further if they give weak, non-specific answers. A tough interview will help make a strong candidate more interested in working for you, as people like to rise to a challenge and succeed.
I also like to have a matrix that I use to score each candidate on relevant skills, with a range of n/a if they don't have any experience to 1-5 in terms of their sophistication. This helps maintain objectivity and is good legal documentation if someone ever challenges a hiring decision. (Not as important in very small firms.)
As for salary, I always try to have the candidate state their expectations first, even if that means bouncing the question back and forth a few times and waiting through some awkward pauses.
Thorough reference checks are critical. Listen carefully, as a former employer may try to tell you something negative in a very subtle, indirect way. Employers are unlikely to volunteer information about negative experiences, but will usually be honest when asked a direct question about a specific aspect of employment (punctuality, how the person got along with other team members, etc.).
The recruiter I mentioned above had an unusual approach to reference checks. He would ask the person for a list of bosses, peers and direct reports and then select randomly from that list to do your reference check. This may be difficult if the person does not want the current employer to know they are looking for a new job, but leads you to a much more realistic evaluation of the person than you'd get from hand-picked references.
As a final thought, don't go against your gut. I've done this in the past, trying to justify one small wrinkle because there were so many other things I liked about a candidate and every time I have regretted it. Case in point, we use a programming test for programmers to identify what they know (and where their potential weaknesses are).
One candidate I like failed the test badly and found myself trying to justify the reasons this could have happened so I could convince my partner to hire him anyway (he interviewed very well) ... only to have a eureka moment where I realized that the test was doing its job and had helped us screen out a potentially disastrous hire.