by Colin Smith
How I went from stuck and hopeless to making my tech career dreams come true
Choosing Computer Science
I work with some of the brightest minds in my field, right next to Harvard and Princeton grads, and it still hasn’t dawned on me what I’ve achieved. I never thought I’d be here a couple of years ago — I thought I wasn’t top tech material. The path that brought me here starts in the same place you may find yourself right now. Anyone can achieve the same things I have achieved with a bit of guidance. Hopefully my story can push you towards your first steps.
My story starts on graduation day with my first degree in music technology. You may have been in the same situation as I. I had no job lined up. I was facing a world of unpaid internships in expensive cities. It felt like my college degree was useless. I had no savings and tons of student debt. I felt hopeless and stuck. I felt like I’d never be able to pay back my student loans.
The commencement speaker at my graduation assured my class that we would be fine. That we would forge our own paths. I laughed on the inside when I heard this; she definitely couldn’t be directing this motivational line at me. There is no way I would ever have a lucrative and fulfilling career. I didn’t make the right choices leading up to this point. Things like stability and money were reserved for people who had planned better than I did. So I did what any desperate new grad would do and went to Tokyo to teach English.
Surviving in Tokyo
Things got a bit better for a while. I had money, I had a job, and I was living in a major city and enjoying life. Everything was fine until I had a roommate drop the news that he was moving out and I had to find a new place. Once again, the reality bomb dropped and I was completely unprepared. I had about $1000 in savings but this was nowhere near enough to get myself an apartment in Tokyo (especially with the exorbitant up front fees).
So with no other options in front of me, I went with an apartment that was tiny. And miserable. And absolutely depressing. It was 118 square feet in the back alleys of a random Tokyo neighborhood and I had to sleep with my head propped up against the kitchen sink. (This is a similar unit in the same building). Once again, I had to face the reality in front of me and this time I had nowhere to run.
I started thinking about what was important to me in a future career. I had a few friends that attempted to turn their passion into a job and ended up being miserable. Turns out, jobs can suck the fun out of something you love. So I ruled out a career in music. Plus it was notoriously difficult to break into the industry.
I also thought about going back to the USA to get a degree in teaching. After a bit of research, it seemed like the quickest way to get teaching credentials was through programs that put you in the most under-funded and challenging classrooms in the country. I was a bit burnt out on teaching with just a year and a half in Tokyo as a teacher. So this path was too slow, too difficult and didn’t seem like a career I would end up enjoying in the long run. Once again I was stumped. I felt like there was nothing out there meant for me.
It seemed the obvious and natural choices in front of me weren’t what I was looking for. I wanted to keep living abroad. I wanted a career path that was stable, in-demand and well paid. I started researching and found that computer programming jobs fit a lot of the criteria I was hunting for. I was always interested in computers and technology. I had even messed around with a little rasberry pi like this one with a friend before. So I started digging more.
The first thing that I was worried about was the fact that I was terrible at math. I always thought computer programmers had to be good at math. Growing up, I never even asked my parents for fancy graphing calculator because I thought it would be a waste even though every other kid had one.
The second thing was the fact that I had never written a line of code in my life. It seemed like everyone I knew that was into programming had been doing it since they were kids. The last thing that had me worried was that it seemed overwhelming. I couldn’t imagine myself being a programmer at a tech company.
Despite all this, I decided to take the plunge and started looking for an online computer science program. Little did I realize, this was the first step I took in my journey to this amazing career I have now.
The Mindset Shift
Seeing success required some major changes in my personal outlook. Luckily for me, I had met an amazing woman that shaped me for the better before starting the computer science program. Let me emphasize that I was lucky, don’t sit around and wait for things to happen to you.
First off, I was tired of being sub-par, mediocre, just barely getting by. This meant I was ready to change to achieve more. Being open to new viewpoints and pushing yourself harder is key in achieving your goals. Reading the 7 Habits of Highly Effective People helped me take concrete steps in understanding where I was going wrong.
Before this, coasting was fine. B’s were great and doing the minimum was the max for me. You need to understand that everything you do reflects on who you are. Shoot for the top and you will most definitely end up higher than you would have originally thought possible.
Second, I was able to now dive headlong into things that I previously would have put off due to fear of failure. Like math. I still hate math, but would gladly take another course if I knew that it would push me closer to my goals. Being able to not overthink something and dive into any challenge is something that will ensure that you are constantly moving forward. You may find yourself overwhelmed at points but you will come through and you will have learned something.
The Online Degree
My first searches for the right program started and ended with online degrees. When I was searching a few years ago, there were only a few options available. Bootcamps and awesome, but free programs like freeCodeCamp weren’t around. Even if college institutions were reputable, the online programs themselves were young and unproven. Going with an online degree seemed like an incredibly risky option at the time, but I am glad I settled on it.
I ended up going with a program that promised I could graduate with a degree in two years. Speed was my number one priority. Flexibility was second. I got both with this particular online degree program.
My first computer science course was Programming 165 which was a condensed and faster paced version of Programming 161 and 162. I had to take this course to be on track for graduating in two years. I was excited and ready to go. I dove straight into the first weeks’ topics. And then immediately realized I was way in over my head.
We covered if statements, switch statements and for and while loops in the first week. I couldn’t sleep for that whole first week because I was so stressed. The topics weren’t clicking for me and my mind started spiraling downward in a negative feed back loop.
I knew the issue wasn’t the textbook because a friend that knew how to program said the book was a great resource. The nagging voice in the back of my mind started telling me that I wasn’t meant for this and that I should quit. No one else is having problems with the pace of the course and everyone on the class forum seems to be doing fine. I just suck.
I thought long and hard and decided to reach out to the teacher to see if I could transfer to the normal paced class. He was incredibly supportive and made sure that the transition was quick and smooth. The switch allowed me to focus more on an individual topic for a longer period of time and the pace was much more feasible for me.
I was no longer drowning but unfortunately, this killed my chances of graduating in two years. Even though the learning part was fine, I still felt like a failure because I couldn’t keep up in the advanced class. This wasn’t the start I was looking for.
I ended up doing well in most of my classes, albeit behind schedule. I got straight A’s (which I’ve never done before in my life) and did my best to go above and beyond to prepare myself for the career ahead of me. Even though I wouldn’t be able to graduate in two years like I had originally hoped, I realized I could still start working before I graduated. This would get me what I really wanted anyways, a job with a real career path as soon as possible.
Getting my feet wet
I now needed to decide what I wanted to do as a programmer. My first intuition was to look at the most well-paid jobs. From there I dove more into why they were well-paid. Was it because they used outdated technology so demand was high for these specialists? Or was it because the market using the technology was growing? I ended up picking iOS since it was a growing market, I liked the visual aspect and the pay was, on average, pretty good.
I started fishing. And this may be a recurring theme, but the results weren’t what I was hoping for. I got a lot of rejections due to my degree being online. Outright rejection. One was even through an online career fair held by my school. That was pretty ironic.
I also came across a lot of scammers. People looking to get someone else to do free work for them without any guidance. They would do things like forcing the use of outdated and bygone technology stacks. Or misrepresented unpaid positions to seem more interesting than they actually were. I even had someone ask me to do a bunch of free work before deciding whether I would be a “fit” for the internship or not. Avoid this crap. Go with legit companies that will pay you for your time or have a track record teaching people from scratch.
I was hoping to work in California, my home state. But facing so much rejection while combing through a bunch of sketchy internships made me decide to broaden my search. I came across a company offering iOS apprenticeships in Boston. The program sounded too good to be true. They would train you up, pay you a stipend. If they liked you enough at the end of 3 months, they would hire you full time and you’d get a nice bump in salary. I interviewed and somehow got the job.
I did not prepare well for interviewing because I had no idea how to prepare. Don’t be like me and read my article on how to succeed during your first interview. But I somehow managed to persuade this company to give me a shot. I was on cloud nine. I had managed to get a job in two years and I was ecstatic for my first opportunity to prove myself as a programmer.
The First Job
As with anything new, learning iOS was a real challenge. I was much more familiar with web frameworks like Angular, and getting used to the new concepts of iOS proved to be difficult. The resources available to iOS devs were pretty limited back then. But I leaned a lot on an early edition of the Big Nerd Ranch book on iOS.
I spent every weekend studying iOS and doing extra work to learn more and prove that I would be a good full time hire. Everyone I was working with was better than I was at iOS and I had to put in a ton of effort to stay up to par with my co-workers.
The first task we had was finishing an online Stanford program that taught the concepts of iOS. This was fine for me since it was exactly what I was doing when working on the online degree.
The next part was harder. We were going to build an app. And we are going to use Agile methodologies to organize our work. Those methodologies would guide us in executing from start to finish.
I was now accountable for the tasks I was given and I had to take responsibility for the work I put out. If I wasn’t on track to finish a task in time, I had to learn to explain why. I had to list possible solutions to unblock myself and deliver something usable in the timeline given. I had to learn Git. I had to learn to organize my work in such a way that I could accommodate and plan around my team’s schedule and goals. But most of all, I had to learn to contribute to a team and be someone that people would want to work with.
My team and I delivered our final product, an internal onboarding app for the company, on time. I also got to give a presentation in front of the whole company about the app. I explained the work around the app and showed off the shiny new functionality. Soon after, I started working on projects that clients were paying for. This led to getting the full-time offer. Things were looking up and I had finally gotten a foothold in this new world. It felt great.
But the shine faded much sooner than I thought it would. The free drinks and snacks became the norm. The arcade machine became an annoyance. The free dinners on Friday started to feel forced rather than something to look forward to. It seemed like the extras provided were acting as diversions. This kept a lot of people from seeing what was actually happening around the company.
Typing this out makes me feel like I was ungrateful. But if the base components for a healthy and productive working environment aren’t there, the extras won’t make up for it.
The company was growing at a rapid pace. I was employee number 40, and when I left a year later, 140 people worked at that company. The practices that used to make you feel wanted and special now only praised the same few employees. It became clear that there were a select group of people that were much more valued than everyone else. It was also clear that if you weren’t in that group, one major mistake could get you axed.
On top of this, the good work I was doing wasn’t getting recognized. An app I worked on got the award for best architected app that we released that year. Only the lead for the project got credit for that (he and I were the only ones on the project).
I had also been working on the most boring but most lucrative project for months. We had to show up to the client’s office everyday wearing suits and missed out on a lot of news and fun stuff going on in the home office. It was isolating, and left little room for me to take on pieces that would help me grow as a programmer. This didn’t seem to be appreciated by anyone but my direct manager.
I had also recently started going to local iOS meet-ups (DO THIS!!) and found out that I was actually drastically underpaid for the field I was working in and the city I was living in. It was clear I needed to make a change.
I had two options. Work my ass off to make it into the group of employees that were untouchable, or start looking elsewhere. I went with the latter option. And in hindsight, it was BY FAR the right decision. I interviewed with 4 companies and got two offers. I ended up going with the company Fitbit. The pay was good and the product was great. The team in Boston also managed to be friendly and welcoming during the interview which is a difficult thing to do. I had leveled up, and it felt great.
The Mid Size Unicorn
Doing well at my last job and securing my new job at a tech unicorn definitely did a number on my ego. I had a lot of confidence and was sure that I would excel at my new company.
Little did I know, I had entered a completely new world. This world was full of product managers, unit tests and millions of users. This was a completely new game and I would have to start from the bottom again. Luckily, I had a great mentor from the start this time around and he helped guide me in my new role.
The first biggest difference I noticed was the organization of teams and their focus. I was on a product team that solely focused on food, water and weight related functionality in the app. I was hyper focused on a single part of a large app. I was also collaborating with my product manager, engineering manager, team lead, the Android team and design on a regular basis. This style of work was completely unfamiliar to me.
Everyone had a stake in what you were building and you better be sure that they all signed off on what you built before you shipped to millions of users. The pace felt a bit slower but much more meaningful. Everything that we built was much more polished and had a lot more thought and effort put into it than what I was used to. My first bug fix improved the experience of millions of people and I loved that feeling.
Building a small piece of something much larger than I was also new to me. There are a few different levels to what I mean here also. I was one of around 15–25 iOS engineers. We reported to a larger software engineering org. Which coordinated with hardware production and firmware engineering. Which was all guided by the leaders of the company. The scale and contributing to something so big and so important to millions of people was awe-inspiring. I had to sit down and think about it to let it soak in sometimes.
The success stories of people living healthier lives with Fitbit was great motivation. I discovered then that the product you work on can make a big difference in how you feel about the company you work at. This may seem obvious, but it can be overlooked a lot when searching for jobs.
Through the guidance of my mentor, I was able to take on bigger and more complex tasks as time went on. I started setting up meetings to coordinate with other product teams. I even guided some of these meetings. I was always getting feedback from my mentor about what went well and what didn’t. This helped me focus on areas of growth and solidify my strengths.
I also was working on one of the most important and new areas of the app. The company had made some big bets by working on this feature. We were put under a lot of pressure to deliver a ton in a pretty tight timeline. Our team was rock solid though and managed to make the higher ups realize that something had to give, either feature-set or time. We ended up delivering the feature ahead of time for the new release date. And it was at this point that I realized I needed to push myself again.
I saw that I was getting complacent. I also saw that there weren’t many places within the company to lead larger projects. This was due to the fact we had a lot of senior engineers already. On top of that, Boston was starting to feel small and the influence of my previous nomadic lifestyle got me feeling claustrophobic.
My wife and I decided that we wanted to be in NYC. I had broached the topic of working remotely before but it didn’t seem like it would be workable. So I needed to figure out my next step. I decided to shoot for the top and go for a FANG (Facebook, Amazon, Netflix, Google) company.
I had been denied from Google and Twitter before so I knew I needed to know more than pure iOS knowledge. I needed to make sure my algorithm and data structure knowledge was rock solid. I needed to devote time and effort to this. So I started applying to see who would be interested. I got a lot more interest than I thought I would, which was a pleasant surprise, so I knew this was actually happening. I had to put my head down and focus on the next step.
The Interview Prep
I immediately blew 2 interviews at top tech companies. I got lazy and impatient. I was hoping that I would get in without studying. I was immediately brought back to reality by failing these phone screens.
I freaked out a bit because I had wasted two chances with overconfidence and laziness. I only had one more shot at a top company. This drilled it in my head that I couldn’t ride solely on the knowledge that I already had. I would need to spend some time and effort in practicing for interviewing. I ordered a whiteboard soon after.
I started with brushing up on data structures and algorithms. I went through LeetCode questions and CareerCup questions. I aggregated questions I thought I would see in the interview by adding them all to a project in my IDE (Xcode in my case). Then I turned off autocomplete and started drilling these questions every night for 2 hours a night. Longer on weekends.
After a while, I had around 75 questions memorized. But it wasn’t only about memorizing problems. Once you internalize how certain kinds of problems are solved, you can apply these patterns to new problems you have never seen. This was the ultimate goal.
I then had my wife learn some of these questions and do mock interviews with me. I started drilling these questions on the whiteboard to get used to whiteboarding. A big part of whiteboarding is space management on the board. I practiced starting at the very top left of the board, using smaller writing in order to use less space, and using these thin tipped markers in order to allow for easier to read handwriting.
I made sure that all the syntax I used would compile after I finished writing questions. I also limited myself time-wise to get used to the time-sensitive aspect of interviewing.This got me ready for the tense interviewing environment and helped me excel later on.
I took on a few smaller start up interviews to prep before the big interviews. I didn’t want to make the same mistake again of not being prepared. It was a good idea, too. I started getting incredibly comfortable doing interview questions in any environment.
I started seeing a few patterns in questions show up over and over again. This allowed me to break down problems I had never seen into smaller pieces. After they were in smaller pieces, they were much easier to solve. It became clear to me after a while that I was ready for the algorithm questions I would face at a Google interview.
I now needed to start prepping for any architecture questions that may come my way. I started packet sniffing apps running on my own phone like WhatsApp, Instagram, Twitter, Allo, and Messenger. This gave me a sense for what their network traffic looked like. I started reading about different ways to cache and persist to disk and different ways to do networking.
I played with a bunch of different apps in airplane mode to see how they handled offline cases. I did my best to try and break apps to see how errors were handled. I also looked at a bunch of open source frameworks like SDWebImage and AlamoFire to see how they do things. This helped me understand how the best of the best architected and built apps.
After two months of studying algorithms and app architecture, I felt ready. But there were still doubts in the back of my mind. Should I study more? Am I ready? There is an art to determining when you’re ready. You can’t be impatient and rush into things unprepared like I did at first. But you also can’t hesitate for too long.
When you’re at the top of your game and you have aced a few interviews at smaller companies, then it is time to go. So that is what I did. I reached out to the recruiter and scheduled a phone screen with that last top company I had a chance with.
The day of the interview, I was nervous. And that was bad. I had been doing a ton of interviews and hadn’t been nervous in a long time. But of course, when it mattered, the nerves came back. The interviewer ended up being 5 minutes late for the screen. Those 5 minutes felt like 5 hours. I remember I was sweating so much that I had to change my shirt before starting the interview. I was a mess. And then the call came.
The person on the other end seemed friendly. He asked if I was still free, introduced himself and then jumped right into explaining the format of the interview. This interview would be all algorithm questions. I felt comfortable with this since I had been drilling so much. The first question, I did very well on. The second question, I had a ton of hiccups and needed a lot of guidance from the interviewer. I knew it wasn’t good and had a sinking feeling in my heart that I had failed.
We ended the call and I did my best to show my enthusiasm about the company. I had researched a lot about the company beforehand and had a huge list of questions that I wanted to ask. Unique questions that showed I had done some research. I asked about a recent acquisition and the interviewer actually hadn’t heard of it since it was recent news. I explained what the company that was acquired specialized in and asked how the interviewer could see it fitting in at the FANG company. He humored me, which I appreciated. The call ended and I was left alone with my fears and doubts.
The interviewer contacted me. My heart was pounding. It felt like it had been months since my screen when in reality it was only 3 days before. They hadn’t gotten the signal they were looking for. I wouldn’t be able to go onsite with the performance from my previous screen. I was down but not out. They wanted to do another screen. I jumped at the opportunity and immediately scheduled another date for the second screen.
The next interviewer was not so friendly. In fact, he came off as down right cold. I started to panic in my head. There is no way this guy will let me through. Just my luck. He laid out the first question. I did pretty well and we got to the next question in about 15 minutes. I once again did pretty well and finished the second one after another 20 minutes. I asked some questions about the company with 5 minutes left and then we ended it. I felt good about my performance but I wasn’t able to read the interviewer’s voice. I had no idea if it was good enough. And so the waiting game began.
This time it took a week to get back to me. Which felt like it was a bad sign. I was both anticipating and dreading the call from the recruiter. Luckily, the recruiter took mercy on me. I could immediately tell from their tone that it was good news. I passed. I had made it to an onsite with a FANG company, for the first time ever. I was overjoyed. But I didn’t let this news make me complacent. I scheduled the interview two weeks from the call with the recruiter. And I drilled like a mad man.
I upped the drilling time to 3 hours a day and read everything I could about code in the mean time. I also started being a bit more introspective on my experience as a programmer. I was sure that they would ask me about my work at previous jobs. What were the challenges that I faced? How did I handle failure? Did I take charge and responsibility for tasks that were assigned to me?
I made a bunch of questions like these and filled out my answers. It was actually kind of a nice experience. I learned a lot about myself and recognized areas that I could improve and areas I excelled. By prepping for this interview, I became a better programmer. I could go into the interview with confidence with this knowledge of myself.
At this point, I had done a huge number of onsite interviews. But seeing how things worked at a FANG company was eye-opening. Flights and meals were paid for, fancy hotels were booked and recruiters were attentive and always checking in on you. Some of these were applicable for other places that I had interviewed, but there was something different about the process at a top tech company. Everything was streamlined and planned for at each step and sub step of the process.
My flight to New York City was on time and arrived quickly. The taxi to the hotel was also quick. The hotel itself was gorgeous. It was a boutique hotel in the East Village. I had the urge to go out and enjoy the night and have a drink to calm my nerves but I managed to suppress it. I ordered a meal in and did some final review of some architecture and career questions. Nothing heavy and mostly light reading. I wanted my mind to be fresh for the next day.
The hotel ended up being a bit noisy due to the street activity but I still slept for a good 6 hours. I woke up early and looked for a nearby coffee shop. I drank some delicious pour over coffee and ate a waffle while waiting for the interview to start. I used this time to relax and browse random stuff on the internet. Getting in a calm state of mind helped keep my nerves in control and did wonders for getting in the right mindset before the interview.
I showed up 15 minutes early and the recruiter showed me around the office. It was a nice office with tons of free food. And free drinks. And coffee. And toothbrushes? That is useful too I guess. She sat me down in a huge room and said that I had gotten lucky. There were other rooms that were much smaller and had much less whiteboard space. I was off to a good start.
I don’t want to go into too much detail about the onsite, but I’ll say this. I did well on most of my questions. I felt good about all the answers I gave. Except for one session. I flopped on one problem out of around 9 or 10. I hoped that this would be enough. I hoped that my enthusiasm and performances in other questions would be enough to shore up my one weak performance.
I immediately went from the hotel to the airport and flew home. The waiting game began and it took quite a while. And this time, for some reason, I didn’t care. I had pushed myself for so long and focused so much on one thing, that I was sick of it. I was done. If I didn’t get this job, that would be fine.
I had done my best and I could give it another shot in a year from now. I also wanted to move to New York and already had one opportunity waiting at a start up that I had liked the vibe of. So getting a job before my lease was up in Boston was the most stressful thing and it was already dealt with. I forgot about my onsite and assumed the worst. Then the call came.
I passed. I had actually passed. I couldn’t even process what this meant for me. I didn’t even react. I accepted the information and moved on with my day. I had just got back from a long day at work and my brain was in shutdown mode. So I told my wife. She was incredibly happy for me. And I did nothing for the rest of the day.
I accepted the offer the next day.
And that is my story. Not so glamorous. Full of road bumps, failures and doubts. But I made it. And you can too.
This isn’t something that you stumble upon though. You need to be thoughtful in the path you take. And you need to be determined. You also need to have the burning desire to constantly push yourself to be better. Then you can make it. Conquer each one of those challenges one at a time until you arrive where you want to be. Thanks for reading.
Like what you saw?
Here is another article I wrote on how to succeed in your first tech interview. Give a read and a clap if you like it.
Required Disclaimer: This article contains Amazon affiliate links. Any click may result in me receiving a commission.