Thursday, August 4, 2011

Management Newbie: Hiring Developers

Uh oh! Two blog posts in 30 days? I'm on a roll!

I've now been in my job for a little more than two months. It's been pretty eventful as I try to absorb the custom code-base for our SharePoint environment and do some additional development work all while becoming a manager for the first time. The first manager reality I had to deal with was my lone developer resigning. There was no animosity, thankfully. He just found a position that he felt was better. While it's tough trying to do all the in-house SharePoint development as well as be PM and corporate manager, it could have gone worse (at least I didn't have to fire him. I'm not really looking forward to having to do that).

Before this "wrinkle," we had a Junior Developer role available that was open but we weren't actively looking. Now, we are actively trying to find two developers and are open to anyone (Junior, Mid, or Senior). We've had four candidates thus far as, apparently, the St. Louis area is a hotbed of SharePoint development. There's plenty of work to be done and not enough people to do it.

Somehow, I've never been on the "Interviewer" side of the table in my 6 professional years. Now, I'm not only on that side, but I'm hiring people that will report to me so I have to care even more than if they'd just be a peer. At first, I think I was more nervous than the candidates, but I'm finding a comfort zone now.

To give you an idea of how the process goes, we're now scheduling a 2-hour first interview where the candidate meets with the team (4 of us) as a group. The first hour is fairly non-technical and covers the cultural fit-type questions. The second hour is hands-on development testing. Other than FizzBuzz, I designed the other questions myself. I know there are other FizzBuzz-esque problems out there (ie Cash Register, bubble sort, recursion, etc.), but I figure remembering the modulus operator is about as academic as I need to be (I'll plan another post about my feelings of some CIS/MIS/CS degree programs and their value, or lack thereof). Well, except for a ByRef vs. ByVal snippet I ask for that I'll primarily use with the Junior candidates. I figure that should be something definitely in their heads (it should be in everyone's even if it isn't used much).

Assuming the team approves of the candidate, my boss, the CIO, will meet with him/her.

One thing I'm trying to avoid is asking for definitions. As a candidate, I loathed interviewers who would ask me to define terminology. There's so many terms that people should know as a .Net/SharePoint developer and I just don't see it as a way to gauge a candidate's ability to write code. Now, I know some of you would argue that if you can't define it, then you can't write it. I've done plenty of OO programming, but I always struggle to remember the definitions of Encapsulation and Polymorphism. Just because I can't define them, doesn't mean that I can't properly implement them.

The only thing close to a definition I look for is IDisposable. Developers as a whole should know about this interface, but SharePoint developers better worship it. I almost learned that lesson the hard way when I first started with SharePoint (looping through a Farm without disposing SPWebs and SPSites is WAY bad for performance). However, I don't phrase it as "What does the IDisposable interface do?". Rather, I ask one of two things:

If the candidate has SharePoint experience, I ask them to write a code block (not a whole method) that, given no context (SPContext), modify the title of a site at a given location.

If the candidate hasn't developed for SharePoint, I pose a similar question but using a SQLConnection.

As far as other questions, I took some ideas from some other blogs that I really liked. Here's a list of those resources:

Interviewing Developers - 20 Good Questions to Ask
How to Interview a Developer

I came up with another one that has a chance to provide some insight, but doesn't seem to be getting much traction yet. I ask the candidate to tell me the "Most recent/coolest/useful code hack/trick that you've learned." These don't have to be new ideas, just something he/she likes to use when it makes sense. I've had a few over the years that definitely weren't new to everyone, but were insanely useful to me (ie using blocks for SPWeb/SPSite, Source QueryString parameter, XML comments). I guess I've been wording it wrong, though, because the answers are more about products that people can't live without. That's not a bad thing as solutions like CodeRush, SharePoint Manager, and XML Spy are great tools, but it's not what I'm looking for.

I think that wraps up this post. I have another post that'll probably come soon that will focus on interview tips from, and to, both sides of the table.

1 comment:

  1. I'd like to answer your question about the best trick I learned recently.

    Context: SharePoint 2010 Development
    Goal: Create some site artifacts (custom list, site columns, etc).

    - Start by creating a blank site.
    - Use a browser and the UI to create new site columns, new list, assign site columns, ...
    - Save your site as a template (/_layouts/settings.aspx, Site Settings menu). This creates a wsp. **Optionally, include content!
    - Export the wsp from the solution gallery using explorer view.
    - Suck the exported wsp back into Visual Studio 2010. In VS2010, you can create a project from a wsp now!
    - Check the boxes of what you want in your solution. Simply awesome!! Dev time down, production up.