Successful Hiring07 Jul 2019
What are the best indicators of a developer’s ability to contribute meaningful work to your organization?
Ability to understand your product domain.
An engineer should be able to understand the Why, How and What of your business’ core product. They should quickly grasp core concepts and visualize high level models that represent those concepts.
Ability to digest domain-specific code and understand the limitations.
Given an example implementation of one of your domain’s core functional areas, a good engineer should be able to talk through some of the anticipated complexities inherent in the example code. They should be able to spot edge cases and foresee ways to break your code with unanticipated usage.
Ability to collaboratively brainstorm and communicate potential solutions to #2.
It is extremely important that an engineer can speak both intelligently and plainly about your product domain.
Your hiring process should mimic a pared down version of your onboarding process.
Write a product specification for an MVP version of your application. Outline a few typical use cases and ask the engineer to write a concise implementation of the domain model and exercise that model with tests. The code should prove they understand the different domain objects and the relationships between them.
Extract actual code and tests from your repository related to one of the more complicated functional areas of your application. Remove the implementation from a few of your methods, leaving just the method signature and remove a few other required methods entirely. Provide an interface for an dependent service but no implementation. Make sure to leave in code representing some legacy trade-offs to encourage discussion. Ask the engineer to fill in the missing implementation and expand the test coverage for edge cases. Ask the engineer to complete the implementation and add tests where they see fit.
Ask the engineer specific questions about your code samples from #2.
How might this break?
Can you anticipate a use case that is unsupported by this design?
What might you have done differently?
One final important cornerstone of your hiring process should be complete transparency. You should be completely open and honest about the state of your codebase, your backlog and your overall development environment. A new hiring should never be surprised by anything they learn during their first weeks at your company.