Ever since Dr. Milan Milanovic published the interview, I kept being asked for additional details on how I got a gig in Microsoft. And I think it all stemmed from the fact that my path was rather unconventional and that it breaks the stigma of most what is known. I’m happy that’s the case. And I’m happy to elaborate all the details as part of this full-lengthed article.
Let’s start from the very beginning and build from there.
I never saw myself as “Microsoft material”
This is something that many find hard to believe. I never had a dream of joining Microsoft, primarily because I presumed I can’t compete on that level. Microsoft, and especially Microsoft Development Center Serbia (MDCS) was a place reserved for super-smart folks. Folks coming from elite schools and universities. Folks who have been winning all kinds of competitions. Brilliant folks. I just didn’t fit the description.
Truth to be told – I wasn’t wrong on this one. Microsoft, and MDCS in particular, IS full of brilliant people. Extremely smart and hard-working people. People who are passionate about stuff they are doing. It really is a unique place and environment to be in. So my assumption about the collective was right.
The part where I was wrong was thinking that hard work and extreme dedication can’t make up for not being extremely smart; or at least allow you to compete on that level. It turns out that it actually can. And what’s more, I think it’s really valued in here. Growth mindset, dedication and willingness to learn and improve are some of the core traits of MDCS DNA. And that’s exactly the card that I played on.
The idea was born
Closest I ever got to Microsoft was driving my younger brother to the Microsoft Development Center Serbia (MDCS) office. He was (and still is) everything that I wasn’t – young, smart, razor-sharp and, most importantly, he got an opportunity to do internship in there. Hooray! One of the first of (known) Joksimovic family members to set a foot in there. It was a big deal. And myself? I got the opportunity to drive him to work one morning. Which is the closest I’ve ever got to the Microsoft building.
“Why don’t you apply to Microsoft?”, he asked bluntly. Simple, precise and totally unexpected. “Nah man, that’s for you youngsters. I’m not into business of ‘cracking the coding interview’, doing leetcode and preparing what not, only to be roasted for hours. That’s not for me”.
Truth to be told – I did have a point. I was in my early 30s, I’ve been on a relatively high management position at my then-company (JAGGAER), I was leading three teams, making solid money and life was pretty good. I also just started getting into public speaking, started my first blog (this one), had a great relationship, lived alone, traveled a lot and basically enjoyed the fruits of the seed I planted years ago. Why throw all of that down the sink and go back to the path I had to walk some 15 years ago? Path of working my ass off, working crazy hours and, on top of all that, preparing for interview as if I was a twenty-something fresh grad with nothing else to do but work their butt off to join Big Tech? I mean, right at that point, I haven’t had a single interview in almost 15 years! Yes, I interviewed ONCE in my life, got my first job as a programmer and everything after that was people taking me with them! My manager would move somewhere and take me as well. And it was great – I kept getting salary bumps and haven’t had to do a single interview. Career was good!
But here’s the deal – I’m a highly competitive person. And before you think I’m bragging and how that’s a great thing – trust me, it has it’s pros but it comes with shitload of cons. I actually spent majority of 7+ years in REBT therapy trying to fight my daemons. And those daemons are not coming from the place of enlightement, wisdom or high energy, but they are rather coming from the place of low self-esteem. I always suffered from, you guessed it, lowered self-esteem and I just had to deal with bunch of insecurities. I always was, and still am, insecure in my looks, my intelligence, my performance, my appearance, … you name it and I’m probably anxious about it. And competition was something that I always had to do in order to prove to others (and myself) that I’m worth of something. Constant competition was how I fought those daemons.
My brother played on my competition card here. He posed a virtually impossible challenge (join Microsoft) and he gently pushed back on my reasoning by doing something that he probably wasn’t even aware of in the first place – “I think that for managerial positions you don’t need to do LeetCode. It’s probably just behavior + system design”. This gave me HOPE.
But, why Microsoft?
Because they build Databases. And building a database was a dream of mine for as long as I could remember! But let me first tell you how I got there.
Being unconfident competitive perfectionist with incurable case of imposter syndrome has some good traits as well. And as I already said, 7+ years of REBT therapy taught me that not every challenge is worth fighting for. It might sound funny but it actually is quite tricky – the best way to get low self-esteemed perfectionist to do something for you is to tell them that something is impossible to be done in the first place. Say the words and watch the magic happen.
As for the Databases part, you might laugh all you want, but I became obsessed with databases some time back in 2000s. It was a time when mIRC and IRC were pretty popular among geeks. The time when ADSL and always-online started becoming a thing in Serbia. I was introduced to databases through what could probably be called pure coincidence. I think I was in my early days in high school, but pretty much everybody was aware that I’ll be the guy who will be doing stuff with computers. Mind you, in early 2000s, being a computer guy was a rather bad rep and there were lots of printers to fix.
As luck would have it, my mom heard of some government organized course (or at least I think it was government organized?) where they sent some older folks to teach them how to use computers. She thought it would be cool to enroll me as well and she somehow got me a seat. I still have no idea how, but I ended up sharing the classroom with folks in their 50s and 60s, most of them who never ever held a computer mouse in their life. Now that I think of it, I guess it was the early days of trying to modernize government workers and introduce them to digitalization.
If you’re at a point where you’re utterly confused on where this story is going – stay with me. It will all make sense. So I start attending these lectures with these older ladies and gents, and first couple of classes were about how you actually USE the computer. Use as in – here’s a keyboard, here’s a mouse, these are the Icons, etc. I was nailing it! And I was actually helping them navigate around 🙂 Well, to make the long story short, couple of lectures into it, and they switch to talking about – databases. Specifically – it was some early version of SQL Server 🙂 My best guess would be SQL Server 2000 or 2005.
I was FASCINATED. Absolutely and utterly fascinated. I was already writing codes in BASIC and C and doing some mIRC scripting back & forth, but I never even heard of databases. And hell, this crazy database was capable of doing A LOT of stuff and it was just mind-blowing.
My first attempt at developing a database was in those early 2000s, and I tried doing it in mIRC. Specifically – using mIRC Scripting. To this day I can’t really tell you why, but I was so engrossed in idea of “building a database”, possibly because it posed a challenge on it’s own, that I just had to do it the only way I felt familiar with at the time – using mIRC scripting language (offtopic but did you actualy know that mIRC is still actively developed?).
One of the challenges I experienced was that I couldn’t get mIRC Scripts to compile to EXE, which was, obviously, the only blocker on my path to developing a fully working database, so I headed to Mikroknjiga and purchased a copy of “The C Programming Language” by Dennis Ritchie and Brian Kernighan. I vividly remember getting stuck at Pointers & Reference, eventually running away from them for 20+ years. It was only recently (in my early 30s) that I felt comfortable enough to write about them.
Even though I ran away from pointers, the idea of building a database stayed with me. I fell in love. I fell in love to the point that in every company I worked in, I eventually became “the guy who knows the databases”. I just found them outmost fascinating and I always kept the dream of trying to build one. But as luck would have it, aside from that brief mingle with SQL Server 2000-something, never again did I work with it. It was always either MySQL or PostgreSQL and it stayed like that for 15 years. That is – until my brother came with his “stupid” idea of me joining the Microsoft. And I knew that Microsoft is behind SQL Server, which meant there’s a chance that I could actually go and WORK on an ACTUAL database that got me hooked to databases some 20+ years ago! Talk about coincidences 🙂
First contact
My brother telling me that applying for managerial position didn’t require you to do code test was enough of a trigger to go and give it a shot. I went to Microsoft’s career page, found some job ads for Senior Engineering Managers in Belgrade and I applied. Frankly speaking, I had zero expectations that they will call me, because, as I said above, I never considered myself to be even remotely good enough to be even invited for the interview.
As luck would have it, they actually DID invite me. And this was, in all honesty, the transforming moment. The moment when I realized that my career and my knowledge might actually be OK enough to be invited for Microsoft interview. Damn! To say that I was excited would be an understatement. I was exhilarated! Myself being invited for a Microsoft interview? Hell, just being able to brag around that I was invited would be enough!
First contact with Microsoft was with this amazing guy – Andreja (who sadly ended up being affected with layoffs in 2023). And to tell you the truth, I fully expected some over-confident stone-faced calm dude. I mean – he works in Microsoft and he has every damn right to be over-confident and maybe a bit arrogant. It comes with the fact that you are employed by one of the best employers in the world (and THE BEST in Serbia).
To my surprise, I met incredibly warm, welcoming, smiling and incredibly positive guy. Definitely not what I expected. Damn. Andreja introduced himself, explained how the process works and what they are looking for, and he appeared to be genuinely curious about myself and my career. I later learned that he was only working with “high profile candidates”. Even though I never passed as high profile guy, the sheer idea that I could even get into competition was fullfiling enough.
Andreja explained that the next step would be a Code Test, which, to tell you the truth, I wasn’t really expecting. I asked if I could take some weeks to refresh my knowledge of algorithms and he said that it’s not a problem at all. And so I did. I naively thought that all I need to do is just “refresh” my memory and reach back and nail down that code test. Easy peasy.
Stupid thinking, I’ll tell you that. What I soon realized is that I couldn’t solve a SINGLE problem from Cracking the Coding Interview book. A single problem. Reversing a linked-list? Ha ha. Search algos? Ha ha ha. I sucked! And let me tell you – realizing that you SUCK, after almost 15 years of amazing career, really feels like a punch in the gut. A hard one. Do you go back to being junior and doing juniorish stuff, hammerng the code problems as if you were a new-grad? Or do you give up the idea altogether and go back to your cushy career and enjoy the fruits of your hard work? I chose the former, because, you know, I like competing.
I made a decision right there and then – it doesn’t matter whether it takes me 3 or 10 years, but I will, eventually, get into Microsoft. It became a goal. An obsession. One that I knew I will eventually reach. The question shifted to HOW. And that’s what I will talk about next.
Preparation
This is probably the shittiest part. It doesn’t matter whether you are a fresh-grad or industry-veteran, you are expected to brush up your skills on the LeetCode-style problems. And yes, it sucks. And yes, it doesn’t reflect the reality of what you are going to be working on. And yes, it sucks big time. But hey, nobody’s forcing you to do it and you are free to skip the Big Tech and go for a company with less strict process.
There’s really a lot of argument over whether this approach makes sense or not. Personally, I’m on the side that argues that these interviews DO make sense, and I’ll tell you why.
For one thing, having some 10-15 years under your belt and still deciding to go and “grind” the leetcode style problems shows determination. Absolute and pure determination. Determination to do whatever it takes to reach your goal. Feel free to argue all you want but if for nothing else – it shows that you CAN and WILL DO whatever it takes.
In my case, it really pushed me towards and almost over the limit. Well, the perceived limit at least. Given that I had a full time job and that I was working out 5-times a week, like a clockwork, grinding Leetcode meant that I’d have to wake up between 5:30 and 6AM and spend 30-40 mins doing the problems. Every single day. Frankly speaking, I can’t even count the number of times I felt like giving up. Probably like every third day or so. Seriously. I’d wake up and be like – “do I really want to be doing this shit? Like, REALLY REALLY? Like, is it even worth it? Probably not and it’ll probably be for nothing and I’ll just learn that I invested hours that I could have spent sleeping …”. Hint: I wrote a full-blown article about that bitchy inner voice.
What’s even worse, there were days where I’d feel just plain stupid. Every time I couldn’t solve a problem, I’d feel depressed and stupid. “I surely should be able to solve all these problems by now, right? Because if not, that probably means I’m not Microsoft material. So why not just quit immediately and spare myself the misery?”. Hint: It’s all worth it. And you, just like myself, aren’t stupid.
Long story made short, one thing that I definitely confirmed is that hard work DOES pay off. The only question is WHEN. WHEN will it pay off. Because eventually it does, if you keep showing up.
Another important thing that I’ve learned from grinding Leetcode is how to communicate my thoughts. And I actually find this to be very valuable skill. I had to practice communicating what I’m thinking because I knew that the interviewer would expect to hear and, hopefully, understand my train of thoughts. This, I have to say, really pays off in dividens because over and over do I find myself communicating my thoughts to my colleagues the way I probably never did before.
Those two – pushing through the pain and communicating the thoughts are probably the biggest wins of Leetcode stuff. The problems themselves and data structures and whatnot are tertiary, if even that. It’s surely nice to know the big O of popular algorithms, and sure as hell is interesting to be familiar with dynamic programming, but chances of using it on a day-to-day basis are very slim. But that’s OK, because, in my opinion, that’s not even the point of these interviews.
Going back to the whole preparation story, I was simply aware that I could spend only limited amount of time doing Leetcode. So my plan was the following – wake up every morning between 5:30 and 6AM and do one medium Leetcode problem for 35 minutes. If I couldn’t get it done in 35minutes, I’d just go and look up the solution, cry a bit over it, contemplate how stupid I am and proceed with my day.
My reasoning was very simple, and I actually read it on Reddit – lots of people simply argued that if you can’t solve a problem within 30ish minutes, you might as well give up and call it a day, becase you’ll fail in interview as well. It made sense, so I stuck to it.
Second part of the puzzle was the amount. I was simply aware that I’m not that smart, but I learned over time that the amount of repetition and strict discipline usually work in my favor. So I just decided to do tons of interviews, by applying at every possibly company I could find, and pretty much grinding the hell out of those. And so I did. I probably did around 50 interviews or so, and I really had all kinds of experiences, ranging from absolute crap, all the way to “these folks are really nice! I’d actually love working with them!”. But one thing that I took from it is that this grind helped as well. I literally practiced the hell out of my communication and presentation skills, which, when it came to Microsoft interviews, really helped me feel a bit less anxious (i.e. I wasn’t worried how I’m going to present myself or how I’m going to talk, because I did those things so many times that it just flowed).
Finally, I was aware that I could apply once every 6 months or so. And let me tell you, one thing I knew that I had was time. I wasn’t in a rush to change the job (I really loved my time at JAGGAER) and I was making pretty good living from it. So I set a simple goal – be it in three or ten years, I’ll eventually get in. Luckily, it took just three attempts and a bit shy of three years (I think?).
The Interviews Themselves
I won’t spend much of the time here because it’s a well-known fact on the process works. You have a talk with a recruiter, then you are asked to take a 3-hour online coding test on Codility where you get four leetcode-style problems to solve (I think you need to solve just three out of four) and if that goes through, next step is four back-to-back interviews within four hours (with around 5mins break between each). These used to be in-person before, but now they are done online where you just share your screen with the interviewer.
What I’d like to mention here is that these four hour interview sessions are some of THE BEST experiences that I’ve had. If you recall what I wrote before, I did tons of interviews with tons of companies, just to get my reps in. And trust me, these four hours with Microsoft folks were THE BEST and THE EASIEST four hours I ever spent.
Funny thing is that there are so many shitty companies out there who are trying to flex their muscles by playing by the “big tech” rules. And these experiences are just horrible. I had a situation with one US Startup where they made me feel so uncomfortable that I actually forgot the basic syntax of Python. And the interviewer, noticing that I obviously had a block, started pushing even more, making me even more uncomfortable in turn. In retrospect, these are literal assholes that you wouldn’t want to interact with anyway.
On the other hand, there were companies like Tenderly and GitStart, where you were obviously interviewed by some smart folks who really wanted to see you succeed. Those were both a real pleasure and a treasure because they showed you that there are companies out there with smart folks who are good at making you feel good during interviews.
And then came Microsoft and four hour long interview. To make the situation even more amusing, that was my third or fourth application (I never reached the final stage before) within a two year span, and, as luck would have it, I just happened to become a father a month or two prior to that. So my plan was simple — do this long interview chain, see where I suck and work on improving that for the next time.
One funny thing that I eventually learned about Microsoft’s interviewers is that these folks don’t feel a need to prove themselves. You know where you are applying at and you know what the game rules are. And, as I’d eventually learn once I joined, there’s an extensive training on how to be successful interviewer. And this is what made this whole experience feel like a breeze!
First interview was pretty much a talk … like literally a sanity check of a sort. Interviewer asked me about my goals, my past experiences, what I’m looking for, why Microsoft, etc. We eventually ended up “arguing” over what creativity is and how it can be stimulated in little children. No tech talk here.
Second interview was with a Senior Engineer and it was your typical Leetcode-type problem. I think I solved it within 20-mins because what you eventually learn is that the more Leetcode grind you do, the better you become at identifying the problems within seconds. I made some mistakes but the interviewer didn’t really take them to heart.
Third and fourth one were a mixture of System Design and coding. I don’t think I’m allowed to share the EXACT problems that they asked, but it’s literally a few keystrokes away on search engine – just search for “big tech system design questions”.
And that was it. As I said, I was pretty much relaxed, partly because I saw it as “yet another exercise before I apply again” and partly because I pretty much did my homework so damn good that I had most of the answers “ready”. I looked forward to the rejection and a follow-up talk with the recruiter on where I should have done better. Little did I know that I have passed the bar 🙂
Welcome to Microsoft
In all honesty, I still remember the day when I saw an email from MDCS recruiter. I obviously expected the rejection, just like before, and I was looking forward to feedback.
Interestingly enough, to this day, my wife claims that my eyes have NEVER sparked with such an excitement as when I read the words: “Congratulations! You’ve passed the Microsoft interview. You will be receiving the offer letter shortly.”. Hell, even writing this makes me relieve that moment. The excitement. The unexpected. The REALITY OF IT.
I can tell you point blank that from the moment that I saw that email, to the moment that I actually signed the contract, I pretty much expected to see another email saying: “We’re sorry, but this was a mistake. You were meant to be rejected. Good luck in your future attempts”. I literally kept refreshing my Inbox, waiting for such an email. An email that would break the euphoria and bring back the reality. Because it just couldn’t have happened that, myself, Mihailo Joksimovic aka Mixa, got an ACCEPTANCE letter from Microsoft. It was SURREAL.
To tell you the truth, even after some 10 months in Microsoft, I still wake up feeling confused and expecting that I was hired by a mistake. Honestly. And what I eventually learned is that I’m not the only one and that so many people go through the same rollercoaster. Because it really IS a privilege to wake up and have an option of going to that building. Opening the door of the Microsoft Development Center in Serbia. Interacting with other people working there. And, you know, just having the privilege of, obviously, being a Microsoft material 🙂
Epilogue
One thing that I failed to mention is that I initially applied as Engineering Manager, but eventually decided to re-apply for IC role. In retrospect, this was likely a great idea because it just reminded myself of how much I loved programming and problem solving!
I ended up joining the Azure SQL team, I have a daily privilege of interacting with the best of the best people out there, I love what I do and … well, hell, I feel embarassed to say that life’s just fucking good!
Appendix: Preparation Materials
Here’s a list of all materials that I’ve used over the course of preparation. Do keep in mind that there’s A LOT and it’s OK to feel overwhelmed, over and over again. It’s okay – you’ll get through 🙂
- Cracking the Coding Interview (CTCI) book — this is the book that both my brother and I started with. I think it’s a great resource primarily to give you an overview of all there is to be prepared and how to actually prepare. Definitely go for a paperback version because it’s likely unreadable on Kindle.
- LeetCode — CTCI is great, but one thing that it lacks is the interactivity. And that’s exactly what you get on LeetCode. You have pretty much all the problems from CTCI book, but you also can try out your code, compare to other people’s solutions, etc. It costs around $35 per month, but it’s absolutely worth it. Keep in mind that I strongly suggest obtaining a copy of CTCI and getting a Leetcode subscription!
- System Design Interview book — there are two volumes of this book, but I purchased the first one only and it did quite a good job for me. What the author did is he pretty much took every possible System Design problem that you could think of, and put it into a book. Hence, it’s a great resource for getting the feel of the breadth of the problems you might experience!
- Designing data-intensive applications book — definitely a goto book for anyone interested in going into the depth of the matter. I read it twice (or thrice) and I still occasionally read it as a refresher. Fun fact: I have a Kindle version and TWO copies of the paperback 🙂
- System Design primer — this is a GitHub repo with tons of materials for sharpening your System Design skills.
- CS6006 MIT Course — even though I put this one to the bottom, this is actually what I started with. It’s basically MIT’s course on Data Structures and Algorithms and it literally contains recorded sessions from the lectures that were given by some of the best professors out there. If you have time on your side and are willing to invest some months into this – it will pay in dividends!