I’ve worked with a lot of good engineers and Yahoo! and other places. Recently I was thinking that a lot of the traits that make them great are borderline dysfunctional. Perhaps all good engineers are savants? When hiring, here are the traits I look for.
Good engineers are lazy.
After all, premature optimization is the root of all evil. Good engineers don’t spend their time dealing with things don’t matter and don’t spend time fixing things until they know what’s broke.
Good engineers are selfish.
When an engineer can scratch their own itch, selfishly building products to serve their own needs, they become highly motivated. The hardest part of designing products is figuring out what your customer wants. If you’re your own customer, the feedback cycle is exponentially faster and products mature quicker.
Good engineers are ignorant.
Sometimes all that’s needed to kill a good idea is knowing too much about the problem space. When you know all the existing solutions and all the constraints, you tend to reject new ideas quickly, thinking of 100 reasons they won’t work. Sometimes all it takes is a few tweaks to get around those constraints to solve a problem in a novel way.
Good engineers are paranoid.
If you’re not scared, you should be. There are lots of things to fear about programming, from hackers to bad passwords to accidentally deleting all your web pages. You know what’s really scary to me? While loops. One badly-terminated while loop can run forever and consume an entire server very quickly.
Good engineers are insecure.
Complacency is the death of a good engineer. As soon as you think you’re better than everyone else (you’re not) and stop learning, you start dropping in value. If no one’s reviewing your designs and code and telling you how very wrong you are, you’re never going to get lazy, just not the good kind of lazy.
Of course, taken to an extreme, any one of these attributes could make for a really bad engineer. The good engineers have just a little bit of each.