Thursday, May 19, 2011

Things I Take For Granted

I work across a variety of spaces and with a variety of teams. Development teams, test teams, support teams, and the like. I've also hired for all of these kinds of teams, and noticed that the things I look for fall into three categories:

skills I absolutely need this person to have

skills I would like this person to have but can get by without

skills that I didn't even consider because, honestly, I just assume they're there

The first two categories are fairly straightforward. The "must have" skills are usually things that our teams needs and that no one on the team currently has or can pick up easily. I'm filling a hole with these skills. The "nice to have" skills are the ones that I have some coverage on or that I'm okay with learning on the job. I'm shoring up the overall team strength with these skills.

Then there's the third category: the things I just assume you can do. These are the "Engineering 101" skills that I don't even put in the job description because I think of them as so integral to any engineering job they're not even worth mentioning.

Nevertheless, I invariably get candidates who don't have these skills and who don't seem to find that odd. So, forthwith, here are the skills I'm going to assume you have if you call yourself an engineer. These are the baseline requirements:

The ability to work with source control (I don't much care which SCM)

The ability and willingness to work with a requirements tracking and defect tracking system (again, I don't care which one or even that it's electronic. Boards are fine. Just show me you understand the software development lifecycle and are willing to work within it.).

The ability to explain a piece of code (or a test) you wrote to another engineer.

The ability to modify a piece of code (or a test) written by someone else to change or enhance its functionality.... without rewriting it entirely.

The ability to explain a design to another engineer (test design or software design).

For developers, the willingness to write and run basic tests in an appropriate test framework (e.g., rspec or junit).

For testers, the ability and willingness to deploy a system for your own use, given reasonable instructions.

In other words, I take the ability to work on a software engineering team for granted. After all, when is the last time any of us worked alone?