Thursday, September 09, 2010

do I have to do EVERYTHING?

I work closely with people who are not systematic workers.

Broken televisions would bamboozle them. I mean, what do you do if your click your remote and the TV doesn't turn on? Here's what I do: I think about the components in the system, which are me, the remote control, the TV, the power cord and the wall outlet.

First I check me. Am I actually pushing the right button on the remote? Yes. Okay, so maybe it's the remote. Maybe its batteries are dead. So I pop some new batteries in (maybe after first testing them in some other device). Darn! The TV STILL won't turn on. Okay, I check the TV itself: is there anything covering the remote-signal receiver? Can I turn it on WITHOUT the remote? Nope. Hmm... maybe it's the power cord...

Now, if I keep checking these things and get all the way to the wall outlet and confirm it works, then I'm screwed. I've tried everything I can try, and now there's nothing for it but calling in a repairman. But I can do so knowing that I've tried everything I'm qualified to try. When I hire the repairman, I won't be wasting money. I'll be hiring an expert when an expert is needed.

I know some people are better at thinking this way than others. The fact that I'm good at it is, perhaps, one of the talents that helps me program computers. People who are bad at systematic thinking aren't stupid or bad -- but some of them are LAZY!

Say my broken-TV-analysis steps never occurred to you. Fair enough. But say you call me on the phone, complain that your TV is broken, and I ask you about the outlet, the chord, the TV itself, the remote and whether or not you're sure you're pressing the right button... and you say, "Whatever. I can't be bothered to check all that stuff"?

That's fine. That's your right. But you're not paid to watch TV. What if you WERE paid to watch TV and still refused to go through my steps AFTER I pointed them out to you?

At least once a week, something like this happens at work. And though I complain a lot about my current job, I've noticed this same thing at other jobs.

I'll finish my part of a project and hand it over to whoever is supposed to work on it next. Let's say it's some guy named Dave.

I've written this complex program that Dave can control with a little text file that contains instructions. My program follows his instructions. For instance, if he wants my program to run every day at 3pm, he's supposed to add "startup=3:00pm" to the text file. Maintaining this file is Dave's job, not mine.

Inevitably, Dave will come to me and say, "I made some changes to the text file and now nothing is working." I ask what he means by "nothing is working." Usually, he says something like, "All I see is a blank screen."

I ask, "Well, did you see a blank screen before you made your changes?"

"No. Before I made them, everything worked fine."

"Okay, so the problem must be in one of the changes you made."

After a long pause, Dave says, "I made, like, a hundred changes. I don't remember everything I did."

At which point I really want to say, "And this is my problem because...?" But I don't. I say, "Well, here's what I would do in your shoes. I'd remove every line from the text file and then add them back in one by one. Keep doing that until you get a problem. Then you'll know exactly what line is causing the problem."

Dave just stares at me.

I go back to work, and an hour later, Dave says, "It's still not working."

I ask, "Did you do what I suggested? Did you try the lines one by one?"

"No. That would take too long."

No, it WOULDN'T take too long. If he'd started doing it when I asked him to, he'd be done by now. In any case, it takes the time it takes. If I skip checking the remote control and the problem happens to be in the remote control, I'll never solve the problem. Too bad if it "takes too long" to check the remote control. Life sucks sometimes.

The Daves of the world always look at me incredulously when I suggest they delve into a problem systematically, as if there MUST be some other way. As if they suspect that I have access to some sort of magic power tool that I'm hogging all to myself.

But I do this sort of systematic problem-solving every day. Sometimes several times a day. If I didn't, many problems would go unsolved and I'd lose my job. Sometimes it sucks to have to check everything, and sometimes I don't feel like doing it, but them's the breaks!

The Daves in my life are usually designers and managers. I feel for them somewhat, because they don't have to be systematic (in this way) in most of their work. But they're asking me to build complex systems for them, and they want to interact with (and control) those systems. And -- sorry -- when you have a problem with a complex system, you HAVE to be systematic in your attempts to fix it.

But they just WON'T. So in the end, I have to do it. And I know they think I SHOULD do it -- even if it's not my job -- because, after all, I'm a programmer and it's my area of expertise. Except that's bullshit! Checking-everything-carefully is no one's (and everyone's) area of expertise.

It's fine to pass the buck to someone else because you're not qualified to carry it. It's not fine to pass the buck to someone else because you're lazy.

No comments: