10 ms·
Working at Microsoft – Day to Day Coding
- pedalpete 16y agoI've never read a post by Richard before, I don't want to seem like I'm giving him a hard time, and I'm a happy Windows user, so I'm a big fan of his work. But this article isn't inspiring from a developer perspective. I've worked in a big IT department (300 people I think),as well as start-ups, so I'm not completely blind to the structures of different work environments. When Richard first mentioned that everybody has an office, and that he was allowed to paint his, I thought about how uninspiring that is. Same with describing his hardware. Maybe it's just me, maybe it's Richard, but this article did very little to inspire me to go work for Microsoft. I was hoping for some insight into code planning, the specific challenges faced by building the most popular (at least the most heavily used) desktop consumer operating system. Richard makes it all sound very routine.
- jacques_chester 16y ago> Richard makes it all sound very routine. To me, that is the most impressive part of all.
- jessedhillon 16y agoWhen the first few lines tell me about how surprised I will be, I expected to hear that people are encouraged to be creative, take risks, try working on project that might end up going nowhere -- in other words, that they promote a hacker culture. Unfortunately, the things that the author focused on are not inspiring. Being able to paint your office? Great, but how about week-long hackathons where people can code on whatever they want? Showing the three-level branch hierarchy of your repository doesn't seem to tell me a great story about what it's like to be a dev at MS. Not because there's anything wrong with the branch structure; if you work at a place where coders are given a lot of liberty and freedom, there should be more interesting things to talk about. EDIT: he has another post which talks more about culture and projects here: http://foredecker.wordpress.com/2011/02/27/working-at-microsoft20-time-and-prototypes/ http://foredecker.wordpress.com/2011/02/27/working-at-micros...
- kenjackson 16y agoI have heard that people at MS do something called "app week". This appears to be a week between milestones where you take a week to build something that can be built in a week. Usually just tangentially related to their product. Maybe this author can talk about that at some point.
- sriramk 16y agoAgain very dependent on the team. I've been in teams which specifically carved out time for this and also been in teams where prototyping/building crazy stuff was something you did all the time.
- snprbob86 16y agoMy team (XNA Game Studio) had App Week once or twice each year. By far my favorite time spent at Microsoft. The XNA team is full of ex-game developers because working on platforms at Microsoft has much better "work life balance" than game studios. The stuff that I, and the other team members, created were always cool/fun/hilarious/weird/etc. It was like a week long game jam ending with a Friday afternoon "Think and Drink" where everyone showed off their creations and talked about the good, the bad, and the ugly of our own technology through their App Week experiences.
- kvdr 16y ago>> Great, but how about week-long hackathons where people can code on whatever they want? Showing the three-level branch hierarchy of your repository doesn't seem to tell me a great story about what it's like to be a dev at MS. Not because there's anything wrong with the branch structure; if you work at a place where coders are given a lot of liberty and freedom, there should be more interesting things to talk about. I guess those can be counted as special cases and not pertaining to day-to-day working. The main point to gain from the post it seems is that its not a pain to work in such a complex environment. This is not some web or phone app, its a huge undertaking and how it works in a precise routine.
- InclinedPlane 16y agoMicrosoft treats developers very well. From offices, to hardware, to free gym memberships and health care coverage, to the idea that you're generally not expected to work more than 40 hours a week, it's all great. But that can't and doesn't replace the need for healthy corporate culture and good, intelligent, pragmatic leadership, a lot of which has increasingly been lacking at MS. You'll have a quad core desktop with 8 gigs of RAM, but that hardly helps you play the game of office politics that is often required to get bonuses or promotions (when the company bothers to provide them). It also doesn't help a corporate culture that is becoming increasingly bureaucratic and process oriented rather than results oriented. A lot of talent is and has been evaporating up and out of Microsoft for just these reasons.
- snprbob86 16y agoI was at Microsoft for two internships and two fulltime years. I never once had an office to myself, I always had to share. In fact, the new Studios buildings are almost entirely "6 packs" of cubicles. As for hardware, if you really needed it we were able to get it, but there was a fair bit of scavenging for spare parts to power build/test machines. There was also a shortage of Xbox and especially Win Phone dev kits. My day to day coding experience varied wildly by task. Some stuff had a 2 minute turnaround, most stuff 2 hours, and some stuff several days. The politics, infighting, and Redmond isolationism are all very real, and very painful. That said, the company is huge, so experiences differ broadly across the various orgs.
- tallanvor 16y agoIn the office I work out of only managers have private offices. There are also a few small offices with 2-4 people, but most work in groups of 6-10.
- JanezStupar 16y agoDude... That is still better than work environment I had to endure - 50 developers in a single open area. If that weren't enough - someone decided to sit support for an entire team in the middle of this space, rationale being "that they would like to be close". 6-10 people in a room as long as they are developers is still awesome and productive environment. Edit: I don't work for Microsoft - but wouldn't mind to :)
- johnbender 16y ago"Most people in Windows have a private office – with a door" At my office we've made an effort to keep our workspace communal to the point of removing the 12" dividers that were included with our work tables. This, as you might guess, does result in some distraction but in fostering the relationships at the office people are more apt to like being there. I'm curious how other large companies and startups handle this. [UPDATE] Its important to note that we let people work from home whenever they like. So, in the case where they really need to focus, they have the freedom to do so.
- kenjackson 16y agoI've worked in both environments. Honestly, the best environment, IMO, is working from home -- office is second. Shared office spaces are a distant fourth. I'm the type of person who needs a lot of solitude at some times, and at other times, I love to blast music, pace, juggle, and gorge on chips. When I need the solitude, when I'm in the zone, I don't want you taking a call from your gf, or deciding with some other guys in the office where to eat lunch. Likewise, I may need to spend 12 hours doing nothing that looks productive. Just kind of thinking as I listen to music and do something mindless like pay bills. I feel like at even the most liberal of open floor plan offices I've felt inhibited if I spent a day or two doing what looks like screwing around. And don't get me started on pair programming.
- RK 16y agoI've done it both ways and had different experiences depending on the job. Right now I work about 85% from home. I enjoy going to my (shared) office, but I tend to spend way to much time helping my officemates on their problems when I'm there (can be good or bad). At the startup where I used to work, we had a shared open space. I was doing some coding, but mostly running long simulations, so I had a lot of down time. In that case, distractions were not an issue. My job before that I had my own office, name on the door, view, etc. BUT my project members were on a different floor, which I couldn't actually go to (defense company). That was the main instance when I wish I had a shared office.
- X-Istence 16y ago
- krig 16y agoNothing about his description really does it for me except the prospect of being able to play Skyrim on my work machine when it comes out. I don't like open spaces, but being all alone in an office seems pretty horrible as well: Wouldn't you rather work from home, then? Ah, you say, but then people can't knock on your door to ask questions. Which, again, seems like it's making things worse, I don't want to sit in a closet waiting for people to knock on my door... Around here we work on laptops, coding questions are handled via irc, most of the devs (not that many, <10 total) share a room but there's plenty of space for going elsewhere to get privacy when the hack is strong. edit: laptops with monitor/keyboard at workstations, that is. I don't want to imply that everyone is hunched over a laptop all the time.
- listrophy 16y agoI turned down Microsoft when they recruited me in college. Wow, what a great decision. Now, I run a software firm where no one has an office, everyone pairs (including owners and interns), we have a /slightly/ better ratio than 1 test per 100 SLOC, etc.
- deleted 16y ago[deleted]
- adbge 16y ago> we have a /slightly/ better ratio than 1 test per 100 SLOC, etc. Has TDD really resulted in this becoming a status symbol? :P
- listrophy 16y agoWow, I got blasted on this comment. So, there was a reason why I didn't start spouting our exact LOT/LOC ratio: I have no idea what it is. No one at our office does. That's not the important part. My point is that, on average, one test per 100 LOC is almost definitely not covering much of the logic. I mean... if you have one happy-path test and one expected failing test per block of code, you have one testing context per 200 lines. Two hundred lines!
- nostrademons 16y agoProblem is that all status symbols in the programming world are meaningless, so in the absence of any useful metrics, we latch onto useless ones. Tests/LOC at least measures something, even if it is imperfect. It's probably better than measuring LOC themselves, which are often a long term cost for the company, not a benefit.
- stuhacking 16y agobut, Tests/LLOC seems to state even less than LLOC. LLOC gives an indication of the complexity of the application (or a component). All Tests/LLOC seems to state is that some lines of code exist and potentially, some test cases are testing them.
- boyter 16y agoReading this almost makes me want to cry. It's still all to common these days to find developers with 4 year old machines, comprised of scavanged parts (from people leaving) running Windows XP. A level of bureaucracy forcing you to maintain 3 tickets (at least) in 3 different systems to make even a typo fix in a production system with 3 day minimum turn around time. Servers with less RAM and resources then your 4 year old desktop. Laptops? Too expensive so just use this 8 year old IBM one when we need after hours support. Source control? Use TFS which is the most god awful ticket manager/source control system the world has ever seen. Private office? No, shared space, with people having loud meetings behind the developers at all hours of the work day. Corperate firewall blocking things like stackoverflow. A view from the office? No, other people can have that, you look at a concrete wall. I guess the moral of this is work for a company that values developers. Keep that in mind while looking for a job if you are one.
- mfukar 16y agoWhat about new machines running Windows XP? That's just sad.
- boyter 16y agoMost of my direct managers and indeed everyone else not in IT seems to have a new machine. The majority are running XP.
- thaumaturgy 16y agoAnd for me, it hilighted some of what I've suspected for a while is wrong with Windows development. I own a small company that handles a lot of end-users' various issues. Although I spend most of my time now coding, I spent more than my fair share of time working one-on-one with individuals and companies that were having problems with their systems. I still spend around 10 hours a week doing it. My primary development machine is an aging laptop that can't even play YouTube videos any more without stuttering. I hate almost every minute of using it. It's slow, and limited, and it hangs. So when I write something, I write it to work well on that laptop, because I know there are lots -- lots -- of people out there with similar old hardware, and to say they're frustrated with computers is an understatement. How could a Windows developer possibly understand just how frustrating their product is when they spend all of their time using the most powerful hardware available? How could they possibly understand that Windows file sharing in a mixed environment running SBS 2008 is still complete and miserable and utter garbage, when they're running on a network that hides those kinds of issues? Their development process is great for their developers. No argument there, and I'm totally and unabashedly envious. It's also terrible and completely wrong for most of their many users.
- anon-e-moose 16y agoIf developers always have the fastest machines available, how will they test or care about speed? I hope they have automated benchmarks of common tasks at least. (Although it is obviously good to have things compile as fast as possible.)
- boyter 16y agoIn the case of Windows im sure they have a large test suite which runs benchmarks over tasks to weed out the non performant areas. Not only that in the later builds im sure its tested on thousands of systems to ensure that this code is weeded out in most cases. Honestly, giving your developers a slow machine to "encourage" them to write faster code is a fallacy. The average user is not running multiple databases, multiple IDE's, debuggers, editors, multiple browsers, help documents and all the other programs they require to get stuff done. By all means make the test machine match what the users have but invest (yes it is an investment) in a fast machine for your developers. If nothing else it will make them feel appreciated which will return more then the $1000 odd it will cost to spec their machine up from your users base model.
- checoivan 16y agoyou need the fastest dev box to compile as fast as possible and run unit tests and bvt tests quickly. It's a true pain having to wait 20 or 30 minutes for something to compile and test just to keep working. Performance tests are done separately on machines on a lab and there's lot of them, with components on and off,different configurations etc. In some cases you can simulate slowness like latency or less bandwidth ,as in a client with a 14.4k modem connection, with things like wansim. That allows to automate as much as possible.
- noggleboggle 16y agoI was an intern at msft. they have thousands of machines--consumer grade--constantly running tests.
- dikbrouwer 16y agoI'm a bit confused by this post. The author seems to celebrate a private office. I strongly prefer open work spaces that you share with others, as do many companies I've worked with/seen. Care to share your opinion? I'm curious...
- theoj 16y agoThe idea is that developers should have a quiet, distraction-free space to do their coding. With open spaces and cubicles you hear other people's conversations and you cannot reach the deep focused attention that you need to produce good, bug-free code.
- whakojacko 16y agoA decent semi-open setup has you not seeing much other than your monitor, and not hearing anything because you have good (company paid for) headphones on. And like others have said, If I can always WFH when I feel it is necessary.
- Locke1689 16y agoI shared an office in one situation, worked in an open space in another, and had a private office in a third. Private office was by far the best situation. Being able to grab complete silence when necessary was amazing. Private offices end up being the best about 90% of the time. When you do need to collaborate, conference rooms are available and using laptops isn't hard. Most offices can also support about 2-3 other co-developers with ease. If I had a choice I would choose a private office every time.
- plinkplonk 16y ago"The author seems to celebrate a private office. Care to share your opinion? I'm curious..." From experience, my most preferred to least preferred office options are (1) Work from home (2) private soundproof office with a door (3) shared sound proof office (2 or 3 people in a medium/large room) with a door(4) open work spaces with a maximum of 5-8 people (5) standard cube (6) crowded and noisy "open work spaces" where you can't hear yourself think / get interrupted all the time, especially the "agile" version with enforced pairing and the "buzz of conversation" and so on. The best options give you silence. The least inundate you in noise.
- plinkplonk 16y agoI asked this in the comments section but it disappeared into thin air with no notification on what was happening(say, held for moderation etc).So I'll ask it here. Maybe an HN reader who works for MS might know the answer. From the article, "All managers have laptops. Most prety good ones." Do developers (testers etc) have laptops (pretty good ones)? Or are they "management only" perks? (fwiw all the bodyshopping companies in India follow the "only suits have laptops" pattern)
- checoivan 16y agoLaptops are officially only for managers and Program managers. As a dev/test you can get a loaner for a presentation or find one, somehow.
- plinkplonk 16y ago"Laptops are officially only for managers and Program managers." Heh! That's what I thought :-p Not surprised to hear MS works that way :-). Funny way to economise, making laptops status symbols. I think Google gives devs nice laptops and is probably better off for it.
- rsbaskin 16y agoIt's not really a status symbol. PMs tend to be more mobile, presenting in meetings and such, and need laptops. Devs and testers get much better desktops.
- plinkplonk 16y ago"It's not really a status symbol." A status symbol is, by definition, something only or mostly upper echelons of a hierarchy can get, with fig leaf justifications about why the folks on the lower rungs are "not worthy" of them. The surest way to make anything (a private office, a parking space, a laptop) a status symbol is to mandate that only people above a certain level in the hierarchy can get one.(Note that I am responding to a comment that states that laptops are only for managers and devs have to get "loaners". Other people at MS seem to disagree that this is the case) "Devs and testers get much better desktops." Good desktops aren't an excuse for not having good laptops. The association of laptops with presentations and meetings conveys a lot about MS's approach to development. No wonder the place is infested with multiple layers of redundant management. I wonder how MS Research fares? Do Peyton Jones and co go laptopless too?
- latch 16y agoAn assumption? We've been told pretty directly how complicated the process is (often with pride). See the 14 steps which turn a 5 minute code change into a multi-man-month-mammoth: http://blogs.msdn.com/b/ericlippert/archive/2003/10/28/53298.aspx http://blogs.msdn.com/b/ericlippert/archive/2003/10/28/53298... Or the now infamous Windows Shutdown "crapfest": http://moishelettvin.blogspot.com/2006/11/windows-shutdown-crapfest.html http://moishelettvin.blogspot.com/2006/11/windows-shutdown-c... There's more. And I have no problem with the author stating how great coding is (because he has an office and a nice computer!). However, while your right hand is telling us how great it is and we shouldn't assume otherwise, your left hand is telling us how horrible it is.
- kulkarnic 16y agoWell, you are confusing "complicated" with "difficult". While this is true in general, automation reduces the difficulty of working with a complicated system. For instance, the build system is extremely "complicated". But all you really need to do is to make sure your code compiles, you pass all your local tests, and the BVTs, and you are good to go (oh, and a code review; anyone who objects to a code review is probably shouldn't be coding). When, you, as a developer, satisfy those local conditions, the system automatically works at the global level. Don't get me wrong, complexity is an evil that I'd rather avoid, but it is a necessary evil for creating systems that are useful in the real world; and it is an evil that can be tamed with automation. [Full disclosure: as a former MSFT employee, my thoughts are heavily influenced by the company.]
- rbanffy 16y ago> automation reduces the difficulty of working with a complicated system. Effectively preventing it from ever being simplified. Like you said, complexity is evil and has to be addressed because no amount of automation will correct it.
- andywood 16y agoThis blog post is mainly about the tools developers use day-to-day while they're in coding mode. Tools and development processes do tend to be well thought out and efficient at MS. That's not really related to the organizational dynamics that come into play for planning products and features. That tends to be complicated, involving a lot of people, meetings, and debate. (I'm not defending it, just saying that's how it is.) That 14 steps isn't about a code change; it's about the end-to-end design, implementation, and shipping of a feature, expressed in the most detailed, far-reaching way possible, to make a point about how things operate in a huge organization. Both points of view are accurate, IMHO. When you're strictly coding, things are pretty efficient. Not too surprisingly, those were the times I enjoyed the most. But it's equally true that at MS, coding is only a small piece of a larger, somewhat slow-moving process. And sure, all that other overhead can get tedious, even exasperating at times. It's just a separate subject from what the OP is writing about here. The coding part is typically quite fun and autonomous.
- pacifi30 16y agoThe thing here is not about if Microsoft let their developers use all the new shiny technology but the point to stress here is how much percentage everyday does a developer at MS actually codes, I bet it wont be more than 20%. I am so sure of this because being at Amazon since April last year, I havent coded more then 700 lines of code, bulk of which was supporting new features in the already behemoth software. I always wanted to work for a big company and I was super happy when I finally got a job offer but lately I have realized that the biggest downside of working for a big company is that you dont code, you just add features in to all the in use product, attend meeting and specific for Amazon, be on the pager 24X7. For all you guys coming fresh out of colleges, head to bay area and join a start up, ditch these big companies.
- bmk2000 16y agoThat sucks for you. I've been working at Microsoft for about 4 years. First 2 years as a tester, and the latter 2 years as a dev (still a dev). When I was a tester, I coded 4 days a week with 1 day a week for other investigations (live site issues, meetings, etc.) As a dev, the ratio haven't changed. I still code at least 4 days a week (80% of the time) with 1 day a week for meetings, investigations, documentations, etc. We have a separate operations team that carries pagers. They will do their investigation before I get called. For past 6 months, I got called once. Just in case you are wondering, I work under the Windows Live org.
- egor83 16y agoWhen I was a tester, I coded 4 days a week I'm sorry, but what's the difference between a tester and a developer then?
- kenjackson 16y agoI suspect the type of code you write. As a dev I'd expect you to write code that ships to customers. As a tester you write test code and harnesses. Stuff the customer never directly sees. I think I can honestly say that at ever company I've run or been a manager of influence we've had more lines of test code than product code. Yet I'm still surprised when people say "testers code?"
- deleted 16y ago[deleted]
- 0xEA 16y ago4 PMs to 5 devs seems like overkill. why do this?
- whakojacko 16y agoNot sure why, but from what I hear from friends at MSFT, an approximately equal number of devs, qas, and pms is very standard.
- kenjackson 16y agoI've heard the ratio is dev::test::pm ~= 4::4::1
- projectileboy 16y agoThe author seems to be pounding his chest about how efficient the MSFT code world is, but I was struck by how inefficient it all seemed. Is that just me?
- fierarul 16y agoIf you think about the human and technical scale of what they are doing there, it seems pretty efficient to me.
- prodigal_erik 16y agoI'm startled to see actual use of Visual Studio. When I was there a few years ago, literally every dev I met shunned it in favor of vim (or rarely emacs) and build.exe and windbg, despite pleas from DevDiv for any feedback.
- kingsidharth 16y agoIs it just me or he needed to use some Spell. Check? Oh he was on Windows, as buggy as it gets (code or writing).
- Johngibb 16y agoAs much as this comment nosedived at the end, I have to agree that his typos and misspellings detracted from the article for me. A basic proofread would have prevented this from feeling like it wasn't too well thought out...
- fibonacci1 16y agoI have interned at Microsoft. No intern has a private office. In fact, many interns do not work in offices at all.
- paulcam 16y agoTeam/building dependent. On my team, the vast majority of interns get a private office. When they get doubled, they get doubled into a window office.
- iam 16y agoEveryone certainly does not get their own office. The way it works is that people are given offices sorted by their seniority (years at Microsoft, not your pay grade). So it goes: * 2 people in a non-windowed office * 1 person in a non-windowed office * 1 person in a windowed office * 1 person in a corner windowed office.. etc and people just starting out do end up getting paired up with someone else.
- paulcam 16y agoEntirely depends on team and building. I wasn't doubled up until my 3rd year at MSFT. Even then, it was due to cramped space (bldg 9).
- jdp23 16y agoThe "individual offices" aspect is interesting. Back in the 1980s and early 1990s, when Microsoft went from success to success and the corporate culture got really established, software engineering research showed that developers were more effective with individual offices and big monitors. By 2005/2006, when I was looking at corporate culture at MS, things had changed: with the advent of pair programming and agile methods, many designers and developers are more effective in shared spaces -- and many prefer those environments. NOT cubicle farms, which are the worst of all world, and NOT large badly-designed open-spaces ... but there are plenty of other good options. However, "individual offices" for devs is now such a status symbol for the teams that still have them, that people at the management level are very unwilling to change. One designer I know spent literally a year trying to get permission to get his 12-person team into an open space. In the end he gave up and eventually left the company.
- hackinthebochs 16y ago>with the advent of pair programming and agile methods, many designers and developers are more effective in shared spaces I'd be interested in seeing a source for this. I personally believe any creative endeavor is better performed in isolation.
- dpritchett 16y agoThe great thing about offices is that you can go sit in someone else's half the day if you need to collaborate on something.
- stevenbedrick 16y agoI just started a post-doc position, and for the first time in my career have my own office, and quite a nice one, at that. It is absolutely fabulous. Besides the obvious benefits, the biggest unexpected positive aspect of having my own office is that I can have a discussion with a student or co-worker without worrying about disturbing those around me.
- T-hawk 16y agoUsing whatever editor or CLI you want sounds like a nice touch, might not be so expected in such a big company. Does this extend to browsers? Is it open to use Firefox or Opera or Chrome as your main personal web browser, or is there a corporate mandate to use Internet Explorer on every desktop within Microsoft? (I know the OP on wordpress may not read this here, but any other input is welcome)
- hamidp 16y agoThere is no corporate mandate to use anything. You are free to use whatever tools you want, and nearly all internal sites work fine with Chrome/Firefox.
- Afton 16y agoThere's no mandate (that I know of), but there is a strong culture of dogfooding that tends to push one to using IE. There's also many intranet sites that won't work without ActiveX. But certainly no one's dropped by my office to ask me to stop using my alternate browser (I tend to separate my usage by my usage patterns. Work stuff on IE, personal stuff on the non-IE browser).
- ejames 16y agoIt's typical for Microsofties to use IE, search on Bing, etc. simply for dogfooding purposes, but it's not a specific requirement. It does draw some raised eyebrows if you show up at the office with, say, a personal laptop that's a MacBook and a paired iPhone, but it's at the level of good-natured ribbing rather than actual managerial disapproval or job problems. I would usually say "Yes, but I convinced a family member to buy an XBox 360, so my corporate loyalty karma evens out!"
- sbierwagen 16y agoMy paint job is well done and tasefull and failities didn’t fuss at me about it. They key point is tha tthis is up tot the team (or team’s) that own the code. This all sounds great, but everthign isn’t unicorns and ponies every day: There are problems to be sure – somtimes the bug data base is slow, Would have been cool if he had spell-checked this before posting it.
- daviding 16y agoI'm not sure what is the more naff joke; to go with 'And this is why Windows needs a native spellchecker' or 'Obvious over-reliance on static language compilers'. I'll go with neither, as it's a good read.
- rstraver 16y agoIt sounds like a startup situation :) When you've got enough experience - sitting in your little silent dungeon - you'll find yourself longing for those hectic environments again...
- jfriedly 16y agoIf anyone still wants to read this, the page has been taken down for some reason but I pulled the cached copy from google before they lost it: http://opensource.osu.edu/~jfriedly/mirrors/working-at-microsoft-day-to-day-coding.html http://opensource.osu.edu/~jfriedly/mirrors/working-at-micro...