Working at Microsoft – Day to Day Coding
foredecker.wordpress.com
foredecker.wordpress.com
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.
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.
As to situations like what you describe with file sharing in a certain environment that mostly comes down to insufficient beta testing and straight up prioritization/de-prioritization of certain issues.
I don't think Microsoft realizes how enormously performance contributes to user dissatisfaction with their OS.
As a web developer, I know that adding just a second to a page load massively diminishes perceived usefulness of a system; Google spends enormous amounts shaving tens of milliseconds off their page displays.
At the level of an operating system, that kind of user sensitivity to performance must be at least the same if not magnified. It seems like performance, especially on older hardware, should be far more of a priority for Microsoft than it apparently is.
My experience and observation is that performance improvements of substantial magnitude are often available for the taking in almost all software projects, but it requires a concerted effort to realize those improvements. MS instead spends its efforts on merely making sure that the software doesn't get slower by too much.
I installed Windows 7 on 2 laptops of family members. These laptops were $300 from Walmart. Windows 7 runs just fine.
I installed Windows 7 on an Asus EEE pc. Runs about as well as Windows XP (only computer where I can tell it runs a littler slower).
Considering a ~$800 ipad that isn't a full computer...
I fail to grasp what kind of performance you expect to get out of Windows 7, while at the same time having a full featured OS at the same time running on _affordable_ hardware.
It is called the "Redmond reality distortion field"
The ideal situation would be a blazingly fast machine for compiling, linking, and running automated tests ... and commodity hardware for day-to-day tasks including browsing, email, word processing, spreadsheeting.
If that's true, do you think the software developers have done a good job?
And if that's not true, then why shouldn't they use commodity hardware?
So a company like Microsoft can invest in the 80% of the market that drives sales (ie. people who refresh computers) OR invest resources in solving problems for the 20% of people running old hardware with an old OS they bought a long time ago.
Should the state of the art be driven by the fact that your employer chooses to leave you with a laptop that cannot play YouTube video?
Even accounting for business clients on hiring binges, I'm really, really certain that the vast majority of the PCs that we support are more than 4 years old.
But my perspective is that I would probably prefer not to have those particular lemons! My time is valuable to me, and so is my patience. And as a software developer, I spend far more time using other peoples software (IDE, DB clients, etc) than I do using my own.
The best way I can better my products, I think, is to devote as much time as possible to fixing bugs and adding features. Time spent waiting for my IDE to load is time spent not adding value.
I, personally, am far less inclined now to spend my coding time on new features, and more likely to spend it on refining what I already have -- and so far I've gotten really positive feedback from customers on that.
It's called "getting experience", and the key is to remember you're supposed to move on after you've built enough stuff to demonstrate your worth to the next place. This is what the beginning of everybody's development career looks like.
Grit your teeth and get through it. It gets good later on.
http://web.archive.org/web/20080502192810/http://www.gapingv...
Move on ASAP.
A lot of the problem is that the stuff you build can't necessarily happen at the place you're at - if all your place do is db frontends and your coworkers produce endless spaghetti, anything you produce is going to be subsumed by that.
Another issue which is rarely spoken about is the atmosphere of the development environment - if people are on edge/insecure/[deadsea-ers][1] things can get nasty quick, and there is nothing better at pulling down your confidence.
I have come to the conclusion that you have to build your own positive output because you love it, and let the career-enhancing aspects act as a side-effect. I adore this stuff, that's why I'm doing it.
It is often frustrating though - I am 29, 30 in September and it is difficult not to feel trapped. The negative aspects of the job make it harder to do the positive stuff necessary to get out - got to work hard to keep your head above the water.
[1]:http://brucefwebster.com/2008/04/11/the-wetware-crisis-the-d...
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...
Or the now infamous Windows Shutdown "crapfest": 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.
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.]
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.
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.
However, his intro blurb specifically says that we are wrong in assuming that writing software is a "soul-crushing bureaucratic exercise." Which, as you point out, the post never really says anything more about.
Consider that Windows ships in over a hundred languages to hundreds of millions of people. I'm not sure how many languages Linux ships in (I'd bet quite a few), but Linux contributors don't have to worry about getting arrested for drawing map lines wrong: http://blogs.msdn.com/b/alexbarn/archive/2004/08/20/217602.a...
Do we ship software without testing? No. Do we ship software that isn't globalized? No. Do we just hack something together, check it in, and call it a day? No. These aren't the kinds of practices that lead to a stable platform.
Mistakes get made (at all levels of the management chain), but they tend to be the exception in my experience.
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.
To me, that is the most impressive part of all.
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-micros...
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.
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.
A lot of talent is and has been evaporating up and out of Microsoft for just these reasons.
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.
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 :)
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.
I'm sorry, but what's the difference between a tester and a developer then?
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?"
Seems like a lot more than I expected, but just looking through my recent commit history, I wrote 830 lines of code just last week on my 20% project alone, so 1600 lines/week doesn't seem that unreasonable. And here I've been complaining about how I never have time to get any work done...
I don't know the GP but their post is believable. Some parts of Amazon are mired in cross-team dependencies. Worse, to get anything done in those situations, hacks have been piled on top of hacks for tragic years. The right solution may be waiting in the wings but all the dominoes have to fall first.
There is a lot of variety at Amazon. There are high-pressure, high-reward teams like Kindle. There is cutting edge stuff at AWS and elsewhere.
My team is a leaf far out on the dependency tree. Approximately, we have only end users. It's a great situation, even with a pager (shared between five people, so one week or less a month). Our pager, on the average, does not go off. We get to ship software every week and we're profitable.
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)
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.
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?
I'm not going to lie and say devs don't want laptops - of course they do. Everyone wants a free laptop. But guess what? I'm a PM at MSFT, and you know what I want? A second desktop and better monitors. Are these a status symbols for devs? No. Resources are fairly assigned based on need, and everyone at the company realizes that.
I should also point out that most senior devs do have laptops in my experience. It's the really new, junior guys that don't get them right away. There are communal resources if a dev really needs portability for a few days.
If you want them to do your job and you are not getting them, that just illustrates the point better. Economizing on hardware (and paper towels, heh!) is really dumb for a software/tech company.
"I should also point out that most senior devs do have laptops in my experience. It's the really new, junior guys that don't get them right away."
So, in other words a laptop is a status symbol. Junior devs rank lower in the hierarchy though they use the same tools and work on the same codebases as senior devs.
In my book what Microsoft does is waaaaay beyond "trying to save on toilet paper". The last place I worked having a monitor bigger than 19" was a status simbol.
Excuse my patronizing - you are around/under 25 right? Because I have noticed that juniors tend to have this petty fascination with hardware that goes away with time (myself included).
I work on a 3000 node super computing cluster doing heavy duty Machine Learning and signal processing and a lot of funky (and classified) hardware, and yes, no one would blink if I wanted two more machines (or a 100 more) - as a matter of fact we recently did a million$ + upgrade of the hardware on my say so, so yeah everyone on this project gets all the hardware they want ;-)
Looking around I see (my personal system, doing mostly rendering and reports) 7 quad core machines, three 27 in monitors, 2 laptops, both Thinkpads. I (literally) only have to ask to get more machines.
"Excuse my patronizing - you are around/under 25 right?"
Patronizing is always inexcusable and rude, and snark appropriate on reddit isnot so valued on HN, but I don't mind at all. When you say things like that you just make a fool of yourself in public, go right ahead. :-)
And as for my age, I am closer to 40 than 25, so perhaps you just need to try again? ;-)
EDIT: (btw "paper towels" != "toilet paper". You missed the reference This which wrt the benefits cuts in 2004which included stopping towel supply(later rescinded) - I confess I am only guessing the towels were paper. ;-)
from mini msft (I heard from a friend in MS, but mini is an online reference)
"Should have just done the towels and called it a day!" - Lisa Brummel, May 18th 2006.
You know, one moment of reflection: the circle is now complete. My second post to this blog was on July 6th, 2004. It was right after an impromptu employee meeting with Ballmer and Gates and as part of that, Mr. Ballmer justified the unfortunate recent benefit cuts, the main two points of ire being the towels and the ESPP revamp. Now, two years later, we're getting our towels back.
Has it always just been about the towels?
(Possible book title flashes through my mind.)
It's not like we're sweaty work-out animals always in need of a shower and fresh towel. No. What riled us was the bone-headed way the towel cut-back was handled, explained, and justified. It truly made us wonder just who are these people in charge and just who do they think they are leading? The towels became the symbol of poor leadership. That and the office-supply hide-and-seek.
Someone should send Ms. Brummel a golden towel award. I'd like my old ESPP back, too."
All organizations need to be cost efficient... unless you're a govt agency or contractor. In which case being cost INefficient is actually rational.
What specifically sounds "cost ineffective"?
3000 node clusters? That is a tiny cluster as clusters go. 7 quad core machines? Two ThinkPads? A million dollars on one-of-a-kind hardware?
You my friend, have zero clue in this. Since you have no idea what the specific cost benefit analysis on this project is that statement is built on nothing but your prejudices. I grant that it may "sound" ineffective to someone with no experience working on such projects. If I were to blather about whether a drug development proposal (something about which I know next to nothing) is "cost effective" without even looking at the financial documentation, I'd come close to what you are doing with that statement.
"I'd be more productive with a personal helicopter with landing pads in various locations with an oncall pilot"
In the right situation, expensing a personal helicopter would be trivial. What is "cost effective" depends on the derived benefit. Applies to startups too. The cost depends on the benefit derived not on what the raw materials cost.
So (fwiw, I could care less about convincing you) It is not really "cost ineffective". Machine/networking etc costs on this project are trivial compared to the total budget (spent on other resources) and (much) more importantly the derived benefit.
(just making up an example since I can't talk about what this project really does) If you were able to decrypt, and classify (in the Machine Learning sense) all enemy communication in real time, how much is that capability worth to a nation? Worth spending a few millions on? Not every project in the world has the financial structure of two guys in a garage coding up the next silly web app.
Iow you are talking about "unknown unknowns" with nothing to back up your conclusions. Amusing but not really relevant.
I'm older than 25, though probably not as old as plinkplonk.
But it's the usual perception of majority of companies that engineering, product development,... are cost centers and cost centers need to be minimized to gain profit.
It's what you get when you let the beancounters run the business. But people bitching here that developers at MS don't have it well off - are being ignorant about majority of industry where developers are still being under-utilized to everyones dismay.
And Microsoft's care of intellectual workers is top tier. Even the ones that are not well off (sitting in a room with 10 other people) are better off than 90% of our industry.
Indeed some people get to have anything they want or need - good for them. Even better if it makes the end result better. It's good that they don't get into situation as I have in multiple occasions - running a top priority, code red development effort which if fails it will take the company down, and then when I needed a new virtual appliance I got informed that I cannot get is since the ESX is out of harddrives and that there will be no purchases since the budged has already been spent.
And this is the industry standard - not the "I run bazillion node supercluster".
Hell where I used to work - two of the interns went and bought 2 24" monitors each out of their own money to use them at work.
I've been at MSFT for 9 years and have yet to be issued a laptop. I've been MSFT for 9 years and have yet to actually need a laptop. :)
Why would you want/need a laptop in that case? Multi-monitors with a laptop is asking for ergonomic-related health problems.
[0] Plus an external monitor.
[1] And from what I've read on HN, I probably won't, as they're going out of business any day now :P
Sorry - I don't think that's true. When I was a dev I had a laptop. It is highly dependent on the team you work for. I know a lot of devs who have laptops. In fact, most things hardware related are highly related to the team you work for. Since MSFT works on such a variety of things, hardware needs tends to vary dramatically
Indeed everything is dependent on need. PMs always get laptops because they spend lots of time outside of their office. On my team, most dev leads are also issued laptops. Friends of mine in teams closer to laptop features (think Windows 7 touch input, for example) never have had problems getting a laptop. On my current team, it's not common for an IC dev to have a laptop. It's also not common to find an IC dev with a machine more than 8 months old. I haven't quite figured out what everyone else's fascination is with laptops. I bought one for my own personal use, brought it to work, and then stopped bringing it because it just sat on my desk doing nothing 95% of the time. The other 5% I've replaced with post-it notes which, I'm happy to say, are available to both PM and Dev.
Again, this was 10 years ago or so, but I'd expect that developers can still get a laptop if they want to.
Personally I've always preferred a desktop machine to code, because a laptop means I can take work home.
Most developers went for the desktop x2 plan. PM's almost always went desktop + laptop.
Again, this was for NEW machines. I had, at my peak, 6. 4 desktops and 2 laptops. Most of these were random old peices of hardware that were fit for recycling (but still fully functional!) that I used for whatever side projects I needed the hardware for.
Everyone always complains about their PC hardware - but not once did I see someone who actually needed a piece of hardware go without it. Monitor upgrades, for some reason, were much rarer and didn't make sense at all.
I work in support, but I spend a lot of time looking at code and speaking with developers. My laptop is my primary machine, but I also have two desktops - quad core systems with 16GB RAM that I use to run VMs in Hyper-V (I have to use both Windows and Linux VMs). --Typically I'll have around 3 VMs running on each desktop, plus up to 3 more that I can switch on when needed. I also have access to a set of 3 servers (48GB RAM and about 9TB disk space) that I share with a team of 10 people for when we need to configure a larger cluster for problem reproduction and resolution. Developers tend to have similar setups here.
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.
I'd be interested in seeing a source for this. I personally believe any creative endeavor is better performed in isolation.
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.
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.
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.
If the former, do you provide a way for them to get away from the distraction when they need to think deeply?
That tends to work great when everyone is a five minute bike ride to the office/lab. It's a tougher proposition when a non-trivial number of members of the team are 30 minute auto commutes from the office.
If I had a choice I would choose a private office every time.
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.
I was having a conversation with a dev about building an iPad app in my spare time and another dev sitting near by jumped in and argued that I should focus my efforts on the Mac App Store since it would be new and relatively easier to get noticed. 3 months later and I have an app selling well enough to quit my job if I really wanted to. This golden little side comment would not have happened if we all had offices.
Read a book.
There are obviously no books about those topics (well, there are some about the latter, but they're all wrong, and we have experimental data to prove it). And even if they were, they'd be out of date before they were published. Google's indexing system changed completely when Caffeine was launched last year - the only way to get information about it is to ask the people who're responsible for developing it. And the ecosystem surrounding the web is continually changing, and we keep running new experiments to keep up with it, because things that we were absolutely certain were true 5 years ago no longer are.
Well, what are they?
I've toyed with the idea of getting permission to release some of the results we've discovered, in maybe a blog series like what Crockford did for JavaScript at Yahoo. Google also derives a strategic advantage from the rest of the web being fast, and IMHO the benefits of making everyone else fast outweigh the benefits of being faster than everyone else. But I've already got a 20% project that takes up like 50% of my time, so I don't have time to organize something like that. Maybe later.
If a question isn't an emergency, I queue it up by sending email. If it is, I ask in person, fully realizing I'm fucking up their day and hoping that doing so really is in the best interest of the company. I also only check my email a couple of times per day and wear heavy closed headphones for coding, because those elusive moments of flow are about half of what I live for.
This is interesting--I would never feel this strongly about being interrupted unless someone was being overtly rude or annoying. I want to be productive, but I don't feel obligated to plow forward relentlessly hour after hour. If someone breaks my flow to ask a reasonable question, I don't think of it as a big deal. I think true flow is a lot less fragile than many give it credit for. It doesn't vanish anytime a pin drops nearby.
I think there's something to be said for the benefits of a less serious and more relaxed mindset. Working steadily, but not getting all caught up in "how productive am I?" like you're an assembly line robot. Coding is as much an art as a job and often you can be more productive by playing ping pong and chatting for 6 hours then having an insight that saves you 100 hours in the long run because your mind makes a lateral leap about the architecture that almost definitely wouldn't have happened if you had just sat at your desk typing all day.
I still see the benefits of private offices because it can be very beneficial to have the option of silence and intense focus when that is what you need to get over a hump, but it also seems like a lot of programmers are missing the great potential rewards of real creative collaboration--probably because they are used to collaborating in an uptight business-guy kind of way. Instead, they should take a cue from other creative people like artists, poets, and musicians, and allow their minds be free a good portion time through relaxation, speaking freely, and gasp having plenty of thoroughly unproductive fun. The gains in inspiration will easily outweigh the lack of perspiration, and life will become more enjoyable to boot. Isn't that ultimately the point of all this toil anyway?
But I've also found that my stress level just dropped so much when I acknowledged that I get nothing done during business hours, and so ought to just go in and accept the fact that my job is to help other people get things done. I can still fit in 2-3 hours after dinner, once everyone's gone home, and I found when I was doing my startup that 3 hours is about the maximum time per sitting that one can spend doing high-level intellectually creative work without getting totally burnt out. The unfortunate part is that it time-shifts my day (I go in to work around 1:00 PM and work till 9 or 10 at night), which means I only see the sun for half the day. But with enough practice (obviously failing now, since it's almost 3:00 AM), maybe I could swing my sleep schedule around and just have the mornings off to do whatever I want, then go to sleep as soon as I get home from work.
However, if someone non-technical comes and asks me something (which usually requires a lot of parsing) then that will require a context switch and I will loose a chunk of productivity.
My current area at work is open and I have to on occasion bring ear plugs to keep the noise down to a level where I can concentrate. There are group meetings, conference calls on speakerphone, and loud personal conversations happening all the time. IMO, if it comes to needing ear plugs then the one purported benefit of working in an open area is lost since you can't really be sharing/collaborative if you've closed yourself off.
My 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.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.
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)
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).
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!"
* 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.
(Although it is obviously good to have things compile as fast as possible.)
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.
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.
When you've got enough experience - sitting in your little silent dungeon - you'll find yourself longing for those hectic environments again...
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.
Has TDD really resulted in this becoming a status symbol? :P
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.
All Tests/LLOC seems to state is that some lines of code exist and potentially, some test cases are testing them.