It seems like there's a lot of public interest in what it's like to work at Microsoft. Here's my personal persepctive on the good (), the bad (), and the in-between ().
Background
As a long-time Apple and UNIX user/programmer, I never aspired to work at Microsoft. (And I'm still a little surprised to be here.) I've never despised Microsoft like so many people seem to do — it's just that Microsoft products weren't a part of my world.
Then my wife got a job at Microsoft, so I needed to leave Caltech/JPL to work in Seattle. I didn't actually apply to Microsoft — a friend of ours who worked there circulated my résumé and Microsoft responded rapidly and set up a last-minute interview. Although I had five other offers, Microsoft made the best impression.
And so, here I am. I've been working at Microsoft since October, 1999 as a full-time Software Design Engineer. In that time, I've worked for three teams in two divisions, and had six or seven different managers. Four products I've worked on have shipped, two more are in beta, and I've also "consulted" for many other teams across the company, thereby influencing directly and indirectly a large number of Microsoft's products.
Between my experience and my wife's, I think I've gotten a pretty solid feel for what it's like to work in a product group at Microsoft.
Focus
As much as I enjoyed working at Caltech/JPL, it wasn't until I got to Microsoft that I realized that there's an enormous difference between working for a software company and a company where software is just a step towards some other goal (space science, finance, medicine, retail, etc.).
Everyone at Microsoft "gets" software — the managers, the administrative assistants, the vice presidents... Even many of the "blue collar" workers (cooks, janitors, bus drivers) know something about software — it's not normal! At NASA, most managers and even some scientists had no real understanding of software or software development. Elevating the common denominator in this way makes Microsoft a wonderful workplace for people who love making software (even if it's far removed from the reality of "the real world", which can cause other problems, like overinflating the importance of software).
Unreality
As a parent, I've come to understand that there's a wide gray area between overprotecting your children and creating a nuturing environment in which they can develop.
I think Microsoft struggles with a similar problem with its employees. Microsoft provides its employees with a nuturing environment in which they can be most productive. But like children, these employees also need to be grounded in reality and exposed to ideas that can be disruptive or even disturbing. Otherwise a sheltered monoculture can develop that's unhealthy for everyone involved.
It's hard for people who don't work at Microsoft's main campus to understand just how unreal the experience of working there can become. Some employees forget that most of the world doesn't have broadband wireless networking, high-end consumer electronics, luxury vehicles, and enough money that they don't need to live on a budget. Some employees spend so much time using Microsoft products, that they forget about the competition and/or lose touch with typical customers' needs.
Personal Freedom
One thing that's worth losing touch with is the strict work environment.
Microsoft gives software developers a lot of personal freedom over both the work and the work environment. I order my own supplies, customize my office as I see fit, schedule my own trips and meetings, and select my own training courses. I choose when I show up for work and when I leave, and what to wear while I'm there. I can eat on campus or off, reheat something from home in the kitchen or scavenge leftovers from meetings. I can even work remotely from home (within reason).
For the most part, I determine what I work on and when I will get it done. There are exceptions — tasks others ask you to do for them, external deadlines or dependencies — but these goals are set cooperatively with your management and coworkers, taking into account your interests and abilities.
I have total control over my choice of development tools. Of course, there are advantages to matching the "official" build environment, and in a team environment there are also advantages to sharing tools and processes across the team. But ultimately the choice is mine: I can code with vi on a Macintosh, Visual Studio on a Windows machine, ink on a Tablet PC, or whatever I desire.
Except for semi-annual reviews, there's almost no paperwork for a software developer at Microsoft. There are no timecards to fill out, no requisition forms, no authorizations or permission slips.
Having so much individual freedom can lead to problems. It's well-publicized that Microsoft has historically exercised too little review over purchasing decisions. Also, the freedoms I've described can vary from one work group to the next; for example, one friend's manager gave him a very hard time over the unusual hours he worked (even trying to fire him for it). But thieves and jerks exist everywhere; they're just taking unfair advantage of the great personal freedoms the rest of us cherish.
I think Microsoft provides a great example to other corporations of what a productive work environment can be like.
Company Leadership
Bill Gates and Steve Ballmer get most of the press, but it's an open secret that all of the division heads (and their staff, and their staff) are top-notch. I'm (happily) oblivious to how that circle operates, so I can only judge them on their results.
Given that Microsoft's been convicted of monopolistic practices, it may shock you when I say that Microsoft's upper management strikes me as very ethical. They talk about ethical behavior all the time, and as far as I've seen, lead by example. Maybe I'm being naive, but I find Microsoft's upper management to be very trustworthy. They're also thinking very far ahead, and doing a good job getting the information they need to make solid decisions.
Microsoft's leaders are also very generous, and frequently encourage the rest of us to make charitable donations (both money and time) a priority. Giving is a large part of Microsoft's corporate culture.
It's refreshing to work at a company where you can trust that the upper echelon is smart, hardworking, and making right decisions. I don't have to worry that my general manager or vice-president will drive our division (or company) into the ground through incompetence or greed. Microsoft's no Enron or WorldCom.
Managers
In contrast, most of the middle management should be tossed.
Did I mention I've had six or seven managers in five years? I've only changed jobs twice — the others were "churn" caused by reorganizations or managers otherwise being reassigned. In fact, in the month between when I was hired and when I started, the person who was going to be my manager (we'd already had several phone/email conversations) changed! It's seven if you count that, six if you don't.
None of these managers were as good as my best manager at NASA. Of the six-seven managers I've had, I'd relish working for (or with) only two of them again. Two were so awful that if they were hired into my current organization (even on another team), I'd quit on the spot. The other two-three were "nngh" -- no significant impact on my life one way or another. I'd love to think this is some kind of fluke, that I've just been unlucky, but many other Microsoft employees have shared similar experiences with me.
I think part of the problem is that Microsoft doesn't generally hire software developers for their people- or leadership-skills, but all dev leads were developers first. Part of the problem is also that (unlike some companies that promote incompetence) good leads are usually promoted into higher positions quickly, so the companies best managers rise to the top. Consequently, the lower ranks are filled with managers who either have no interest in advancing up the management chain (which is fine) or else are below-average in their management skills (which is not).
But it's more complex than this. At Microsoft, many managers still contribute as individuals (e.g., writing code) and are then judged on that performance (which is mostly objective) as much or more than they're judged on their leadership performance (which is mostly subjective). Because individual developers have so much freedom and responsibility, it's easy and typical to give individuals all the credit or blame for their performance, without regard to the manager's impact. Conversely, managers' performance often does not translate into tangible effects for their teams (other than the joy or misery of working for them). For example, I can still get a great review score even if my manager is terrible. I think these factors contribute to management skills being undervalued.
Microsoft also suffers from a phenomenon that I've seen at other companies. I describe this as the "personality cult," wherein one mid-level manager accumulates a handful of loyal "fans" and moves with them from project to project. Typically the manager gets hired into a new group, and (once established) starts bringing in the rest of his/her fanclub. Once one of these "cults" is entrenched, everyone else can either give up from frustration and transfer to another team, or else wait for the cult to eventually leave (and hope the team survives and isn't immediately invaded by another cult). I've seen as many as three cults operating simultaneously side-by-side within a single product group. Rarely, a sizeable revolt happens and the team kicks the cult out. Sometimes, the cult disintegrates (usually taking the team with it). Usually, the cult just moves on to the Next Big Thing, losing or gaining a few members at each transfer.
I think these "cults" are a direct result of Microsoft's review system, in which a mid-level manager has significant control over all the review scores within a 100+ person group (so it's in your best interest to get on his/her good side), and conversely needs only a fraction of that group's total support to succeed as a manager (so it's in his/her best interest to cultivate a loyal fanclub to provide that support). The cult gives the manager the appearance of broad support, and makes the few people who speak out against him/her look like sour grapes unrepresentative of a larger majority. After a string of successes, the manager is nearly invincible.
Fortunately, these managers are unlikely to move further up the ranks, due to the inherent deficiences in their characters (which are usually visible to upper management and enough to prevent their advancement, but not so severe as to warrant firing them).
These "personality cults" always negatively impact the group eventually (while they're there and/or when they leave), but counterintuitively sometimes these personality cults have a large positive initial effect. Many successful Microsoft products have come into existence only through the actions of such personality cults. Some of these products even survived after the personality cult left for the Next Big Thing.
Source Code
I love source code. I love reading it, writing it, thinking about it.
At Microsoft, I've had access to the source code for Halo 1 & 2, Internet Explorer, MDAC, MSXML, the .NET Frameworks and CLR, SQL Server, SQLXML, Virtual PC, Visual Studio, Windows, the Xbox and Xbox Live, and probably several other projects that I've forgotten about. Does it get better than this?
Benefits/Compensation
On the one hand, I'm making more money now than at any other point in my life, and I have all I need — so perhaps I should be satisfied and leave it at that. Overall, I think Microsoft's compensation and benefits package are still above average for the industry, and well above average for the typical American worker.
On the other hand, I and my coworkers have watched many benefits erode or disappear during the past five years. It's public knowledge that raises and annual bonuses have diminished, option grants have been replaced with stock awards, employee stock purchase plan benefits have decreased, and cafeteria and company store prices have increased. For new employees, vacation time has been cut from three weeks to two, and new parents have to take their parental leave within 6 months instead of 12. It's not a positive trend.
Free Soft Drinks
I sometimes joke that the day Microsoft stops providing free soft drinks, I'll quit. At least, everyone else thinks I'm joking.
"Work/Life Balance"
Like most communities, Microsoft has its own language. One oft-used phrase is "work/life balance," which has many nuanced meanings. Taken literally, work/life balance is about finding a healthy balance between the time you spend at work and the time you spend away from it. It's about family relationships (for employees who are married or have children), and the problems that work and work stress cause. It's about the explicit demands that managers, teams, and Microsoft in general place on employees. It's about the implicit demands created when all your co-workers are themselves workaholics.
Microsoft starts off at a disadvantage here, because the people Microsoft hires tend to be driven and a little socially dysfunctional. So employees already tend to screw up their relationships with others and focus on work to the exclusion of everything else, without any encouragement from Microsoft. Also, the Seattle area is known for being somewhat isolating — lots of young, ambitious professionals with no time for making friends.
Microsoft adds jobs that are very mentally challenging, sometimes aggressive product schedules, a campus that's a bit isolated (and isolating) from the outside world, and voilá — you've got all the ingredients for poor work/life balance.
It's not all bad, however — some teams within Microsoft provide extremely supportive work environments. I personally know several large teams in which almost all the employees have families, or in which the team is unusually diverse (for a software company — e.g., >50% women). Naturally, the employees on these teams tend to experience significantly better work/life balance.
Microsoft's Not Evil
I'm probably the last person to end up defending Microsoft. I'm writing this on an Apple Powerbook. I've publically argued for more diversity in computing environments. But there's one thing people do that really drives me nuts: anthropomorphization.
I joined Microsoft at the beginning of the antitrust litigation against the company. My NASA coworkers made all sorts of derogatory comments about my choice. I remember one began a conversation with "So you've decided to go work for The Great Satan, huh?" A lot of people who ought to know better are convinced Microsoft is evil. Apologies if you're one of them — because these people are idiots.
Companies (countries, races, etc.) are not "evil" or "good", and they do not have "intentions." Star Trek is science fiction — there is no Borg mind. Companies, countries, races, and other groups are made up of individuals like you and me, who make individual decisions that determine the group's direction. People who speak of companies (or countries, or races, or other groups) as being good or evil are at best ignorant, and at worst bigots.
The reality is that Microsoft is made up of mostly honest, earnest, hardworking people. People with families. People with hardships. People with ordinary and extraordinary lives. People who make wise and foolish decisions. Some employees are bad apples, and some leaders make poor decisions (which their employees may or may not support). Both usually meet with failure. All the Microsoft employees I know are internally driven to "succeed," where success sometimes means outselling the competition but always means doing your personal best and improving people's lives with your work.
Although groups don't have intentions, it's true that group policies reward some kinds of behavior over others. So perhaps "Microsoft is evil" is shorthand for "Microsoft's policies are evil."
The thing is, I haven't seen any evidence of that on the inside — and I'm usually very critical of these things. For as long as I've worked at Microsoft, ethics have been a real part of employee performance reviews. It's not just talk, but the way work goes each day. Most product designs revolve around addressing specific customer needs. No one ever says "Hey, let's go ruin company P" or other things that could be construed as "evil." Instead, it's "customers Q and R are having trouble with this, and I have an idea how we could fix it..." and other positive, constructive statements.
If anything, Microsoft seems to have the opposite problem, in which employees sometimes design or cut a feature or product without fully appreciating the huge impact their decision can have outside the company. When the media goes wild with knee-jerk reactions for or against something Microsoft did, often the employees responsible for the decision are caught off-guard by the disproportionate public attention.
Influence
Which brings me to: influence. Very few projects at Microsoft have "small" impact. Everywhere you turn, the projects people are working on are likely to be used by thousands or millions of people. You have the opportunity to earn, save, or cost the company millions of dollars through your work. It's an awesome responsibility, but an awesome chance to create widely influential software.
When you've worked in the software industry for awhile, you eventually come to understand that the vast majority of all software is narrowly focused on solving relatively trivial problems. You could go your whole career never working on anything of significance.
Microsoft is so different, and I love that. Your feature might sell 30% more units. Or it might have 8 books written about it. It might be something that millions of people use every single day, that even your non-technical friends and family understand. Or it might be so esoteric that it's impossible to explain even to your friends who work in the industry, and yet so influential that it changes the way software is written. I've personally had most of these experiences at Microsoft, and let me tell you: It feels great!
Microsoft has certainly had its share of useless products and project failures, but by and large it continues to focus on software that matters.