On October 19th, I’ll join Apple’s Developer Tools organization as an engineer. Looking back, I feel like this journey started 10 years ago, although at the time I neither knew that I’d actually end up at Apple, nor how long it would take. This is a summary of my “journey” until now. Maybe it helps someone or is helpful for someone just starting out as an idea how things can go. And if you are looking to work at Apple it might be an inspiration to not be discouraged, just because you didn’t get a response to your application or got a rejection and to just try again.

Disclaimer: Of course, everything in this post is my personal view and experience, your experience may differ (a lot). I’m also writing this before I’ve actually started at Apple, so I have no inside knowlegde of Apple’s hiring process or policy and will only describe my experience and impression as a candidate.

2010: Starting Out With Objective-C and Xcode Development

About 10 years ago, I had just returned from studying abroad in the UK1 and was looking for what I would do for my bachelor’s thesis. I was looking for an advisor for my thesis and a job as a student assistant and found both at the chair for Media Computing and Human-Computer Interaction at my university. I had dabbled with Objective-C a bit before, but my student assistant job was the first time I actually wrote an application for macOS2.

2011: An Xcode Plugin for Call-Graph Navigation

After having worked as a student assistant at the chair, I found a topic for my bachelor’s thesis: A code navigation plugin for Xcode 3. At the time, Xcode had an unofficial and undocumented (iirc) plugin API that was working pretty well. Another student had used it to develop a call-graph navigation tool and I took their project and developed it further and created a new UI representation to see whether it would work better.

A screenshot of Xcode 3 running on Snow Leopard with a split view showing the editor on the left and a custom plugin on the right. The plugin-view contains a stack of methods with the currently displayed method in the editor highlighted in the plugin view with a darker metallic background. All methods preceding and succeeding the current method in the stack have arrows on the left and right indicating that they can be exchanged for other callee/caller methods and each stack-level has a page indicator showing how many methods there are on this level. The different "frames" of the stack are connected by little buttons with an icon showing showing on arrow branching of into three. In addition, a popover HUD-like view is shown pointing to one of the buttons connecting two frames. The popover shows a list of all methods called by the originating method and thus allowing a quick-selection of a method without stepping through them via the arrow buttons.

2011: My First Application at Apple

I figured doing an internship in the Developer tools group would align very well with my interests and would be a great continuation of my bachelor’s thesis. Of course, this is much easier said than done. Luckily, another student, who was working at the same chair I was writing my bachelor thesis at, had just completed their own internship at Apple and introduced me via email to Matthew Firlik, who was already heading the Developer Tools Group at the time3. So I sent an application to Matthew directly, who then referred me to one of the recruiters. I don’t remember what exactly happened afterwards and wasn’t able to find all the emails anymore to piece it together, but long story short: It fizzled out. I believe I had contact to a recruiter, but it didn’t lead anywhere, but I also didn’t get a clear rejection either.

2012 - 2016: More Applications

Sadly, this is representative of my general experience with applying at Apple: If you manage to get hold4 of one of the actual engineers/managers in the team or organization you want to work at, they are usually very nice and helpful. They’ll answer questions and offer to forward your resume to the hiring manager or submit it to the internal referal system. But then you are basically stuck at the top of the funnel with all applicants again and there is only a slim chance you’ll make it to any of the interesting steps like a phone interview and most of the time you’ll simply hear nothing about your application, even if you sent it to an actual human via email. Once they’ve entered your resume into the pipeline, they also don’t know what the status is and won’t be able to give you feedback about it, until the resume comes across their desk again for setting up a phone interview.

The only time this is different is if you manage to contact the hiring manager for the position directly and you somehow convince them that you are such an interesting candidate that they should set up a call with you directly without going through the recruiter and basically take the recruiting process into their own hands5. But of course, this will rarely happen. After all, each position at Apple likely gets hundreds of applicants and there is a reason the hiring managers work with a recruiter: It’s a lot of work to manage all the applicants and their state in the process and the hiring managers still have other work to do.

For one application, I had actually talked to the hiring manager via Twitter DM, sent them my resume via mail and they then sent it on to the recruiter to be considered. After not getting any feedback regarding the status of my application, I checked in with the hiring manager a month later. They told me I was still in the “waiting to be reviewed” state, but they didn’t have more details. Three months later, I saw them post the same position again and checked in again. They apologized that they didn’t know what happened to my original application, as they are “at the very end of the firehose” of applications and as such don’t have good visibility of the state of every single application. As I said above: Individually, most people are nice and try to help, but even the hiring managers don’t necessarily have a good overview of all applications for a position as that’s the recruiters job.

And while it’s basically the job of the recruiters to keep track of all the applicants and make sure they are all considered, they usually manage more than one position at a time in parallel, which means they’ll likley deal with thousands of applications at any given point in time. And from what I’ve heard Apple’s internal HR/recruiting software is just as good as everybody else’s, which is: not very good. If you work at a large-ish company, think of the last time you had to plan your vacation days and the software you had to use to do so: This is what candidate management systems are like and recruiters have to deal with them all day.

It’s very frustrating to get “lost in the pile”, but it’s likely to happen, even if you had a direct contact to someone from the team or the hiring manager or got a referral. And if you applied just via uploading your resume via jobs.apple.com for a specific position there is a good chance no one apart from a recruiter will ever look at your resume.

After my first application for an internship, I applied again for a set of positions after I finished university in 2013, this time full-time and applying by uploading my resume via jobs.apple.com. For those, I don’t think I ever got a reply apart from the automated system email “Thanks for your interest in Apple” confirming my submission. After that I got into a habit of checking jobs.apple.com every one or two years for interesting positions and applying to them. But nothing ever came of it until 2017.

2013: Joining a Small Agency

As the Apple applications didn’t work out, I joined a small agency after getting my master’s degree in Computer Science. We worked on mobile apps (mainly iOS in my case) for businesses, with a focus on internal use-cases. I was able to work with clients directly and enjoyed using the newest technologies due to basically starting a new project every couple of months.

2015: Joining XING

While I enjoyed my time at my first job, my main issue there was that I didn’t have any other iOS developers as colleagues, so I felt limited in learning more about iOS development. This is why I started to look for a job in 2015 and ended up at XING. For those of you who haven’t lived in Germany: XING is basically Germany’s equivalent of LinkedIn and has one of the largest iOS teams in Germany. I worked on the team that was responsible for some of the “premium” features of the app and maintained the “Upsell” flow, which was used to sell subscriptions to users6.

2017: My First Actual Apple Interview

In 2017, I once again applied for a set of positions. I found some old confirmation emails from back then and here is the (potentially incomplete) list of positions I applied for7:

  • Authoring Tools Engineer (Swift)
  • Contacts Frameworks Software Engineer
  • Design Tools Engineer
  • iOS Application Engineer
  • iOS Developer for Maps Transit
  • Mail UI Engineer
  • Privacy Engineer
  • Swift iOS App Developer
  • User Experience Prototype Engineer
  • User Experience Application Engineer
  • Documentation Frameworks Engineer
  • Design Tools Engineer
  • Playgrounds Engineer

A couple of those I found via Apple engineers/managers posting them on Twitter and contacted them this way. For a couple others friends at Apple referred me. For some I simply uploaded my resume. And this time I actually got an invitation for an initial phone interview for a single one out of those 13 applications, specifically for the “Documentation Frameworks Engineer”.

It was mostly a “getting to know each other” phone interview with the hiring manager. I felt it went reasonably well, but after the call I got feedback from the hiring manager that I wouldn’t be a good fit for that position, but that they had a good impression of me and would like to recommend me for another position within the Developer Tools group: Interface Builder Engineer8. I excitedly agreed, as Interface Builder was and is one of my favorite parts of Xcode and I also felt like this was a better fit. And this is how I ended up with my second initial phone interview.

The phone interview for the Interface Builder position also went well, according to my impression. I had a nice chat with one of the engineers from the team, as the manager couldn’t make it. After the call, I got the usual “the recruiter will be in touch with next steps” feedback. But I never heard of the recruiter. I reached out to the recruiter one or two weeks later, but didn’t get a response. After reaching out to them a couple more times over the following weeks but never getting any response, I gave up. To this day, I don’t know whether I didn’t pass the initial interview and just didn’t get a response, whether the recruiter maybe left Apple, or whether my mails somehow simply got lost in the candidate management system. So again, this application fizzled out.

This was even more frustrating than my first application, as I had made it at least to a phone call and talked to an actual human. But having done a couple more interviews with Apple since then, I can at least say: This not representative. Normally, when you made it to a phone call, you’ll get some feedback. I did so for the previous interview and again for all interviews I had with Apple since then.

2018: Joining Yelp

As Apple didn’t work out I looked for my other options and ended up joining Yelp. At both XING and Yelp I felt like I learned a lot less about iOS development than I expected and a lot more about all the everyday challenges of software development in large teams, like estimations, communication, figuring out what your predecessor did, not building the same feature twice in different teams, etc.

At Yelp, I was working in a lot of different teams. I started out working on a team that was generally responsible for the Yelp Business Owner app. Later, I joined an infrastructure team, responsible for the networking side of both the mobile apps and the backend. We maintained the networking libraries on both sides (app + server), discussed how to transition our infrastructure to GraphQL, etc. For internal reasons, this specific team got dissolved and I ended up briefly working on a team responsible for the login and business claim flow in the Yelp Business Owner app. Before I left, I worked as a Python backend developer on a team responsible for some of the internal admin tools Yelp’s customer support is using.

2020: A Surprisingly Good Year (for me 😬)

While I was reasonably happy at Yelp, I continued applying for jobs at Apple from time to time, as I still wanted to get back to work on Developer Tools, ideally at Apple. Again, I found a couple of positions to apply for and this time I actually got a response for two of them:

  • Software Engineer, iWork Charts
  • Performance Tools Engineer

For the iWork Charts position, I had an initial phone interview, which went well, followed by a technical phone interview. For this one, I was asked to solve a relatively easy array-based programming question9 that I struggled to find an efficient solution for. I had not practiced any of these types of “coding challenges” as I figured I’d either get a real-world like task or it would be more of a technical conversation instead of Leetcode-style challenges.

Maybe due to that, maybe due to other reasons I got a rejection for the iWork Charts position after the technical phone interview. But even though the result obviously wasn’t what I wanted, this felt like a nice process. I enjoyed both the initial chat with the hiring manager and the technical phone interview and it only took two business days from the technical phone interview to the final response.

Luckily, at the time I got the rejection for the iWork Charts position, I had already started a conversation with the hiring manager of the Performance Tools Engineer position. We had a similar initial phone call as the one for the previous positions and afterwards agreed to schedule a technical phone interview. The phone interview was again about a coding challenge using CoderPad, but this time it felt less like an artifical Leetcode-style question and closer to reality. It was still rather artificial, as I was asked to implement some string transformation using the raw bytes of a string without using the already existing Swift standard library function for the same transformation, but it felt like it was more about getting to a correct solution and less about finding the optimal one. Also, it was simply easier for me, personally, as the hard part was understanding the unicode structure of a string and I was already familiar with that.

After passing the the technical phone interview, we scheduled a “virtual onsite”. This is the part where you’d usually fly over to the US, but due to COVID-19 we simply did all of it via video calls. In my case, it was basically a full day of interviews with 4 technical interviews (each 50 minutes) followed by 3 “manager” interviews (each 30 minutes) with the hiring manager, the Sr. Engineering Manager and the Sr. Director of Engineering. After my experience with the technical phone screens, I expected the 4 technical interviews to be basically 4 different coding challenges, but that wasn’t the case at all. Only one of them had a Leetcode-style task to solve (this time about traversing binary trees), but the other three were really just technical conversations, that I thoroughly enjoyed. Among other things, we talked about implementation details of the prototype I built during my master thesis, how debuggers and breakpoints work under the hood, the UI design of instruments, how to find retain cycles in memory and display them and how to heuristically determine what the “start” of the retain cycle is, etc. I want to emphasize that I didn’t actually know all of this in detail, e.g. I didn’t know how one would implement a debugger. But I had enough of a general idea of how things work to ask the right questions or come up with a reasonable theory to discuss.

From what I can tell, every organization or maybe even every team at Apple does hiring in their own way. Some teams seem to use Leetcode-style questions. Some do coding challenges. Some simply have technical conversations or ask some technical questions to test you. Some use brain-teasers. While both technical phone interviews used CoderPad, one used the integrated CoderPad video chat functionality while the other used FaceTime for Audio + Video. Most initial calls where done via FaceTime, but some managers called with audio-only, others used FaceTime video. Recruiters tended to go with audio-only. I had 4 technical interviews and 3 manager interviews as part of the virtual onsite, while a friend of mine who applied to a different org had only 3 technical interviews + 1 manager interview. My technical interviews were all independent of each other while my friend’s technical interviews where connected and all about the same example app they had to develop beforehand. Overall, there seems to be a lot of variety, which is yet another reason not to give up because one specific team rejected you one time. Maybe you fail the interview-style of one team, like I did, but succeed with another.

After the virtual onsite it took another 2 business days until I got feedback. At that point it was simply a “we want to hire you” without any more details. At that point in time, we hadn’t yet discussed when I would start or talked about salary10 at all. This all happened afterwards. From the initial contact via mail to “we want to hire you” it took ~2 months. Then it took another month to iron out the details regarding salary, get formalities like visa status, background check etc. out of the way until I got a first contract and then another month to agree on a final contract because there was some back and forth about some parts of the contract that I wanted to get changed.

Becoming a Performance Tools Engineer

Long story short: On October 19th I’ll join Apple as a Performance Tools Engineer. Afaik, my future team works on Instruments, Xcode’s Memory Graph Debugger and a couple of command line tools like atos, heap, leaks, etc. And probably a couple of things that I soon won’t be able to talk about anymore. I’m excited to help drive all of these tools forward and if you have suggestions or a wishlist, feel free to reach out, but I obviously won’t be able to make any promises and I don’t even know whether I’ll be able to reply. Even if I won’t be able to speak as freely about Apple’s tools, I’m hoping I’ll still be able to keep an open ear for the Apple developer community.

A Couple of Stats

  • Time from first application to actual job offer: ~9 years
  • Time from first application to first phone interview: ~6 years
  • Time from first contact for a position to getting a signed contract: ~4 month
  • Positions at Apple I applied for over the years: >50
  • People I got to know over the years at Apple who referred me via their internal system: ~5
  • Times a recruiter/sourcer reached out to me based on the profile I had saved on jobs.apple.com: 1
    • And my profile actually fit what they were looking for: 0
  • Positions I had a least an initial phone interview for: 4
  • Positions I got a final feedback (accepted/rejected) for after the application online/via email/referral: 3
  • Times after I was rejected that I got a referral by the rejecting hiring manager/recruiter to another/better-fitting position: 1
  • Offers: 1

So Long

This will probably be my last blogpost for a while. Both because I historically didn’t find a lot of time writing here and because writing about Apple-related software development as an Apple engineer is rather difficult. But I’ll see how it goes. 🙂

  1. I grew up and still live in Germany.

  2. At the time it was still called Mac OS X.

  3. If you’ve watched some of the more recent WWDCs you’ll have seen him present a section of the Keynote or the Platform State of the Union.

  4. Please be considerate of everyone’s time here. If you actually have a friend at Apple: Great, feel free to ask them about positions, refer you, or whatever, you hopefully know best what level of request your friendship tolerates. If an engineer or hiring manager posted a position on their team on Twitter and offered to answer questions or forward resumes for that position: Great contact them on the channel they asked for, but don’t expect them to do more than forwarding your resume as support for your application, they won’t be able to vouch for you if they don’t know you and they’ll probably get hundreds of requests. And if you find an Apple engineer on Twitter or elsewhere that happens to work on the team your are interested in, but hasn’t made it clear they want to help people interested in joining Apple, respect that. At most, ask them politely whether they could help by forwarding your resume and if they say no or don’t respond accept that. Definitely don’t hunt for people’s work email addresses to ask them to do something for you (e.g. refer you).11

  5. And there are good reasons not to do that, even if they are convinced you are a good fit, among others that this will probably introduce a lot of biases.

  6. This is not a resume, so I’ll refrain from making claims like “I increased x number by y percent”. I don’t need to convince you to hire me, I’ve got a job already, this is mainly to give you an idea of what I worked on. If you want to know more, feel free to ask.

  7. I chose them based on what sounded interesting to me. In my case that meant: Developer tools, productivity software, frameworks, and UX- and privacy-related stuff. No games; no computer vision, AR or otherwise “graphics-heavy” stuff; no machine learning.

  8. I don’t remember whether this was the actual name of the position, but it was similar.

  9. I will not reveal the detailed questions used here. You will probably find similar questions on Leetcode or whatever other interview training platform or book you use.

  10. I’m not willing to post my compensation details online, as I feel like I don’t know what potential negative effects that might have. However, if we know each other or have met, feel free to ask, I think compensation details should be shared more freely to combat the information asymmetry between employees and employers.

  11. Of course, all of this is my opinion what you should and shouldn’t do, there isn’t a clear ruleset or anything like that. General courtesy applies, use your best judgement.