Write your job descriptions for developers, not your business. The critical facts for an iOS job include the hiring business's name, the job title, a salary range, the benefits, the location, and the experience desired. Put that information as close to the top of your job description as possible.
If you insist on describing your company before selling the job, keep your writing tight and as brief as possible. Explaining your business and your culture will help candidates decide to apply. Add your three-page essay on your business values after the critical facts.
Finding an iOS developer means making it easy for candidates to discover you. Traditional job boards like those on Stack Overflow or We Work Remotely will help you find candidates, but you can go further. Use your networks. Share the job on social media accounts, ask your current employees to spread the word, and send an email to your friends working on iOS apps outside of your company. If you mention the @hireanappdev account on twitter and meet my posting criteria, I will probably retweet you.
The minimum hiring communication includes a brief job description and a way to apply (or a link to the same). One reason many outside recruiters fail to find quality candidates is a reluctance to share the name of the employer. Skilled app developers choose their employers with care. They regard anonymous employers with suspicion.
Once you start getting job applications, you need to identify the best candidates. As much as possible, this process should focus on skills and experience. Intelligence, Computer Science trivia, and "culture fit" might seem like a necessary part of the process. They're not. Remember: the number one qualifier for an app developer is building apps.
To start, only look for resumes to confirm that the candidates appear to match your hiring criteria from the job description. Reconsider your plan if you find yourself tossing out resumes that meet your job description. You've written a misleading job description, or you're applying some sort of bias to the process. If that's the case, you need to go back to your job description.
I suggest resisting any bias, or "pattern matching," often a synonym for prejudice. Sometimes the most unlikely candidates looking have the best skills. Likewise, candidates listing fancy schools or big tech names on their resumes sometimes prove disappointing. Hiring a great app developer requires a focus on app development skills.
The first review of resumes should only eliminate apparent mismatches. If you're looking for a Senior iOS developer, and someone with only Java experience applies, you can safely remove their resume. Avoid eliminating candidates lacking experience at a famous company, or for having an unusual educational background. Superficial criteria, like former employers or exclusive degrees, can lead you astray.
At the end of your screening process, feel free to rank your candidates. However, if you have less than 20 candidates, it's probably not worth your effort to sort. Depending on the quality of your applicants, expect to contact 10-40 candidates to continue the hiring process.
Your next step involves contacting each candidate who meets the expectations of your job description. I suggest personalizing each email at least somewhat. A simple template for contacting your candidates might read:
Thanks for applying to our Senior iOS Position! Based on your resume, it looks like you have the skills we need! As a reminder, here is a link to the job description along with the salary and benefit information: ...
We hope you're still interested in moving forward in our interview process. From this point, the interview process includes a coding challenge and a phone interview to discuss your solution. If that goes well, an on-site interview (travel and expenses covered) is the next step. Finally, if that goes well, you'll receive a job offer.
The details of the coding challenge and how we score it are linked here ... The coding challenge should take no more than two hours for most developers, and we hope it will be fun.
The key to hiring a great app developer lies in the coding challenge. Many developer interviews focus on brain teasers or memorized computer science facts; this makes no sense. The secret to hiring a skilled app developer is making sure they can develop apps!
In other words, a well-crafted coding challenge asks your candidates to build an app using the same skills they will need in your business. Instead of examining unrelated skills (puzzles and memorization), you look at the precise skills you need. Makes sense, right?
If you're building an app that connects with a web API and lets the user search for results, make your app challenge reflect those skills. If your app uses concurrency, include concurrency. Explicitly tell your candidates your criteria: "we expect your solution to keep computation off the main thread where possible."
Calibrating the difficulty of a coding challenge is a balancing act for your business. On the one hand, it should be challenging and unique enough that it isn't dull or trivial to implement. On the other hand, it shouldn't require more than an hour or two of your applicant's time. Companies that expect a candidate to spend hours of their free time completing a challenge will seem inconsiderate.
When constructing your challenge, I suggest keeping it focused, fun, and not useful for your business. Keep it focused, so the candidate knows when they've solved your challenge. Keep it fun, so the candidate doesn't think you're a soulless, life-crushing employer. Make sure that it doesn't seem like work usable in your product so that you don't look like you're getting free labor from the candidate's hard work.
Keep your requirements for the challenge focused on the position you're trying to fill. Asking a candidate to write code that isn't in an app is a waste. Asking app developers to struggle through your standard "fizz-buzz" command-line program challenge makes no sense.
Also, be careful not to require the use of tools or technology a candidate probably won't know. For instance, I've worked on coding challenges that required the use of a buggy and poorly-documented internal UI toolkit. The experience wasn't fun, and I had doubts about working somewhere that built and used such inferior technology.
An example coding challenge might be:
Acme Coding Challenge - The Boot Hunt Using this API ..., build an app to allow users to search for boots for sale. The UI doesn't have to be fancy but should provide a place to enter search terms, and show a scrolling list of results. You should use the RESTful API documented later to fetch the data your app needs.
Your app should be written in Objective-C or Swift. Feel free to use any open-source libraries to make your life easier. Make sure the app compiles on the latest version of Xcode, works on the newest released iOS version, is resistant to crashes, and has proper documentation. Send us the complete source code. We will evaluate your efforts for reliability, readability, and performance. We don't expect a fancy custom user interface, although it should mainly comply with Apple's HIG.
To score each coding challenge, you need a senior iOS developer to evaluate each submission. They should look for sources of crashes (e.g., force-unwrapped variables), readable coding style, error handling, proper concurrency, and so on.
Don't expect perfection from a candidate's submission, but look for a demonstration of proficiency.
Interviews can be held in person or over the phone. The meeting has several goals:
After introductions, confirm the candidate solved the coding challenge. I suggest asking questions about the candidate's code and then requesting that the candidate make some minor changes. Your requests should be somewhat trivial and not intimidating. It could be as simple as asking them to change a color or a layout. You should let the candidate use their preferred tool on an actual computer to do the work (i.e., AppCode or Xcode).
Once you're comfortable that the candidate wrote the solution to the coding challenge, the next step is to discuss some relevant technical topics around app development.
And so on. These questions also offer an opportunity to test their verbal communication and collaboration skills.
Finally, you should be prepared to explain how your organization works. The candidate may want to know how you manage source code, your QA process, how you promote people along your career track, and so on. The candidate should have ample opportunity to interview you and your team. The candidate's questions will also help you understand their interests.
Once you've narrowed down your candidates though screening resumes, coding challenges, and an in-person interview, you should ask for references. For a senior or junior developer, you should ask for at least one recommendation from a colleague that has worked with them in an app-development capacity.
Like every other aspect of the screening process, communications with the references should focus on specific job skills. For example:
Pat listed you as a reference for a senior iOS developer role at Acme (link to the job). Can you comment on Pat's abilities concerning:
- verbal and written communications
- collaborating with other developers, managers, and QA engineers
- developing iOS apps in Swift
- debugging and technical analysis skills
The final step in the hiring process is making an offer to your top candidate. You should expect that many candidates will want to negotiate the salary or other aspects of their employment. Offering at the top of your range may seem generous to you, but it may frustrate candidates. If you refuse to change any aspect of your offer, it can lead to resentment from candidates who have a strong expectation of negotiation. Your candidate may also believe that you are not an empathetic or accommodating employer.
Even if you have a mind-blowing offer, experienced negotiators will believe that your first offer isn't your best offer. Regardless of their negotiation experience, your candidate may also have different priorities for their compensation. While you might value equity, expect their preferences to differ. They might crave health insurance, vacation time, or a salary at the high end of market rates.
You should consult with an expert in local employment law before making an offer. The critical information to include in a job offer is:
After giving your verbal offer, be prepared for the candidate to respond. They may request a better offer, accept, reject the offer, or ask for time to contemplate the offer. If you're a skilled negotiator, you probably know how to react to these. If you're not an experienced negotiator, treat your candidate respectfully and in an understanding fashion no matter how they react. Rejections, for instance, might indicate a desire for a better offer.
If the candidate accepts your offer, then you're done! If the candidate asks for time, set a time to follow up, and look for follow up questions. You probably will negotiate the offer in a few days.
If the candidate rejects the offer or asks for a better offer, you're negotiating! Asking for a better offer is better news than a rejection. In either case, you should ask for details so you can decide what to do next in your negotiations.