Tuesday, November 23, 2010

Lost in the Maze

Imagine an office. There are random stains on the carpet. The cubicles are missing pieces and half filled with junk left from former occupants. Cubes have only one power jack and if too many people in the row power up a breaker flips. Empty cubes are informal storage depots of obsolete and unwanted equipment. Keyboards are grimy with the sweat of a thousand fingers. Piles of unused hardware accumulate on any surface that isn't part of someone's personal space. Network cables have the little prong broken off so they fall out at the slightest movement. Drawers are filled with paper clips that are never used and old manuals of obsolete programs. Chairs missing arms or backs clog the narrow halls between cubes. Even chairs that are regularly used are creaky and worn.

The kitchen has a single low-wattage microwave, its interior speckled with dried food. Every surface is covered with crumbs. The table still wobbles even though someone's stuck a folded up napkin under one leg. There's a brown water stain under the coffee maker that's never been cleaned. The fridge smells. A few random posters are tacked haphazardly to the walls along with a reminder of the company policy on sexual harassment.

The conference room is more of the same. The white boards are covered with unreadable scribblings written with permanent markers. The eraser is missing. A pile of wires and unused equipment sits on the conference table and under it. The room is packed with mismatched and broken chairs. A random jumble of equipment sits in the corner ignored, its purpose forgotten.

What kind of software is going to be created in a place like this? What kind of software process is going to be followed? How inspired are the employees going to be to fight against the entropy of their surroundings?

Much has been written about the broken window theory, that seeing broken windows never fixed encourages worse things. But the theory is always talked about as if it only applies to people in far-off ghettos and not to those who wear business casual to work. We're professionals, so we can work through balky equipment and late hours with no overtime pay. I don't buy it. It's hard to rise above the environment you're in no matter who you are. Exceptional people do it, but organizations are made of ordinary people. When ordinary people live in a trashed environment they feel little motivation to do anything special. What's the point when nobody cares?

This doesn't have to happen. Why not take a slow day near the end of the year to do some spring cleaning? Throw away all the junk nobody uses, replace everything broken, clean everything dirty. It's amazing how energized you feel after filling up a trash can with junk you don't need. And actually doing something physical instead of staring at a screen all day helps clear the cobwebs in your mind, even while you're clearing the real cobwebs collecting in the corner. Everyone can start the year feeling refreshed instead of beaten down by the dreariness of their surroundings.

Opposing these cleanups is the hoarder's fear that something useful might get tossed. But how hard is it to know when something's junk? And how hard is it to buy a new network cable? When cleaning up, there needs to be someone who knows what the cost of replacement is so decisions can be made on whether to keep or trash something. But that brings us to the other thing holding back these cleanups. In many offices there doesn't seem to be anyone who has the authority to fill out a purchase order or to even know what things belong to which group. Without anyone in charge nobody feels secure enough to throw anything away. Instead everyone decides it's someone else's problem and so the junk piles up. Someone has to take on the responsibility of saying enough is enough, and someone who can make decisions on purchases needs to be around.

But these points don't just apply to the physical environment. The soft environment can become just as junk-filled. Network drives full of out-of-date software that no one needs. FTP sites with files from customers that no longer exist. Test machines with installed versions that have been end-of-life for years. Log files from customer problems that were closed months ago. These things need to be cleaned up too, before the junk makes important information too difficult to find.

But it doesn't stop there. Code itself gets filled with junk. Methods and variables that aren't used. Classes that never get created. Chunks of logic that can never be called. Comments about bugs that were solved years ago. Code needs to be swept through as well, to clean up the debris that accumulates over a programs lifetime. It happens to documentation too, to web sites, training manuals and anything else that gets worked over in the day to day process of software development. This virtual trash has the same draining effect on those who work with it as physical trash. If nobody cares what the code's like why should you? The virtual environment needs to be cleaned up regularly too, before the garbage in it overwhelms anyone's ability to work with it. Once a program resembles a hoarder's house, with narrow trails winding through mounds of trash, it's unsalvageable.

Destroying is as important as creating. The garbage in every environment, physical and virtual, needs to be gotten rid of, so that it doesn't drain the motivation of who work around it.

No comments:

Post a Comment