Company: Microsoft
Date: 2015-06-17
Overall rating: 4/5
Employment status: former
Experience level: Senior

Reflecting on a decade
Pros: Foundation - Microsoft is a great place to learn and to explore.  Sure, the first year of employment, you'll be trying to figure out our process around planning, developing, testing, code reviews, checking in code, opening bugs, tracking bugs to builds, build process, talking to others in a 'diplomatic' manner but you'll learn how software is delivered and be able to articulate it.  Microsoft is good at formalizing workflows which is good if you've never worked with a large team.  You'll think of things from security, efficiency, even variable and method names (for public APIs), they have a team dedicate to reviewing and teaching you.

Structure - If you're a fan of process and structure, there's a lot.  Some people hate it, but if you ask "why?" instead of complain, you'll often see a reason and if not, you can always find ways to improve it.

Movement - Microsoft is huge and work on many things.  The benefit of being able to transfer teams to learn new things is amazing.  I started working at Microsoft on the front end of some silly application that no longer exists, a year later, I was working on the kernel drivers of their embedded platform.

Security - You'll always be able to pay your bills.  There's only ever been one layoff in my 9 years at Microsoft that has shocked me.  Benefits are spectacular.

Flexible - as structured as the process goes, managers are always willing to be flexible on hours.  It's great for life balance as the demand of life outside of work changes - new parents, family health issues.  When my child was born I would be out at 4:30 and work remotely after my kid was in bed.

Every team at Microsoft varies on the structure and culture, something will usually fit you.
Cons: External Movement - back in the early 2000s, having Microsoft on your resume would open doors.  While it's still relatively true (recruiters from FB, GOOG, AMZN will always try to recruit you) getting into smaller companies is hard.  I had a few interviews that had a clear bias towards my experience because Microsoft was seen to be "old school" in their software development practices.

The Lifers - Sensitive topic, but there are some folks who basically understand the security of their job at Microsoft [see pro].  There are several people who are waiting for retirement and are working 10 am - 4pm hours.  This is hard because they tend to resist any change or are non-responsive if you email them at 4:01 PM.  It's hard to feel everyone has a shared passion for what they're working on.

The ball drop - Ultimately, somebody down the chain drops the ball.  A project with a ton of passionate engineers delivers but the hardware team drops the ball and creates garbage.  Or a perfect device but marketing creates these commercials that look like something my 3 year old made.  Or a great platform with no ecosystem because the developer tools are hard to use.

The rat race - at some point in my 9 years, I subscribed to the idea of 'get promoted, otherwise I'm not growing!'  Because the entire pay grade and responsibility is tied to your level, it's somewhat true, but when people start working the system, they are merely trying to get promotions (visible projects, taking on responsibilities at the next level) and not deliver solid work at their current level.  I've seen projects where senior engineers were off trying to find things to get them to principle while they let their SDEs and SDE 2's architect the project.  The code was a mess and I was surprised it didn't deadlock more often, but these are things that could have been fixed if their seniors architected the project instead of making them do the cross-team integration work.  Not great if those engineers want to code but are being forced into PM-ish sort of roles.  It's easy to get sucked into the need of perpetual promotions.