From iOS developer to product manager (part 1)
Product manager (PM), a job title that sounds great, right? But how did I grow from a developer to a PM? What was I expecting and what did I get? How can you be a good PM?
My story begins as an iOS developer, I learned everything by myself, no one taught me, simply because no one could (at this time, Tunisian universities don’t teach it). In 2010, I was a fresh computer engineer passionate about 3D games. I was looking for a job in this domain, but, that time in Tunisia, there were only a few companies specified in the 3D domain and no one wanted to hire someone with no experience, we all know that… And as I needed some money (you know to eat for instance 😅), I became an agent 🕴 in a call center for a French telco company. « But wait! Why are you talking about this? This have nothing to do with a PM job. » Yes it does ;). In fact, it was very useful for my carrier. It allowed me to learn how to control my stress (if a client calls, it’s rarely to congratulate us..) and to «orientate» both the discussion and his «vision» of the company I work for. It’s an art ;) and I was good on it. But you know that an engineer can’t or at least won’t do this for eternity.
Moving forward
Then, a miracle happened. A startup calls me to become a c++ developer with QT. I have already used it in my final university project to build a 3D game engine (something almost like Unity3D 🙃). But after only one week, they said: « here’s a mac, you have two months to learn iOS», ooooh really 😬! I was so excited because I already love what Apple did and dreamed to become an iOS developer. In two months, I was ready to build my first application, but I was doing things the wrong way: if it works, don’t try to understand why, just go ahead! So for this reason, my first application was a disaster; it was delivered in time, client was happy, but god! the code was sooo bad that I can’t stop laughing when I take a look on it now 😂.

Then i decided to take the time to understand what im doing and read allot from great developers (like Matt Thomson), this was the key rule i’ll be following “ take the time you need to understand the “how” and the “why”
Take the time you need to understand the “how” and the “why”
Next step
Now that I have my first iOS app in my curriculum vitae, things were simpler. My boss increased my salary (a little bit), he could get more contracts and I could learn more and more in developing these apps.
One year later, I left the startup to another one. This time things was more exciting: this one was specialized in security and encryption, and for the first time, I worked in a team (3 mobile dev, 1 designer, and a team lead).
Working in a team means that I have to reconsider how I work: the ideas come from other people and I have to examine them, then have the right answer: if it is ok for me, then there is no problem, otherwise, I have to know how to argue because just saying «it’s a stupid idea» is not acceptable 😅 and you have to bring a better idea, otherwise this ‘stupid’ idea will be chosen.
But believe me, it is not always easy, take this as an example: your CTO and the tech lead ask you to build an iOS application to encrypt cellular calls: if A calls B, B don’t have to install that app to listen what A is saying. Please tell me what could you do if you were in my place 🤔, how cloud you keep calm?! But I did 🤐 and after one hour explaining that we can’t do it, and even if we could, Apple will never allow us to distribute it in the appStore and that phones should be jailbroken (try to explain this to someone who knows almost nothing about iOS), they finally got it and asked me to build a POC (Proof Of Concept), so I started trying (without success).
Keep calm ..
Freelance
Meanwhile, I was looking for extra money, so I tried to get some freelance. But it’s really not easy to have 2 ‘jobs’: day and night you have to achieve 2 applications. My first one was a success and a huge experience for me: I was the tech lead for both iOS and android (and sometimes the backend part). But how could this happen with my little experience? The answer is simple: the client was in France, so we had to use skype, and because I was an agent in a French call center, things were simpler for me to understand him and to answer exactly what he want. Also, all other developers was Tunisian ;) (and yes, technically I was good :p)
So, was the freelance a good idea? Definitely yes! It was laborious but I had extra money and I learned how to manage time in a small team and estimate resources/time needed to achieve clients need (using Gantt for example).
Any experience is good to take
Next level
Then, I was hired by a big company as ‘senior iOS dev’. This company had departments in France, USA, China, Romania and Tunisia.
It wasn’t a mobile company, they built big things for telco, so they hadn’t the «mobile DNA». And they decided to build a messaging app for iOS and android.
In the beginning, we were only 3 iOS devs (2 in Tunisia and 1 in China). It was hard for me to accept UX choices they made because it wasn’t very «mobile», so I tried to let them understand that we should «enhance» what they did. And fortunately, they was open to what I said and accepted it (at least some). So, I started to do some mockups to illustrate my ideas and then discuss about it (I wasn’t the best in UX/UI but I was good enough).
After a while, I became a sort of technical/UX referent, I became the one to refer for answering questions like «is this possible to do in iOS?» or «how others do this?». This forced me to improve my skills and my knowledge about iOS (and sometimes Android too).
Always improve your skills
Team building
When the need came to recruit more iOS devs and create an Android team, an engineer came from France (the same one who recruited me) and recruited two iOS devs, and as the team grow, the management choose me to be the team lead.
Now serious things begins, why? Simply because both of them where pretty good devs, and it was the first time that I could discuss with someone about applications architecture, good coding practice, iOS deep knowledge.. and that was awesome! I already coded the global architecture of the app and when it came to add new features to the app, we did it after loooong discussions and a looot of drawing in the blank board 📝 🤓 (maybe I’ll write another post about technical issues we had and how we fixed them like core data threading and data sync).
Then, it came the time to recruit more devs, and as I was the team lead, I was the one who should do it. This was a special experience: team leads tend to recruit devs because they was in a big companies or because they was in a well-known university. I choose to use another approach: check the CV, if he/she had the minimum required for the job, we call him/her to pass a technical test. My tests were not written ones, no, we talked together. I always began by making the candidate comfortable, then started by easy (very easy) questions to more complicated ones (classic test). I almost never asked algorithmic questions, no, I ask questions that matter for the job he/she will do: how you handle multi-threading in core data, animations, Xcode debugging, how to separate network layer and persistence layer, etc.
There were sometimes arrogant candidates who consider themselves as an iOS god level dev and could answer to any question (lol..), one of them told me that there was no need to ask him any question because he already knew everything! Oh really? Let’s see then:
Me: I read in your CV that you worked a lot in images processing.
Candidate: yes.
Me: great, could you please tell me how you manipulate the images without blocking the main thread (simple right?).
Candidate: I call performSelectorInBackground.
Me: ok, but how do you get callbacks, pause or cancel your image processing?
Candidate: .. “silence”
Me: ok, could you tell me what your app goal is?
Candidate: in fact, I have patented a method to identify faces from images using only 1 point 😎.
Me: what? Only 1 point! Are you kidding me?! It’s impossible.
Candidate: No, I swear it’s the truth 😡.
Me: no, I’m sorry, it’s impossible.
Candidate: $~%£🖕¥%# 😡.
This was an extreme example of lying developers’ 🤥 and how you should react (my reaction wasn’t the best, I admit 🤦♂️).
Finally, I accepted 3 devs, so we became 6 in the iOS team (mobile department in China was closed).
everybody lies
In the next part, I’ll talk about my experience as a PM and the challenges that I faced and how I solved them :).
