I was reading Joel Spolsky’s blog the other day as he was describing a new office that would bring a great development environment to a new building for his consulting business. As I started thinking about this, I started to think about all the shitty cubes or PCs I’ve typically had in the past. Some cubes were good, & some were simply falling apart. Most PCs just were customer service desktops or laptops at best. Now, I did not expect to have an office or the perfect PC but surely the tools to be efficient at my job. Offices were always “something for managers” and usually as a developer you just reside with the thought that you’re most likely never going to have one unless you’re a team lead, manager or whatever. Even most team leads do not have an office.
The thing is though, as developers, even though we expect to have a cubical most our lives, it brings to light even more how important it is that we can be able to concentrate while we code. This critical to a development environment. You can’t always simply block out every distraction or “deal with it”. I’m sorry but that’s a BS kind of expectation for developers as concentration is key to be able to engineer.
Engineers & developers require a different kind of culture and setup as compared to customer service, accounting, managers, and the rest. If employers do not see this, then they really setup for an environment that is not ideal for their developers and truly contributes to them being unhappy and less efficient. After all, companies are paying a lot for those developers, so as much attention as these companies sometimes take in the hiring process should naturally carry over into the environment setup for those developers if they want their developers to really contribute and be happy.
There are 2 kinds of privacy that a developer needs:
1) Space from the person next to you
2) A way to block out noise distractions as you code
And the idea solutions to those are:
a) Walls that are high enough not to see the person next to you, but ability to see them after you stand up. You don’t want walls so high, that you are forced to walk around the corner just to talk to them. But at the same token, staring at the same person every day or their monitor really is very frustrating. At the same token, you don’t need someone else looking at what you’re doing…it’s none of their business. After all, we are professionals and we do deserve some sort of “space” from one another, especially as developers.
b) Headphones. I don’t think I’ve been to one development team that has not used them. It’s the norm, and it works. Music gets me very motivate to code. It makes me more efficient and productive. If you interview at a place that doesn’t let you use them, my advice is to move onto the next interview. Really, it’s that important.
With that, we obviously know we’re going expect some interruptions from business users who need to talk to you about process. That’s not my point here. That’s expected to a certain degree as long as it’s not consuming you as a developer full-time (think mom & pop). If you’re getting way too many interruptions every day, then it’s not ok and you need to cushion that. It’s ok to say that you need to get some work done and would like to setup a meeting to discuss things later with marketing, etc. There are times you have to get things done especially when there are non-emergencies being thrown at you every hour that could be moved to a non-priority queue in your ticketing system.
Now, with that point, if you have been so lucky as to have your own office, I envy you…we all do. And I think that in most situations it’s just not something employers can always give you. However, I do think that a lot of employers don’t just stick their developers in a cubical, but they they also stick them with less than adequate cubicles and/or tools (PC, good keyboard, good mouse, bookshelves) to make the environment even worse. To me that’s just unacceptable especially when they’re paying you 50k+ to develop code. If you can’t spend at least 3k for example to buy your developer a decent developer/engineer grade desktop or laptop, then you don’t know what the hell you’re doing and that’s truly how I approach a development environment. Now I could go on and on about how wrong it is for a corporation to give a developer a non-developer laptop or desktop (inadequate ram, processor, etc.) but today I will not go there. In fact that’s better covered by Coding Horror in a few of his very excellent articles about that very topic:
Hardware is Cheap, Programmers are Expensive
The Programmer’s Bill of Rights
What makes an Ideal “Basic” Developer Environment? Here it is:
1) Adequate equipment
> A desktop with at least 4 gigs ram (for today’s standard)
> A developer grade laptop.
Some places give their developers laptops. That’s fine, but if you’re going to do so, do not buy a mediocre laptop. If you’re a manager and you are not smart enough to know what a “Developer Laptop or Desktop” means, or your network admin insists on buying your developers the same grade as your customer service or marketing, that’s just wrong. Wake up. Ask the developer and hey, let him get what he needs! As long as it’s not going 3k+ over what you planned on spending, you should be alright. I’d stick with a 3-4k laptop/desktop per developer as a rule of thumb. You go any lower than that, and it’s just going to lag. You’re developers are going to waste business time waiting for things to compile on a 5400 rpm hard drive and 2 gigs of ram. Spend that extra 1-2k and buy them a 3-4k laptop with at least 4 gigs ram.
It should not be that big of a deal to cough up another 1-2k extra for a decent Desktop/laptop based on the time savings your developers will reap from:
a) faster compile times
b) faster time to open heavy applications
c) faster time to install new programs (take VS & SQL Server as just one example for setup time). There are times developers will need to reimage or reinstall a broken app and why waste time?
> A good quality keyboard and mouse. And let the developer decide and get rid of your keyboard and mouse Network Admin company equipment standard BS. There should not be a standard on something as petty as this. Give them a price range and let them get what fits best. This is like putting on a glove…let that person get what works for them, not your department.
3) A decent sized LCD. But ideally 2 Monitors.
If your organization or you are fighting your developers on this, then they don’t understand development period. I once had to fight to get an LCD. We had an old CRT from 10 years ago and my eyes hurt so bad I had to go to the Dr. When you’ve used LCDs for the past 9 years, going back is like putting on a pair of glasses that are just wrong for your eyes. A decent size allows you to see your code. 2 monitors allows you to see 2 things at once quickly making you get things done even faster. An LCD should be no less than 19 inches and even that’s too small for a developer these days. Ideally the monitor for your developers should be at least a 22 inch wide screen which is not expensive at all currently.
2) Ideally an office, but if a cube:
(this is NOT an ideal cube situation)
> Walls high enough for some privacy. Sorry, I’m not one for those glass windows either. I want my damn privacy. Walls should not inhibit your ability to talk to the person next to you (you can stand up and see them) but definitely gives you both privacy from each other in that if sitting down, you don’t see each other’s head or monitor
> A surge protector. I do not know how many times I’ve had to either bring my own in or ask our Network Admin in past jobs. We do have other things to hook up (cell phones, test PCs, you name it).
> cubes should not be what I call “customer service cubes”. That means they should be large enough to have a surface on both sides of the developer large enough to spread some papers around. It should have an overhead bookshelf/bin to put books in and to stuff misc items into to enable that developer keep the desk orderly.
> Should have a rolling file cabinet. Often you don’t want to just store, you want to be able to move it.
> A lamp of some sort or overhead light. Most developers like it dark but once-in-a-while we do turn on a light at times when reading or looking over papers
> Cubes that are not breaking down. If they are, then the employer should be sure to fix them. Panels should not be falling down, power strip protectors should not be laying around, hinges should work
4) A whiteboard for your individual cube or office.
A team whiteboard from a past job
It’s essential to be able to write things down and think out loud on a whiteboard as a developer.
3) Ability to listen to your music & code
Allows a developer to be 2x as productive.
4) Phone with VOIP is ideal
Why do I say this? Because a phone that works and is easy to use is better than one you spend time figuring out. And caller ID to me is important as well which these typically have out of the box.
5) Wi-fi enabled office
This is actually a conference room at a .com I once worked at.
Conference rooms should be wireless to reduce setup time for meetings. Developers should be able to setup test PCs via wi-fi assuming the bandwidth is adequate for that test PC.
6) A G. damn stapler.
You’d be surprised how hard sometimes it is to get one at places I’ve been at the past. Milton was smart.
Some interesting past cubes of mine:
My current setup:
This is about the best PC I’ve had in my 10 years of IT and really finally I can say I have a “developer” PC. My boss totally gets it as he’s a developer and purchases the PCs for us. Probably a bit more than I need but surely can’t complain. I do not have to wait for a damn thing to do anything (compile code, install heavy apps like TFS, Virtual Machines, VS, SQL) which saves me probably hours of time when you sum up all that I do on a daily basis:
Dell Desktop
24-inch wide screen Dell Monitor
Vista 64-bit OS
8 gigs ram
2 DVD burners
2 Pentium Xeon 3.0 GHz processors
NVidia Quadro FX 3500 video card
So I hope you have adequate tools and an environment which facilitates & promotes developer productivity. I know I’m very happy with what I have currently which usually has not been the norm in development shops I’ve been to.
Print | posted on Sunday, February 15, 2009 9:47 PM