the sham of software


I work as a software engineer, which means that I get paid a rather large amount of money to do very little. And I do very, very little indeed. Yesterday, for example, I did no work, and I would be very surprised if I were to do any today. The sum total of work I did last week amounted to a page and a half of text, and that was an exceptional week. If I find myself occupied with work for more than ten minutes at a stretch, I consider it a busy day. I've had about two or three busy days, by that standard, since I came here.

Even at that, I'm not the most idle person in work. Okay, I probably am, but I have some competition. Most of the people I know here admit that they spend most of the day not doing work, to the point of doing nothing at all. Even the more senior people here start suspiciously flicking desktop windows when I pass them by - and this despite all the talk of tough deadlines and working hard and pulling together. It's like a silent conspiracy of idleness.

But it doesn't stop there. My friends who work in software, even though they do more than me, and even though they occasionally seem to spend entire days working, still spend a significant portion of each day doing nothing. And they know people in their jobs who spend most of the day - wait for it - doing nothing. I dare say that as I type this there are tens of thousands of software engineers doing nothing, maybe even wondering if there are other people in their profession doing nothing just like them.

So having been at work for a year and a half now, I can confidently tell you this: the software industry is a sham. It's an elaborate con-trick that is being pulled before your very eyes. And a lot of people are making a lot of money on the basis of not very much at all.

Now don't get me wrong, we're not all here sitting on our asses and laughing while the cheques roll in. In the software industry, it is very important to maintain the pretence of work. Everyone pretends that there is a great deal of work going on, while being tacitly aware that there isn't. At any given time, a software engineer knows what he is pretending to work on. If someone asks me what work I am doing, this is what I tell them. It is never good to tell people that you are doing nothing. The pretence of work must be maintained at all costs.

Therefore, working in software demands the use of an Orwellian doublethink. The successful software employee must simultaneously hold two contradictory states in his mind: the belief that he is working on something and the knowledge that he isn't. Such doublethink is second nature for people who have been in the industry for years. They often go around and talk about the things they're not doing, no longer aware that they're not actually doing them.

At this point, the software non-initiate may be thinking: why? Why do you just sit there and do nothing? Why don't you actually do the stuff you pretend to do?

The answer lies in the nature of the work we pretend to do. The simple fact is that software work is either trivial or boring, and most often trivial and boring. Actually doing it, in most cases, would take seconds, but these seconds are so traumatically dull that they require long bouts of recuperation in between. The only way to save your soul in software is not to do anything.

Just to illustrate, I'll describe the various tasks that programmers have to do:

Coding is the writing of original software code. It is probably the most interesting, but also the least common, task that programmers have to do. The dreamy-eyed aspiring programmer probably imagines that we spend all our time writing exciting new programs, but this virtually never happens. Coding usually involves writing a bit of fudge to allow other pieces of code, written years ago by other people, to fit together. It's a fairly simple task, but it's usually so boring that people do it badly.

Bug fixing is much more common than coding, and also incomparably more boring. Bug fixers are told an error in the software and must trawl through lines of unreadable code to fix it. The solution is either immediately obvious, in which case the bug is too boring to fix, or obvious after a short inspection of the code. Inspecting the code is far too boring to consider doing for very long though. Hence it is considered good performance to fix about one bug per day.

Since coding happens so rarely, and the other tasks are so inconsequential, bug fixing can be considered the principal work of software engineers. A software engineer is therefore a kind of abstracted car mechanic.

Testing is the process of messing around with the software until you find something wrong with it. Since most software is so badly written, this never takes very long, but since testing is so boring, it's rarely ever done. Hence the mass of bugs to be found in most software releases. Testing is such a trivial job that it could quite reasonably be given to a three-year-old or trained monkey, who would carry it out with enthusiasm: but as it is, it is given to the less able software engineers as a kind of punishment, and as a consequence they spend more of their time sulking than testing.

Most of the time in software engineering is spent doing documentation. Documents may be about the code you have just written, the documents you have just written, the code you are about to write, or other things. It is universally understood in the software industry that documentation is unnecessary work, and is only given out as a kind of stalling tactic when the management can think of nothing better to give. Documents are never read and rarely written to completion. They are often printed out, however, usually several times, and strewn about the desk to make it look busy. Such documents account for 60% of the world's paper.

If a company spends much of its time doing documentation, it is a sign that it has reached middle age and is spreading around the waist. Young start-up companies never do any documentation because they have actual work to do. Elderly, established companies do little else.

When an employee is given research to do, this essentially means that he has been given management-approved time off to do what he likes. Research is absolutely never done in the software industry. This is partly because there is very little to research, and partly because a quick hacked-together solution is always valued more than a well-researched one. Research is often allocated before a documentation phase. The usual tactic is to do nothing at all during the research phase, do nothing at all for most of the documentation phase, then rush together a badly-written document at the last possible minute.

Software team members gather together at meetings to discuss their progress. Since software engineers are desperate to stay away from their desks, meetings are invariably long, and since there is never anything substantial to talk about, they are invariably unproductive. Most people see meetings as a kind of competition to see who can lie the most convincingly about doing work. Meetings are thus where the true skills of software engineers are exercised.

Since all software work is so mind-numbingly trivial and completed so quickly, one of the greatest tasks facing managers is the invention of new work to do. This is done in a process known as problem engineering. Problem engineering is accomplished in a few simple steps. Firstly, identify part of the software in which everything works fine and there are no problems. Secondly, identify places where problems can be inserted into this part of the software. Thirdly, proclaim that there is a problem in one of these places and blow it out of all proportion.


I'm not happy doing this job. I like getting paid a lot of money, but I don't like getting paid a lot of money to do nothing. I see people with families to support, who are doing real work, who in all likelihood are getting paid less than I am. And I'm not contributing to the world. I'm not doing anything of any use to anyone here. I'm not making people happier, or healthier, or more enlightened. I'm barely in contact with people at all.

Office life is also a distinctly false experience. In this air-conditioned, artifically-lit, female-free environment, I feel cut off from the real world, from real people. I had a three-week holiday recently, and it was like living again. Fresh air, friends, living cities, new people. Coming back to this sterilised office after that just felt absurd. Isn't it supposed to be the other way around - that holidays are the fantasy world and work is real life?


index