Wednesday, August 22, 2007

Confessions of a Software Developer

Posting has been light recently because I haven't been doing much else other than sitting in my room in the ashram in front of my computer working on the software and supporting literature and training materials for Jatan's Sajiv Kheti Certification System (cleverly coined "JCS" by me) and a paper for ICTD with some colleagues. So besides eating, sleeping, exercising, and meditating, I'm pretty much on the computer all the time. There is a lot to do between now and when I leave, and I'm starting to feel the crunch. It's also made me realize a few things as a person who writes software for people:

The Gulf of Understanding
In the few years that I've been working with computers, I've come to discover that there are critical differences between how a user and developer perceive software. To a user, software should just work. There is no excuse for bugs, for things being incorrect, for functionality being off the mark. To them, software is static; Microsoft Word is a black box, self-contained, sitting on my hard drive. And as such the box should work, no strings attached. There should be no do-overs like patches or updates... that's all bullshit and it's because engineers did a bad job or are lazy. Versions are seen as just a ploy by software companies to continue to make money.

To a software developer, however, a piece of software is a living, breathing thing. More specifically, it is an evolving thing. From the developer's perspective, there is no notion of "finished" software, because they are keenly aware of a certain important property of software: it is never finished because bugs never die. As users' needs change and new ones emerge, software goes through spurts of transition and maturity. Most people who don't write software think that there should be no bugs because it should be the job of the developer to track down all the bugs and fix them, so over time, if software companies actually did their jobs, there would be no bugs. But what these people don't understand is that bugs never go away; finding bugs is simply a function of how much time you spend looking for them. Like any living, breathing, ecosystem, bugs are part and parcel of software and they will always be. If someone tells you their software is bug free they either haven't tested it thoroughly or the program is too trivial to be useful (Also the theory of decidability and the halting problem and Rice's Theorem, etc. prove that you can theoretically never actually know that no bugs exist in a program).

So software developers tend to take a less drastic perspective to software problems. When they are users themselves, a software developer is less likely to say "this software sucks!" when it crashes; they are more likely to say, "oops, I found a bug." Most normal users tend to react towards the former end of the spectrum.

This difference may be subtle, but I've been reminded of it while working on the software for JCS. The trouble is not only that the Gulf of Understanding is at play, but I'm working with people who have limited experience with software in general, so they do not have the context or conditioning to know what's an acceptable and unacceptable problem. To them, any problem with the program is unacceptable. This has been frustrating. Also frustrating is that since all problems are equally unacceptable, they must all be fixed... now! But a software developer, who understands software evolution, wants to fix things on priority, not randomly. Because bugs will never stop coming, it's better and more practical to put time and energy towards high-impact changes.

Besides the Gulf being an annoying problem, I also wonder whether it could be or already is a topic of research in HCI. I would be interested.

"Human beings were not meant to sit in little cubicles staring at computer screens all day"
The immortal line from Office Space also hit home for me today while I was doing situps. I realized that I was expending energy towards a relatively useless task; doing situps. And the reason I'm doing it is because during most of the day my body is inactive, sitting in front of the computer, so I have to spend separate time exercising as a proxy for the activity a normal human being should do in a day through his work. In a way, I've turned into a robot, doing a single task (create software) and taking in other inputs (food, sleep, exercise) all to continue to do that single task. Everything's compartmentalized, and it's in the name of specialization of labor (i.e. I know how to use a computer so my time should be used working with them). I think a more sane lifestyle would be working in a capacity that directly leads to my own well-being, like farming. As it is presently, there's a long and indirect link between the work I do and how I stay healthy. My work produces software which turns to money which then turns to food which I eat, and a side-effect of a job is a I get holidays in which to exercise. Whereas if I were a farmer, food, work, and exercise are all wrapped up into the same activity. Hmmmmmmmm.

Also related to the meaningless expenditure of energy through exercise, I recently had an idea that I told Jo about to hook up all the US's fitness centers to the power grid. If you could somehow turn a turbine with all the dips and bench presses and situps that are done at all the 24 hour fitness centers, you would effectively close the loop on energy intake (food) and expenditure (exercise) and still allow the insane type of life we all lead. I think Jo was saying they may already be doing something like this with the treadmills, but imagine if you could capture even 50% of all the energy generated through exercise machines across America. I think it could be big.

1 comment:

  1. 2 Responses:

    1. Man! Some software really does suck! (Which side of the gulf am I on?)

    2. Hooking up fitness machines to produce power is the best idea ever. I hope they find a way to make it feasible at some point.