How I went from a coding bootcamp to MicrosoftMay 16, 2020
Exactly nine months after starting my first day at App Academy, a coding bootcamp, I got an offer to work at Microsoft as a Software Engineer.
In many ways, this changed my life. I broke into a new industry and career that I love. I get to work on really interesting things. And my financial situation improved.
So why am I writing this?
Partly to answer the questions I’ve gotten about how I made the change happen.
But mainly, I want you to know that if this is a path you’re interested in, you can do this too.
I’ve seen people online criticizing and discouraging bootcamp grads and those without computer science degrees about looking for jobs at good companies due to their nontraditional background.
One comment said that bootcamp grads will have to work crappy jobs for 3-4 years to get trained just like “the rest of us” who had to spend 4 years on a formal CS education.
That’s simply not true.
Granted, it’s no picnic. I worked my ass off for at least 9 straight months to condense as much learning as possible into that time frame in order to get the job I wanted.
I viewed it as my singular focus and mission, and it was rough.
I received 400+ rejections from applications I submitted.
Several failed interview rounds.
Lot of silence.
But I kept working, and it paid off.
Here was my strategy and the actions I took to make it happen.
Data structures and algorithms
I knew I wanted to work at a big tech company with really smart people and interesting problems.
Companies like Microsoft, Google, Dropbox, Amazon and Stripe.
It turns out that most (but not all) of these companies heavily prioritize data structures and algorithms (DSA from here on out) in their interviews.
So, I prioritized them heavily in my prep.
Just from the data I kept track of, here are some high-level stats of my DSA prep:
- > 237 hours of DSA study and practice
- 12 mock DSA interviews
- 144 Leetcode questions
- > 40 Elements of Programming Interviews (EPI) problems
One benchmark I used for myself was to be able to solve Medium-level LeetCode questions in 20-30 minutes and Easy-level LeetCode questions in under 15 minutes.
My fundamental objective was to have a deep intuition and working knowledge of the time and space complexities, implementations and tradeoffs for the most common DSAs.
The material in the resources I list below is pretty much in line with the questions I encountered in my interviews.
I started with the fundamentals and built my way up.
However, it’s not about getting to the optimal solution or memorizing DSA problems.
It’s about being able to solve new problems with a fundamental understanding of DSAs and how to apply them.
It’s crucial to communicate your understanding of tradeoffs to your interviewer, to formulate a strategy ahead of time, to foresee edge cases and to demonstrate your methodical approach to arriving at a solution.
Others have covered this better than me, and I am including links to the exact pieces of advice and study resources that I used to prep for my interviews.
These were fully sufficient for me to gain a strong understanding of DSAs that ended up serving me well in my interviews.
DSA Resource List
Core resources (I’d prioritize these first)
- Great for beginners. Clement Mihailescu is great at giving thorough video explanations for every problem. In the beginning, it’s extremely useful to have someone break down a problem in this level of detail without assuming that you know principles at a more advanced level than you actually do.
- The Data Structures Crash Course was helpful to cement the fundamentals of key data structures and concepts like memory and Big O analysis
- When I had a good grasp on DSA fundamentals, I spent most of my time here working through as many problems as I could.
- It has the largest repository of questions that I’m aware of, as well as the ability to search for questions tagged by company so you can tailor your prep.
- LC has timed mock interviews (they’re more like coding challenges since it’s just you vs. the timer). These are really useful because they simulate the time-pressured environment of coding challenges and interviews.
Elements of Programming Interviews
- Trends towards more advanced problems and solutions, but I felt like it really upped my game as far as learning the best practices for Python and strengthening my algorithmic thinking.
- Higher quality solutions than LeetCode.
- Great introductory material for each chapter
- An extremely well-done practice resource. I’d use in tandem with material that can teach you the basics.
- Free (with optional premium plan)
- Best site for doing frequent mock interviews
- I’d recommend doing at least 2-3 mock DSA interviews per week. This is so key in being able to bridge the gap between your solo DSA practice and actual performance in an interview.
I also found these ones to be helpful:
How to Break Into the Tech Industry
by Haseeb Qureshi
- Strongly recommend—covers lots of things beyond DSA like mindset, interview strategy and more
- The Algorithm Design Manual by Steven Skienna (also a free copy floating around online)
- Coursera Princeton Algorithms Course
- Interview Cake
- TripleByte Prep Resources
- Buck Schlegeris’s Advice on Studying Algorithms
- Big O Cheatsheet
- Asana 101 Interviewing Guide
The second most important topic that may come up in your interviews for a big tech company is some type of design discussion.
This usually falls into two categories: System Design and Object-Oriented Design.
System design discussions usually begin with a deliberately vague prompt like “Design Twitter” and entail a discussion (that you lead) about how to architect and design that system given a set of priorities and use cases (which you must clarify).
Object-oriented design (OOD) questions entail you showing off your object-oriented programming (OOP) skill set given a problem like “Design a chess board” or “Design a parking lot.”
They key for prepping for design interviews is to practice doing them. Again though, you have to first develop an understanding of the fundamentals.
I spent at least 30 hours studying and practicing for design interviews. Here are the resources I used and that I recommend:
Design Resource List
System Design Primer
- Widely used and recommended
- High Scalability
- Grokking the System Design Interview
- Grokking the Object Oriented Design Interview
- Pramp for mock interviews
Behavioral and personal projects
The tertiary area to focus on at most interviews at big tech companies is your technical projects.
Since this essay is geared towards bootcamp grads or those just starting out in the industry with no CS degree, the only experience that you’ll have to talk about will likely be your technical projects.
You need to know your projects inside and out.
Here are some of the most common questions you’ll likely face. Make sure to have thorough, solid answers for them so that you can signal your credibility and ability to think like an engineer to your interviewer.
- What was the biggest technical challenge you faced in this project?
- What was the hardest bug to solve and how did you fix it?
- Walk me through the architecture of this project
- What were some of the technical tradeoffs you made in the project?
- Why did you use this particular stack / technology for this project?
- Walk me through…(a specific feature)
- How does (insert relevant technology) work?
- Tell me more about (insert one of your resume bullet points here). Know every bullet point on your resume in a high level of detail and be prepared for follow-up questions.
Anything you have on your resume is fair game for questions during an interview. Be prepared to drill down into the details, your code and questions listed above.
I ended up talking at least a little about my projects in almost every interview I did, including Microsoft. Expect it to come up.
Pro tip: Write three technical essays about your projects or technologies that you’ve explored. This advice is from Patrick McKenzie and I loved it. It will help you not only stand out to recruiters and hiring managers, but also understand your projects better.
The advice above is all well and good as long as you can get interviews.
Of course, getting interviews is often the hardest part.
If you’re applying to a software engineer job at a big tech company and have no professional experience and no CS degree, you are starting at a disadvantage.
You have to bring something to the table that gets you the job over those with CS degrees from top universities and those with as much as an internship’s worth of experience.
Step one of overcoming that disadvantage is to earn credibility through your work and study. This means technical projects, technical writing or speaking, rigorously studying computer science fundamentals, DSA and all of the stuff mentioned above.
The second equally important step is to build relationships.
Relationships turn the cold, digital process of submitting your application to an algorithm (or to recruiters that view you as a data point among thousands) into a personal, higher-trust approach to being considered for a position.
I submitted something like 440+ job applications, mostly cold applications directly on LinkedIn or company websites.
Some people will argue that I got a job because I submitted this many applications. “It’s a numbers game.”
I would argue that 90% of my time spent on these applications was completely wasted.
It’s a quality and connection game. At least to get your foot in the door.
The times that I actually entered into an interview loop and my application wasn’t outright rejected at the resume screen were most often due to some human contact at one of these companies.
Moving past the resume screen at Amazon, Asana, Facebook and Microsoft all came as a result of 1st and 2nd degree connections at the company.
I also got referrals at Google, Dropbox, Stripe and Indeed from simply having good conversations with engineers at those companies who were generous enough to chat with me (although all of these rejected me at the resume screen, bummer.)
I also got my opportunity to interview at Microsoft through a referral.
Let’s talk about referrals.
It is commonly said (and true) that referrals help get your foot in the door at a company.
An employee recommends you internally for a position, and your resume is then moved to some higher level of priority that usually at least gets a recruiter to actually look at it.
Sometimes, they still decide not to move forward with your application, but it sure as hell increases your chances.
How did I get at least 5 referrals to great companies?
By not asking for or expecting them.
I am not on board with advice to ask people for referrals. To me, it should be an organic thing. I don’t ever want to put someone in an awkward position.
The reason I got those referrals was because I reached out to a lot of people to learn from them and about their path to working at companies I wanted to work at. I was genuinely interested.
I reached out to a lot of software engineers on LinkedIn or through friends. I especially wanted to talk to people with nontraditional backgrounds.
If I got nothing out of my conversation but the ability to learn from the person I was talking to, I was grateful.
I would recommend doing this, not to get referrals (although you may get offered them, and that’s great), but to A) learn valuable lessons from people who’ve done what you want to do and B) establish real, human connections and relationships with people in the industry.
It will make you feel more at home entering tech and elevates all of us in this industry. We’re better off by learning from each other, teaching each other and helping each other out.
I only went to one traditional “networking” event, mostly because I had to for my bootcamp job search requirements, but didn’t find much value in them.
I would recommend sticking to direct relationships with engineers, hiring managers and recruiters.
Find the human
That’s probably my favorite heading of this essay, by the way.
What this means is: whatever job you’re applying for, find a human being to be your initial advocate. Don’t trust the algorithm to advocate for you.
Reach out to hiring managers using Patrick’s advice.
Stay in touch with people you mock interview with on Pramp.
Message recruiters for positions you think you’d do well at.
Meet engineers and learn from them.
Use your bootcamp alumni network and job opportunities to have an “in” at the companies you want to work for.
Don’t submit 400 applications and wonder why you have a 95% rejection rate. Like me 🙂
If we’re going with the Pareto principle, over 80% of my opportunities came from 20% of my application effort. That 20% was connecting with people.
The last thing that I believe allowed me to get a job at Microsoft was focusing on my mindset.
I wanted to be an excellent engineer. My entire strategy revolved around me earning the right to be taken seriously during an interview.
I studied DSA, system design, computer science fundamentals and many more topics day in and day out, so that I could prove to the interviewer that I wasn’t a bootcamp noob.
During interviews, I dealt with nerves like anyone else.
My strategy for handling them was to make a few tweaks to how I mentally and emotionally approached the interview.
One thing that really worked for me was to focus on the interviewer instead of myself. I framed it in terms of being generous.
How could I give them the best interview experience possible?
How can I make this fun for them, since I know they probably are doing a lot of these and that can get really boring?
How can I show them that I’m passionate about the opportunity?
The more I think about them, the less I think about myself and my doubts, fears and insecurities.
Also I decided that my job during an interview was to never give up on the problem, to solve it optimally for both of us and to create a positive atmosphere while doing it.
If I fail an interview, it means I’m one step closer to passing one as long as I take note of what I screwed up on and become stronger in that area as a result.
The emotions during the job search and the interview process can be like a roller coaster.
It can get really freaking hard and sometimes be scary, depressing and discouraging.
Don’t let it phase you. Everyone goes through this.
I viewed this process as similar to being a soldier. I needed to keep marching. Keep the utmost level of grit. Get better. Stay true to the mission.
Remind yourself what this means to you and your future. Set high standards and goals for yourself and pursue them vehemently.
That’s the gist of what I did to land a job at Microsoft after graduating from my coding bootcamp.
There was more that I did in my prep, but it wasn’t really relevant to getting the Microsoft job (like studying front-end topics).
There were also things I did to prep for this specific position at Microsoft that aren’t usually applicable to most entry-level positions (like multithreading).
The advice above is what I would give to almost every bootcamp grad that is looking for a job at a big tech company like Microsoft.
If you have any questions that I didn’t answer, feel free to leave them in the comments and I’d be happy to answer as many as I can.
Best of luck and I hope you get that awesome job really soon!
Recently, I decided I’d like to focus my writing around my journey in tech and thinking through the future of work—a topic that I’m extremely passionate about.
If you’d like to know when I publish my next essay and want to be on my private email list, use this form to subscribe.
Sign up to get more of my writing on tech and the future of work
Join my private email list
I treat your info how I'd like mine to be treated—with complete privacy.