A guide to evaluating and hiring a software engineer