“It will be like drinking from the fire hose”. This is the explanation that people of Reddit would use whenever someone would ask “How working in Microsoft looks like?”. And I couldn’t agree more.
I’ve been thinking about writing this retrospective for a long time. Hell, even when I started, back in September 2022, I was actually thinking if I’ll ever make it long enough to be able to write the two year retro. Because, you know, there’s something important about the two year mark. Something clicks. Because staying for a year is … you know … anyone could make it a year anywhere. Do some onboarding, fake around, left and right, and you make it a year. It’s doable. But two years is, in my view at least, something that marks that you are actually worth of being part of something. So yeah, I was looking forward to the two year mark because it meant that, if I made it, I’d probably be worth the hassle.
I spent the first six months expecting to be fired
I know. Sounds horrible. But it’s a fact. It requires a little bit of a backstory first, so let me start with that.
As I wrote before, at some point in my career, joining Microsoft and working on SQL became a dream of mine. Well, at first it was unimaginable so I didn’t obsess that much, but then it pivoted into a “maybe I could try it at least”, which led to “okay, seems like I might have a chance”, and you get the rest. I went from something unimaginable to this becoming a goal and obsession. It wasn’t a dream anymore but rather a race against the time. A marathon. I got determined to do it so it was only a question of how long will it take me to prepare enough to pass the bar.
At the time, and mind you I’m talking about the time BEFORE I joined, my thinking was like – “well, the hardest part will be making it in; passing the bar. But, once I do make it in and once I do pass the bar, it will be a no brainer. Keep doing what I was doing by then and I’ll rock it. Life will be 100x easier once I make it in and get a chance to demonstrate how good I am”. Stupid thinking, I’ll tell you that. But hell, I had no clue at the time.
Amusingly enough, once I did pass the bar and once I did make it in, at first it did feel like a life’s achievement. A win of a kind. “Well, now that I made it, I can relax and enjoy the deed of all the hard work I invested”. Life’s a song now. Unicorns and rainbows and all that kind of crap. Couple of days in and saying that this idea “faded away” is like saying that tsunami is just an uncomfortable wave.
Couple days in and my life started feeling like someone turned the Imposter Syndrome knob way over to the max value.
Let me start by sharing just SOME of the “amusing” things that I didn’t count on:
- I have never in my life used Visual Studio. Never ever. Hell, I didn’t even know how to navigate around. I even had a funny situation where I didn’t even know how to Cancel a Build. It sucked.
- Last time I touched C++ and/or C# was back in my university days. Mind you, that was around 2008, give or take, so ~14 years ago. Apparently, things seem to have changed since then.
- Last time I used Windows was some 10+ years ago. Mind you, PowerShell didn’t even exist at the time when I used to do anything there. Took me weeks to get used to navigating around.
- I have never, literally never ever logged in into Azure. I was used to AWS because my previous company used it, so I never had need to try Azure. So no, I had no clue about Microsoft Entra (used to be called Azure Active Directory at the time), Identities, Entra Apps and all other funny stuff that you get to learn about rather soon.
- Deploying stuff, In my past experiences meant that you have one or more (as in – 5 – 10) servers where you deploy your stuff. I definitely wasn’t prepared for having so many servers that you have to have the whole machinery and multiple teams to do it. Oh, and yeah, there are so many servers all around the world that they are split into so-called Geo-batches (it’s basically a bunch of batches that you have to group together to form a Geo-batch). It’s A LOT.
- Finally, as if there’s a beginning and end of WHAT THE HECKS I had to deal with, my personal favorite is the tooling. Not only that I wasn’t used to C++ (or more specifically VC++ – the Microsoft’s Windows-aligned version of C++) and C#, but Microsoft and SQL in partucal, literally have their own tooling developed for pretty much everything. And some of those aren’t even public so good luck learning about them outside of Microsoft.
Remember when I said “it’s like drinking from a fire hose”? Yeah. Except that I didn’t know about that back when I started. I expected it to be challenging, but what I met was … HOLY MOTHER OF HELL. WHAT IN THE WORLD IS THIS? M-O-O-N that spells SCREWED. (Yes, I had to make a reference to one of my favorite books …)
Suffice to say, I spent the next 6 months waiting for the news that I’m fired. As simple as that. I did use to think that I’m good and capable, sure, but that pretty much pivoted 180 degrees when I joined. At one point I remember jokingly telling my wife – “you know, I’ll either get fired or make it to the Principal level”. Because, in my mind, if I somehow managed to make it through the trial period, then I guess I’d have discovered the enormous knowledge that will rocket me towrads being a Principal. Spoiler alert: I didn’t make it even remotely to Principal, but it’s been a fun ride so far.
Interestingly enough, what I learned later on is that pretty much everyone who joins has this feeling. The feeling that they will be fired. Expecting the news in each and every 1:1. “It was nice knowing you, but sadly we have to let you go. Sorry ’bout that. Nothing personal.”. And it actually does make sense honestly. It makes sense because, if you think about it, you usually come from environment where you did know SOME competitive people, but that was MINORITY. Well, in most cases at least. But now that you joined, the MAJORITY of people is those heavy-lifting brilliant challenge-seeking competitive master-minds. Like, almost EVERYONE wants to be the best. Everyone who is there joined because they wanted to play the elite league. And most of them deserved it because they are fucking brilliant to begin with. Hell, even the MINORITY, the ones who aren’t the best of the best, are still so incredibly good that there’s simply no way NOT to feel like a complete loser. A lost cause. Imposter Syndrome to its max.
Fun fact: it took me almost two years to feel SOMEWHAT COMFORTABLE with our tech stack. Somewhat as in “at least I’d know WHERE to look or whom to ask”. Fun fact #2: my previous manager who has been with Microsoft for almost ten years, bluntly told me that it took him two years to start feeling like he’s even contributing something meaningful. So there goes that, I guess.
I survived the first six months; and then the layoffs started
It almost sounds like a joke, I know, but that’s really how it worked out. Just as I made it past the six month mark and just as I received a positive review from my manager, Microsoft, among other tech giants, started laying people off. And yes, that affected Serbia as well.
Three of us who joined in September 2022 were literally one of THE LAST (or actually THE LAST?) people that joined in Serbia, so we fully expected that we’ll be the first ones in front of a fire squad. It made perfect sense. So I spent following six months expecting to be fired, but this time at least I could say that I was “laid off from Microsoft”. Sounded better than “being let go”; or so I thought.
As you can imagine, I made it through again, so that went well at least.
Switching back from EM to IC mindset was way harder than I expected
I’ve been Software Engineer (or, Individual Contributor (IC)) for most of my career, but I spent the last few years (prior to joining Microsoft) working as an Engineering Manager (EM). And mind you, that was a HARD switch to make at the time and it definitely posed some challenges that stretched me to my (perceived) limits. Let me tell you – Management job is WAY harder than doing programming. Well, at least the people part of it is. And to be succesful as EM you have to switch to mindset of doing job THROUGH people. And heck, people have way too many unexpected states that they can be in, making working with and through them exceptionally hard.
I somehow adapted and I guess I was OK in my management role, but I can’t really say that I enjoyed it. Heck, I missed being intimate with the code. So, naturally, I applied for IC position, thinking that it will be an easy-peasy transition. Spoiler alert: it wasn’t.
Looking back and reading through my past yearly reviews, it took me some time between 12 and 15 months to readjust to working primarily as Individual Contributor. And I say that based on the feedback that I kept receiving from my then-manager who kept reminding me that, in order to progress in IC role, you need to fully focus on IC work.
Honestly, I’m glad that I did switch and I’m honestly not really sure if I will ever entertain the management position again. I guess I might, in some distant future, but at the moment I definitely am fully focusing on gaining the breadth and depth of technical knowledge.
Adopting new tech stack was tougher than I thought
We’ve all heard the old good “learn one language, and switching to another is a matter of adopting new syntax”, or something along those lines. Yeah … no. Well, in a way yes, but mostly no. Blah.
To cut the long story short, I went from the world of Web Development to the world of Desktop and Cloud Apps, where everything is written in C++ and C# (SQL Server is basically C++ while everything else Azure-related is C#). Combined with the fact that I haven’t used Windows for solid 10+ years and that I had zero knowledge about debugging stuff there, it was a wild ride.
I actually remember when I was writing my second Connect, which is basically a reflection of how you did in the last 6 months, and it was only then that I mentioned that I’m finally feelng like I started grasping the staff I’m working with and that I’m seeing sparks of productivity.
So, yeah, it was tough. Like really tough, especially given the fact that I was used to being hyper-productive guy. Going from that to being completely non-productive in the beginning was painful and I’m extremely happy that I’m over that phase.
Deep-diving with a purpose is amazing
“We need to check if we can do socket duplication before the TLS handshake starts in the Gateway Container”. This is one of my favorite statements and I actually considered naming this whole article after it. It’s my favorite because, just as I assume most of you have no idea what it actually means, so did I have zero clue about it. I heard it and I felt too dumb to ask “what in the world are you saying?!”, so I just acknowledged, hoping that there will come a time when I could use it in a funny context.
Thankfully, the day has come and I can finally use this as one of the greatest perks of working here. I’m the guy who still has vivid and romantic memories of the old days when I used to spend nights trying to reverse-engineer the IRC protocol. I love digging deep and figuring how stuff works. Love it. But the shitty thing is that you don’t always get a chance to do it, and heck, I definitely had ZERO need for it up until I joined here.
In contrast, working here requires me to get a deeper understanding of how stuff works under the hood. It’s not mandatory, sure, but good luck figuring out that Severity 2 incident where you have no idea why one in thousand network requests towards Azure Key Vault end up being rejected by firewall, all with no observable patern. Or why GFlags doesn’t want to play nicely inside Windows Containers. Or some pecularities of TDS and TLS protocols. Yep.
Pretty much every single task that I had to deal with so far required me to gain deep knowledge of underlying tech. Windows’s Internals, Networking, Azure Networking, TLS, TDS, SQL’s Storage engine, … and don’t even get me started with the fact that SQL Server has it’s own “Operating System” on top of existing OS. Yeah. It’s challenging, complex, hard and basically utopia for people with right engineering mindsets.
I should have joined at the beginning of my career
Look, I’m sure many will disagree about this. Many will say that the route I took working for smaller and more intimate companies first made more sense. Others will claim that startups and “being more than just a cog” is the way to elinghtement. Blah. I call bullshit on all of that.
Here is the thing – starting your career in Big Tech sets you up for success. Period. All the ground work is already done, all the processes are set up, the career ladder is set, old people with battle scars are there, etc. It simply sets you up for a good path because there were many people before you who spent DECADES (yes, DECADES) paving the way towards the systems that are still working 30+ years later. And yes, maybe it’s not as exciting as starting yet-another AI company and being at the front-lines of reinventing the wheel, but long-term, I absolutely guarantee you that having a STRONG foundation becomes way more important. Hell, that’s why we have universities after all.
So, for one, you get extremely strong foundation that you can then apply to yet-another-AI-startup, or whatever else is your cup of tea. And trust me, many companies lack that knowledge so it’s extremely valuable.
For two, you get to make some amazing contacts. And these amazing contacts matter A LOT as your career progresses.
For three, let’s be real – salary is pretty good. It might not be on paar with some, you guessed it, crazy-funded startup that’s being hyped up, but I’d still claim it’s in 95th percentile, if not more. So yeah, finances will NOT be one of your problems.
And for four, having, say, 5-6 years of big tech on your resume would definitely make you stand out, if you ever even need to go down the route of sending your CV.
You can do everything on hyperscale
Everything is hyper-scaled. Really. Which can be both good and a bad thing, depending on how you look at it.
Personally, I find it to be useful because it allows you to do a lot of the thing that you want to do. For example, I always loved doing interviews and I consider them as one of the rather important skills to have. So, naturally, I applied to do interviews in here as well. Well, lo and behold, I got a chance to do 29 interviews in two months period, simply because there were enough candidates and job positions. I could have done even more for sure, and there are still tons of hiring events every month.
Another example would be trying to observe specific behavior of a feature you developed. Given that there are hundreds of thousands of deployments, you can easily dig through telemetry and observe the specific behavior at scale.
Want to sharpen the “working with customers” skill? No prob, tons of opportunities for that.
Want to try something else? Hey, there are like MILLION things happening in hundreds of different areas, and mind you I’m talking only about Microsoft Dev Center in Serbia.
So, what I consider one of the big perks is that whatever you want to do, you can do it on unimaginable scale of things simply because there’s enough opportunity and data to try it out.
What’s next?
No idea. Honestly. I’m at a point where I just love what I do, am happy to have a chance to work with some really cool teammates, and finally there’s simply tons of stuff that I want to explore and learn more about. And as short and simple as that sounds, coupled with hyperactive toddler I have at home, I’d say that’s more than enough to fill up my plate for the next period. And yep, I’m definitely looking forward to writing a 4 year retro at some point 🙂