I'll never forget my first day at Microsoft. The new carpet smell (which is still there) in Building 92 seems so fresh in my mind. That first day was new employee orientation, better known as NEO, and it was my first look at the company as an employee. Diana dropped me off, almost six months pregnant, since we didn't have our cars yet. We had been in town less than three days, and were living in a temporary apartment. The weather was miserable and rainy.
The second day, I cracked open my new computer and installed stuff, did some pairing with my future officemate, and got to know the part of DevDiv then known as Server and Tools Online, home base for MSDN and TechNet. The week was filled with moving in to our apartment, getting licenses and figuring out what the fastest way to work was. Then Thanksgiving came, and then we went to Disney World for a week.
Those first three months were incredibly difficult for me. I had moved 2,500 miles, was living in a city I was completely unfamiliar with, and I was about to become a father. Even Microsoft itself was a huge distraction, and I couldn't wrap my head around the fact that I was there. My actual work probably wasn't very good at that time.
After Simon was born, in some ways it felt like it was easier to engage. Over that next year, I would have many discussions with my boss about where I might best fit in the company, and a program manager gig seemed to better align with the path I was headed down prior to joining the company. Eventually I would score one of those gigs, in the Cloud Services Team, where I had my last free soda.
I actually had two near-misses prior to landing my last gig that would have dramatically changed the outcome of my Microsoft experience, and probably would have kept us in Seattle for a lot longer. As I've said previously, I wasn't leaving because of Microsoft, but it wasn't keeping me there either. The first came less than a year in, when a program manager position opened up in the group I worked in, and frankly, the skills it required and components it involved were made for me. The hiring manager was even enthusiastic about it, to a surprising extent. Unfortunately, he was too worried about making the position a certain level, two up from my own, for appearance sake and not for any reason related to the job itself. It went nowhere, despite my best effort.
The second near-miss I don't feel bad about, but it was disappointing. In January I did an interview loop for a PM gig running a dev team that built shared test tools for Microsoft Game Studios. Everything about the job was interesting, in that the org was completely non-traditional in terms of structure, the product was interesting, and the energy was amazing. It would even give me the opportunity to mentor developers. When it came down to it, I actually passed the interview loop with flying colors, but the other guy being considered had just a little more experience than me. Ouch. The excitement around that part of campus is intoxicating, and it still stings a little when I'm over there and not a part of it.
Not counting the ups and downs around identifying my place in the company, I found working for the company pretty cool. It's definitely not for everyone, for reasons I'll explain later, but I'm grateful for the opportunity. There's a certain satisfaction that your ego has, too, about working at Microsoft. I mean, it's Microsoft, arguably one of the most historically important companies, software or otherwise, in American history. Not saying that they don't hire stupid people, but the path to getting in is rigorous, and I did it twice (for my initial hire, and job change). Granted, this distinction doesn't entirely carry the weight you might think if you consider that you share it with 90,000 other people. It certainly wins you a certain amount of respect as well, and this became particularly obvious when I started looking, whether it was in Seattle or Cleveland.
There's certainly something addictive about the potential for wealth when you work there. Even with the high cost of real estate, you won't be hurting there. With stock awards vesting and bonuses, it's no wonder that people buy expensive cars in cash, if they're into that sort of thing. That's the funny thing though, that despite the money, it's still a T-shirt and jeans culture, and a lot of folks choose to stick with practical cars. I suppose status means a lot less if everyone around you is also doing well, and that does cut down on pretentious stupidity, especially among developers.
The benefits are the best in the industry. I don't know any other way to put it. You don't pay anything for health insurance. No co-pays, no deductibles. The only thing we paid for around Simon's birth was the extra in-out of the parking lot. You get free public transportation, free private transportation, discounts all over town for everything, they even skipped fees for our apartment application. Extra time off is given pretty liberally in certain groups. Morale events are completely kick-ass, and I drank more for free at work than I ever did at home. The company really goes out of its way to make you comfortable. Free beverages seem like an obvious perk, especially in this line of work. I also appreciated the company matching of charitable contributions, up to $12k a year.
One of the things that I'll miss is access. Particularly when I was working in DevDiv, it was really fascinating to see some of the products grow up, and being able to mess with them before they were done. It was very cool that if you wanted to know more about something, you could literally find the person who wrote the code and ask them. It was neat to see the phone and Kinect up close before they were "real." I suppose it's another angle of being "in," even if you do share that distinction with so many other people.
The free stuff is great, too. The free phone, which AT&T turned into a free phone for me and Diana, was pretty great. The free Kinect from beta testing was another big one. Free MSDN subscription was always convenient (though quasi-useless since you can get everything there from an internal network share as needed). The company store was outstanding for super cheap Xbox Live subs, controller replacements and hardware. I can continue to have access to that, at least, if I join the alumni association. Yes, there's an alumni association for former employees.
It's hard for me to make a lot of generalizations about Microsoft, because it's too big to do so in most cases. I get annoyed when some dickhead on some tech news site says something like, "Microsoft can't do this because of that." It's like saying, "Microsoft can't cut the grass because of pi." It doesn't make any sense. The Xbox is a long way from Excel, which is a long way from Bing. You just can't connect the dots like that in a company that big.
That said, there are some bigger picture things that I think you can say about the company that certainly get in the way. They're not deal-breakers that will sink the company, but stuff that I wish could change, or change faster.
Much is made of work-life balance. I did a focus group once where one of the participants asked me if I ever went home. It generally just depends on where you work. I never, ever had an issue with work-life balance. Sure, there were two or three times where I either came in really early or stayed a little later to get something done, but where I worked, this was a non-issue. I've heard of people in other groups that are expected to put in ridiculous hours, but whatever, they must be OK with it or they'd be smart enough to move to something else.
There are definitely two Microsofts right now. On one hand, you have the forward looking, experimental, agile and fast moving side. On the other, you have the old school, slow, waterfall side. Both have brilliant people, but the latter is a bit stuck in its bubble. It doesn't know any better, and it isn't that interested in knowing that there is a faster way. Its people spend a ton of time on design up front, it's less collaborative and dudes have four or five computers under their desk instead of VM's. People are actually paid to worry about keeping window offices open, while interior offices are doubled up, because of some kind of seniority concerns (nevermind that groups should be in team rooms).
New Microsoft, on the other hand, is awesome. In some ways, it's more highly influenced by the outside world, with people who came from the industry, but not always. It builds quick prototypes, it iterates quickly on ideas, gets feedback and is not bound to rigid "traditional" organizational structure. People collaborate in team rooms and blur the responsibility between roles. It's a lot more fun. It's the Microsoft that I most identify with, and I don't think it's that hard to see from the outside which parts engage in that manner.
I'm not a fan of the entire HR process, in terms of reviews and promotions. While I personally did not have a negative experience, I think it's a crappy way to manage a workforce, and that includes the new system, a largely lateral move. The first problem is that there's an obsession with promotion. If you're not moving up, you should move out. There are two problems with that, the first being that awesome people who are frankly well-suited for a particular level are given bad reviews simply for not advancing. I hate that, because I've personally hired people in other jobs that were excellent heads-down code monkeys completely satisfied with their place in the machine. The other problem is that it doesn't trust managers to hire people. Good hiring managers with great teams still have to pick winners and losers, and crappy managers with crappy teams have to pick winners and losers.
That career model, emphasizing advancement, also makes it hard for people to find a good fit. For me personally, I've had more success managing people than writing the most awesome code in history (relative to each other... I like to think I still write good code). But I can't just skip the coding and start managing people and processes, I have to go up the individual contributor coder ranks. Conversely, some people have no business managing people, and don't want to, but if they want to advance, that's usually the only path they have. This is compounded by some degree of siloing between dev and PM disciplines, which isn't good for people who don't fit neatly within those lines. I have a number of friends in the industry who I know would have a hard time fitting in because of those lines, which is a shame because they're brilliant, valuable people. It's not to say the whole company is like that, but it does seem like the "normal" for most of it.
All of that aside, it's hard to find many places where you can meet so many brilliant people. They're not what you'd think, either, as they range from high school diplomas up to PhD's, and everything in between. Many majored in something other than computer science. They come from all over the world. Unless you're an idiot who doesn't pay attention, working there will make you better at what you do.
People often ask me, "Do you think I should work at Microsoft?" If you're interested in something the company does, then yes, of course. Remember, interviewing with any company is a two-way street. If you can get in the front door and do an interview loop, it's just as much a chance for you to check them out as it is for them to evaluate you. I did it a year and a half before I got hired, and it was awful. The experience even soured me on Microsoft, but as I said before, it's a huge company. I'd sooner endure daily colonoscopies than work in Windows or Office, but I'd like to think there's something for everyone.
The thing that will really stick with me is my time in DevDiv, in what used to be STO. Those were really good times. Exciting, too, with the launch of Visual Studio 2010, .NET 4, ASP.NET MVC 3, etc. I can't say enough good things about the people I worked with there. I got the thing that I wanted most out of a job, and didn't have since the lay-offs at Insurance.com: The people made me better. I wouldn't trade that experience for anything. Leaving was one of the hardest decisions of my life.