Recently at work I got asked a couple questions at work about some hiring techniques that we might be implementing. I guess my company is defining and implementing a new hiring practice around the idioms presented in Who: The A Method for Hiring and they wanted my input on a couple of the steps they were batting around. I can’t say I’m for or against such an intensive, well defined hiring pattern yet, because it hasn’t been used yet and I haven’t really been that involved, but it did spark my interest in how I would hire a new developer today if given the chance.
What popped into my head is the “Tell Me Everything You Know…” methodology. My goal when I would interview somebody is to, in the shortest amount of time, figure out everything this person knows about technical things that indicate if the person is a standout developer or not.
Here’s the basic interview structure:
I’d tell them we were going to have a series of 5 minute conversations and in those 5 minute conversations they were supposed to tell me everything they know about whatever I asked them. Rather than taking notes, the conversation is recorded because this is going to happen way too fast for me to write anything down. Plus, I’ve found out over the years that notes I’ve written about most things are incomplete and tend to stall conversations.
What I’m going to be able to tell during this conversation is if they can communicate effectively, context switch quickly, respond to a bit of pressure, and if they have the technological chops I’m looking for. I’d say that the last one is the most important, but in my company if you can’t write a good email or switch your focus quickly, you’re kind of useless. This is the extend of how I would hire a developer. It sounds simplistic, but in my head it works.
Here’s my list of topics that I’d ask about. Everyone’s will be different, but these are ones that are important to me.
Tell Me Everything You Know About …
- Websites
- HTTP
- HTML
- Standards
- CSS
- DIV vs. Table Layout
- JavaScript
- AJAX
- JSON
- Content Delivery Networks (CDN)
- Verbs: POST, PUT, GET, etc.
- SEO
- Sessions
- Page Design
- Network Communication
- TCP
- HTTP
- Stateful vs. Stateless
- Portable Data Structures
- XML
- XSL/XSLT
- JSON
- Object Oriented Programming
- Interfaces
- Classes
- Polymorphism
- Inheritance
- Is-A vs. Has-A
- Data Structures
- Development Patterns
- Factory
- Strategy
- Observer
- Command
- Assembler
- Facade / Adapter
- Builder
- The .NET Framework
- Major improvements between versions
- ASP.NET
- ASP.NET Control Lifecycle
- ASP.NET AJAX
- Debugging
- Compilation
- Runtime
- IL
- Garbage Collection (Disposal, Finalization)
- WCF
- Win Form
- WPF
- SilverLight
- WF
- Generics
- Linq
- Object Initializers
- Delegation
- Anonymous Types
- Visual Studio
- Software Engineering Lifecycle
- Discovery
- Task Estimation
- Requirements Gathering
- Rapid Application Development
- Iteration Development
- Software Maintenance
- Software Deployment
- Short term vs. long term wins
- Databases
- SQL
- SQL Server Data Types
- Indexes
- Query Performance
- Storage (trees)
- Storage Technologies
- SANs
- NAS
- Testing
- Unit Tests
- Black Box vs. White Box
- Load
- Requests / Second
- Cloud Computing
- ProgrammingTools
- Visual Studio
- Fiddler
- Firebug
- Web Developer Toolbar
- Yslow
- IE Developer Toolbar / IE8 Integrated
- Website Performance
- No. HTTP Requests
- Compression
- Images / Sprites
- Tables
- Content size
- JavaScript Execution Engines
- CDN