2004.02.27
A software engineer's office
by Karel Thönissen
In the literature one can find excellent references to research about the best working environment for programmers. See the bionic office for an office designed with programming specifically in mind. Unfortunately, offices like these are often beyond the horizon for smaller start-ups. At Garabit we have a small team of developers who work in the same office. Although we do not have private offices, we have paid considerable attention to working conditions. Our experience indicates that a reasonably good office for software development does not have to be very expensive.

Most of out office furniture is wheeled. This makes it very simple to rearrange the furniture when people are added to or removed from a particular project. Depending on the task at hand, desks can be moved closer together or can be separated. Brakes on the wheels prevent the desks from moving while someone is working on it. The brakes on the wheels are good enough, but the wheels can also swivel so that the desk can be moved in any direction. However, even when each brake is engaged on every of the four wheels of the desk, it is possible to move the desk a little because the desk can move around the wheel (anyone who has studied the wheels under a shopping chart knows this phenomenon). To mitigate this problem, we make sure that every wheel is placed away from the center of the desk (this provides the best stability) and we have connected some desks with tie-raps. These are easily applied and easily removed.
All developers have height-adjustable chairs with adjustable arm supports. As these chairs have wheels too, it is simple to roll a chair to someone else's desk for pair programming. The desks have no drawers mounted under the desk top, so there is enough leg space, even when working at the same desk with two or three developers during pair programming. The desks have been designed for CRT-monitors so they are very deep. As we use flat panel displays, every developer effectively has an oversized desk with a large comfortable work space. On this desk, everyone has a lamp with a nice warm tone of light. Apart from the individual lamps, there are a few lamps for ambient lighting.

Extreme attention has been paid to the spacial arrangement of the developers relative to each other. No two developers face each other frontally, as this is extremely distracting during programming. Another problem can be that communication is hampered by the monitors placed in front of each of the developers. Similarly, no-one has his back turned to some-one else. This can be distraction for the one, and intrusive for the other, in particular when it is an employee being watched from behind by a supervisor. Instead, all our desk are arranged in a long row with the short side of the desks touching each other. However, every other developer in this array is looking in exactly the opposite direction. This zig-zag pattern provides the privacy, avoids the distraction, and allows the visual communication with all colleagues when necessary.
There is an aisle on either side of the array of desks, so no-one is directly placed in front of the wall. In our case, each of the developers can rest his eyes in the distance by looking sideways where the windows are. So each of us has the daylight coming from the left or right. This avoids nasty reflections on the monitors and contrast differences between monitor and background that are too uncomfortable.
All of our larger flat surfaces are of glass and many objects are made of metal wire-mesh. This not only provides a professional impression in accordance with our corporate style, it also allows the daylight piercing deeply into our office. Even in the winter when natural light is not enough, there are no dark spots, since the lamps also illuminate the floors under the desks and tables. A drawback of the glass surfaces, is that they require daily cleaning.
Central in the office is the large table that we use during meetings, brainstorming sessions and lunch. Placed around this table are simple folding chairs from Ikea. These chairs are simple and robust, but also easy to move around (pair programming!) and store. As an insider joke, four of the chairs are arranged in a pattern that originates from the Hello-logo.
Finally, there is a small reading corner with two arm chairs and a little table on wheels. The chairs are of the type that is used for camping these days. They can be folded together so that they use little space when not used, they are very easily picked up and moved, yet they are very comfortable and do not look cheap as do most camping chairs. The table is a wire mesh storage cabinet for bathrooms from Ikea that we topped off so that it has the correct height can be used as a reading annex tea table. The drawers in the table are used for additional storage.
Along one of the office walls there is a 2 meter high archive rack that provides 40-odd meters of shelf space. These racks do not come cheap, but they are virtually indestructible and they can be disassembled any number of times. In each of the 6 segments there are extension cords with 3 power outlets.

Every developer has a IBM-ThinkPad laptop computer with an additional flat-panel display. We have chosen laptops, not for their portability, but for various other reasons. It was decided that we would not need a desk top computer's versatility to add expansion cards during the expected economic life time of the machines. So there was no reason not to use laptops, yet several arguments were in favour. As we practice pair programming, it is not a good idea to place a computer's case underneath the desk, because this will get in the way of the co-pilot's legs. Putting it on the desk gives a bulky impression, exposes the cable salad and consumes precious desk top space. That is a particular concern when two or three developers may sometimes be working at the same desk. We also were a bit worried about the weight of all the equipment on the glass desk top. Since the laptops integrate case and monitor in a single unit, we have minimal cable salad. Since all our monitors are flat, there are no obstructions whatsoever in the view lines between any two developers in the zig-zag arrangement that we use. Finally, we could buy the machines for a price lower than what is normally paid for a comparable desk top computer with a CRT-monitor.
So now each developer has two LCD-screens: one from the laptop and the additional 17-inch flat panel. Having two monitors based on the same technology is easier on the eyes. Using a mix of CRT and LCD is not a good idea, because the size factor of the LCD-monitor is lost when used in combination with a CRT-monitor. In order to avoid eye strain, both monitors must be placed at the same distance from the viewer. However, the bulky CRT-monitor requires that the LCD-monitor is placed much closer to the developer than otherwise needed. So then one is wasting precious desk top space behind the flat panel screen.

In order to avoid strain problems in the neck and the back, all monitors must be placed at the correct height. Experts indicate that the top of a monitor should be at the same height as the eye. This is a problem for normal monitors, but specially for the monitors that are attached to laptops: they are placed far too low to be ergonomically acceptable. This problem was solved by placing all 17-inch flat panels on a small pedestal, and by opening the laptops completely and placing them almost vertically in a pedestal. Both types of pedestals were made by us from little metal glasshouses for chamber plants that we bought for 6 euro a piece. We removed the glass and used the roof as a support for the laptops and the base as a support for the 17-inch flat-panels. The shape of the pedestals allows light to pass through and the appearance and colour nicely blends with the rest of the equipment and furniture.
The vertical position of the laptops makes it impossible to use their keyboards. Fortunately, I would say. Laptop keyboards are notorious for RSI-problems, and in our case the non-standard layout (the weird IBM-layout and the Dutch rather than international layout) made the keyboards unusable. Therefore, every developer has a Logitech wireless keyboard and wireless optical mouse. Both are very well-designed and comfortable. The lack of wires is a bonus during pair programming as it is very simple to pass the mouse or keyboard when switching pilot's and co-pilot's roles. The wireless keyboards also allow to pass around the keyboard during a meeting around the central table. We even have experimented with several keyboards attached to the same machine, so that everyone can type data. It requires a bit of co-ordination from the chairman, but once that is mastered, it is feasible. The mice are symmetrical and can be used with either hand. This allows switching hands (reducing the risks of RSI) and makes it simpler to share the mouse during pair programming.
With all developers working in the same room, cable salad can be a serious problem. Using laptops and wireless keyboards and mice solved most of these problems. Under every desk we have attached a wire mesh tray where we have placed a power connector for 6 plugs. All cables from lighting and computing equipment on the desk are nicely hidden in that tray. Every desk has a single 2.5-meter power cord, making it easy to move the desk to another place without complex rewiring. Several desks have their power supplies chained so that only a single power cord and the UTP-cable must cross the floor. To avoid hazardous situations, these cables are hidden under one of the thick plastic sheets used to avoid that the wheels of the chairs damage the laminate floor.
Since all developers use laptops, the batteries in their machines are enough to bridge power cuts. So we only needed to install an UPS for the server equipment. Since all server machinery is nicely placed together, we could do with a single UPS.
The server computer, the UPS, the laser printer, the inkjet printer and various supplies are placed on a home-made wooden table with two horizontal surfaces. This provides a lot of storage space for a minimum of money.
When in a state of flow, noise can be a serious problem. To mitigate this, private offices are the best solution. However, not in the position to offer that, we have made some rules to reduce noise. Smalltalk is only done during lunch, making lunch more enjoyable and the other hours more productive. Cell phones are not allowed. Outgoing phone calls are planned before we start or after we have finished programming. People aware of the situation, also call outside the programming hours. However, sometimes phone calls during programming hours are inevitable. In that case, one leaves the room in order to minimise the interruption for the others. We have cordless phones that do away with the cables and allow one to leave the programming studio. With regard to music, experiences are diverse. Some people work better with music, others prefer to do without. However, almost everyone agrees that having to listen to music one does not like is a very bad idea indeed. As we could not agree on a genre we all liked, there is no music in our software studio. The noise produced by the IBM-laptops is minimal, perhaps helped by the fact that the vertical placement allows air to flow along the bottom where most of the heat is dissipated. The server computer and the HVAC make more noise, but all within reasonable limits. When we are programming it is very quiet, and people often ask whether this makes the work boring. However, good developers love programming, so we provide the atmosphere for them to excel in what they like best. The silence is only broken for relevant issues, and, inevitably, during pair programming.
|