A Complete Guide to Getting Hired as an iOS Developer

Or How not to Waste Two Thousand Hours of Your Life

Rob Caraway
10 min readJul 17, 2018

--

Updated for 2020

I got rejected from a job I drained three and a half months of energy toward.

I learned it all. The company’s everything was to become my everything. I could tell you about basically everything each founder published online.

I romanticized. Like, so much.

Imagine me writing a massive blog post, pack filled with actual code and working examples on how to improve their app. Because that’s what I did.

Despite investing all my free energy, I said out loud acquiring the job was NO gimme. I didn’t believe that, but saying it felt comforting.

After finally getting their attention MONTHS after setting my sights on them, I had a fantastic call with their CTO who invited me try their coding challenge.

I spent a week making it PERFECT, and their team was impressed. My confidence was high and I felt secure.

Then, I took their paired programming test.

Two days later, I got a rejection email. Not a good fit, they told me. Over two thousand hours to learn a one hour lesson.

I collapsed on my couch. They were right. I didn’t REALLY fit in to their needs — I’d only spent months convincing myself I did.

It’s easy for me to see how ludicrous and risky my behavior was in retrospect. I guess old me feared rejection and wanted to do everything he could toward reducing that rejection.

Most of us probably deal with the opposite energy — by sending out our resumes en masse to every company possible. And getting zero responses.

After my awful rejection, I wised up (as if I had a choice). I developed an actual strategy, and got hired as an iOS developer at a company that I was ACTUALLY a good fit for.

What this guide aims to accomplish:

The strategies I outline require no prior network and are for those app developers who are looking to get full time work. While you don’t need to know anyone, knowing how to communicate and sell yourself helps.

You’ll need a body of work — meaning any or all of:

  • Apps you’ve launched available for download
  • Open source projects you’ve launched or contributed to
  • Content you’ve generated as a thought leader in the area
  • Or other related work experience

I can’t help you sell yourself if you’ve got nothing to sell.

By the end of this guide, you’ll know what it mostly takes to get an iOS job at a company that builds consumer facing apps.

For context, about me:

I’ve been programming apps since iOS4. I have no college degree. I’d never had a full-time job, and I’d never worked in an “agile” environment or with a big team.

Many companies turned me down for my zero big team, no college degree resume.

But I wasn’t going in empty-handed, either. I have achieved 1 million downloads with my own apps. I’ve cofounded a startup, and I’ve worked with some cool clients as a freelancer. I have decent public projects that show off my skills.

I got hired working in a major tech market (Austin, Texas) but was getting job opportunities from remote jobs, too. I got hired in a senior role. This will help junior and mid level programmers, too.

Before we jump into the heavy stuff:

My number one rule to eventually getting hired is: Document Everything!

Taking notes on a company, tracking which resumes and cover letters work, and taking notes after each interview will help you get better faster.

Nailing your iOS Resume

Not tryna reinvent any wheels, so if you’ve got the time, read the guide to writing developer resumes here.

If you ain’t got that kinda time:

A slightly tweaked version of the resume I used to get hired:

Your resume should be simple and readable. List your accomplishments in an easy to read format, prioritized with what makes you look the best.

Your resume should have:

  • Education (if degree obtained or important classes taken)
  • Work experience
  • Open source (provide links)
  • Your apps (provide links if possible)
  • Most relevant technical skills (keep it minimal)
  • Anything else noteworthy (clubs you were in, developer meetup you founded, hackathon you won)

Do not mention if you’re senior or junior level. Let your resume speak for itself.

Keep several versions of your resume. Each version should try to tailor the descriptive details in a way that cater to each company’s personality.

You’re not going to lie. Write it in a way that sell the parts of you that the company is looking for the most.

Others Ways to Get Ahead

Build a great personal website.

Your website allows expression in a way your resume may not. Check mine out. When I walked into InMotion Software’s office, they had my website’s about me page pulled up. They hired me a few days after.

Here’s another good website example. Keep it clean and try to express exactly what you’ve done in a way your potential employers want to hear.

If you have to lie, you’re probably trying to reach for a position you’re not qualified for. That’s okay. Adjust your expectations and recalibrate.

If you’re not great at web development, stick to building your website on something like Squarespace or Wordpress.

If you know web development, build your own site. Mine uses Node.js and Hexo. This shows I’m comfortable jumping into other areas of code if needed, which can’t hurt your employers to know.

Build a strong LinkedIn profile.

You’re hurting yourself if you think LinkedIn is “lame”. I got several opportunities through LinkedIn.

As of Mid 2018

Take a look at mine, for example. You don’t need to be an expert: I only started really working on it last year.

Keep it current and have a good photo of yourself. I took a photo I use as a selfie. Get a photo editor app and touch it up. Practice taking good photos.

Add specific keywords to your profile that help you appear in searches you want your profile to show up in.

Imagine if you live in a less competitive area than Austin — you can probably stand out pretty fast.

Applying for Jobs the Smart Way

Here’s some great ways to find iOS developer jobs:

  • Check Angel.co jobs (check your area, and “Remote OK” jobs)
  • Google “iOS Developer jobs [PreferredCity]” Google, Glassdoor, ZipRecruiter and Indeed will pop up with relevant results.
  • Google “remote iOS Jobs”
  • Check the stack overflow boards if you have a decent profile
  • Same with Github.
  • Search LinkedIn Jobs for iOS developer
  • Network at related tech events

One last good spot — usually cities will have a local tech website. Austin has BuiltInAustin. I actually found the post for the company I currently work for through this board.

Keywords to use in your searches: Mobile, App, iOS, Swift, Developer, Engineer, Programmer, Remote, Architect, iPhone

Keep a list of the jobs in a document (I used apple notes) that you like.

Takes notes on their website, their app, their glassdoor reviews, and any other bodies of work to see what you like (and dislike) about each company.

Find a pace for applying that feels sustainable. You want to have enough time to do some basic due dilligence.

I found applying for about two to three companies a week worked best for me, but if you’ve already got full-time work, you might apply every two weeks or even slower — that’s okay if you keep at it.

Think about what gets you excited for each company. You may not be entirely passionate about the product they make, but instead you love the technologies, culture of their company, what you might learn, or the people they help.

Writing the cover letter

After you’ve researched, you’ve probably noted things you like about the company. Maybe something they specifically mentioned in their for-hire ad resonated with you.

Use these to express how you could be a great fit and how you want to hear back from them.

Keep it somewhat casual. No one wants to be put to sleep with corporate jargon and 500 words of nothing.

Take the positives you mentioned when taking notes on the company, and bring up one or two things that caught your attention. Mention why you think you’re qualified very briefly, and be on your way.

Here’s a cover letter I used that got me a phone interview:

Notice it even has a typo 😂(though I don’t recommend doing that)

Notice how I framed my lack of experience on teams — as something I was eager and excited to overcome (which was true).

Like your resume, keep track of several versions of the cover letter you used and be mindful of which worked and which didn’t using a spreadsheet.

Preparing for the coding challenge

A coding challenge is a small exercise you can do on your own time (with a loose deadline usually) that tests your knowledge and coding skills.

The coding challange will usually consist of one or two view controllers, and leverages one or two relevant technologies (like networking and core data).

I’m not about to spill the beans of all the companies EXACT coding challenges, but I’d imagine even the companies I applied would appreciate if more candidates were prepared and knowledgable about what they want you to know.

So without getting too specific, here are some key things I worked on in the several coding challenges I took:

  • AutoLayout and Autoresizing views
  • Adjusting Text Size to fit different screens (Dynamic Text)
  • Making network calls to a basic API
  • Using TableViews and CollectionViews
  • Persisting Data with Core Data, UserDefaults, or Archiving
  • Know how to use storyboards, but be prepared to write your views and controllers programmatically
  • Size classing
  • Loading Images asynchronously and displaying them on main thread
  • Adding infinite scroll to a tableview or collection view
  • Modularizing your code well. Don’t just stuff everything in a view controller. Know how to build immutable models and service layer objects.

These same items above may also show up in an Interview.

You won’t be able to write perfect code. That’s okay:

Whenever you write code you know is imperfect, stick a //TODO or //FIXME statement with how you would improve it to show to the team you know what tradeoffs you had to make.

You’re also being tested on your ability to make a product people might like, too. If you know how to make it ultra fast, smooth, and pretty, do it even if they don’t require it (and you have time) unles they say otherwise.

How to Approach the Pair Programming Challenge

Not every company will do this part, but its worth being mindful of.

For pair programming, you’ll likely either be working on code that you created in the coding challenge, or with assignments that are similar to the type of code that the company wants you to write.

Unfortunately you can’t really “fake” this portion. You have to trust your instincts here because you won’t be able to change how you behave immediately around another person you don’t know.

Don’t stress, and have fun during the assignment. If you feel it didn’t go well afterward, take notes on what you could do better.

If you’d like to practice, work on some projects next to a friend. The more often the better.

Nailing The Interview

The topics you’ll have to be prepared to talk about:

  • Big O Notation. Examples of Big O in Swift / Obj C
  • Data Structures.
  • Creating a LinkedList in Swift (just in case)
  • Struct vs. a Class in Swift
  • Know how Swift Standard Library data structures work (at a basic level)
  • MVC, MVVM
  • Code you wrote in the coding Challenges or:
  • Code you might write to solve a problem similar to problems the company faces
  • How your interests and goals align with what the company is trying to do
  • “Where you see your career going in 5 years” will likely come up

Building interest in a company is often times a “fake it till you make it” situation. The more you research and figure out the ways you can meaningfully contribute to a company, the more your interests will begin to “magically” align with them.

Don’t force it too hard though — companies with awful Glassdoor reviews and a sporadic mission are almost always worth avoiding.

From what I noticed (though not an absolute rule): The bigger the company, the more academic the interview will seem. Prepare for a lot of “Gotcha!” questions and problems from a Big N company.

If you’re applying to a really big company: use Leetcode.com, and if you can afford it, pay for premium. You can then sort the problems you work on by which company will use them.

Leetcode even has practice interviews for certain big companies which is huge!

I’ve personally used this with an interview I did with a FAANG company and every single problem they used, I’d previously seen in Leetcode.

Small companies usually will will avoid algorithm problems most of the time — they want to know that you can solve the specific problems that you work on, and often they want to know you can wear multiple hats.

Other important ways to prepare:

Final thoughts

Find the balance between obsessing over one job and not caring at all which job you get.

If you stick to the process, you will get better — the resume I got hired with looks completely different from the one I started with. I learned to handle interviews with a way more nonchalant attidude.

Let the process gives you wings. You get better with every rejection, so reward yourself for improvement, not whether you got the job or not.

Finally, if you live in the Austin area: InMotion Software is hiring! :) I’ve had a lot of fun working with them.

Learn how to make amazing apps and more

If you got value out of this article, Rob Caraway writes detailed guides on app development, entrepreneurship and building a great developer career. Get notified by signing up here. Thoughts are his own.

📝 Read this story later in Journal.

🗞 Wake up every Sunday morning to the week’s most noteworthy Tech stories, opinions, and news waiting in your inbox: Get the noteworthy newsletter >

--

--

Rob Caraway

1M Downloads achieved, iOS vet. Learn to master the app development business: www.robcaraway.com.