Or: Wielding the Terrible Power
Instead of talking about the code or the tools, I’d like to address the personalities of those responsible for building the web sites and software we have to use every day.
Why is so much software, well, not necessarily broken, but just shoddily built? The website of an international airline that only works in one web browser. Or maybe it’s a famous university. Or my favorite, a manufacturer of CPUs. A mobile phone company that doesn’t seem to understand best security practices. An ISP that doesn’t know passwords need to be encrypted. There is a lot more going on besides just a lack of experience. Today I assert one of the problems is a lack of accountability.
At some of the places I’ve worked, I wrote the programming "best practices" guidelines. When I address these to the public, I add something like this at the beginning:
These guidelines presume that your job is primarily to write code, and that nobody is interfering with how you do so.
Well, except that usually there’s a bunch of sarcasm and curse words in there because the whole guidelines document was inspired by having to fix some horrible code in the first place, and I’m very angry by the time I have to spell this stuff out.
But the point was that if your job description is really to write code, your job is to think. Or at least it should be. Yet many people don’t think so.
Many companies think computer people are just something they have to have by necessity. Without a real understanding, they believe these people are interchangeable. Especially in companies where employees are expected to be mindless grunts, programmers get micromanaged as if they couldn’t be self-sufficient. This isn’t healthy if they’re expected to perform their supposed job: to think.
Worse still, some programmers don’t care. To some, computer programming is just a job, one for which the least amount of study should always be sufficient. There can be a big difference in the effectiveness of a developer who is working for the money versus a developer who can’t help being fascinated by how computers work and how they could be used, and who’s been thinking about the best way to use that potential, one way or another, since childhood.
Does your company want flexible innovators, or obedient grunts? Did you choose this career because it was convenient, or is it your pet passion? And by "passion" I mean… that if you walk into a room with an old-fashioned IBM 5150, you can smell it there, and you find that distinctive smell arousing. (Don’t say you don’t know what I’m talking about.)
I’ve worked for years in companies where there was little or no procedure established in the incidentally necessary computer department. No specs, no schedule, no plan, no direction. I’m used to that. I’m used to planning a design based on haphazard dinner conversations and a few incoherent emails. What’s implied here is that the company doesn’t have any ideas about how I’m supposed to do my job, and therefore they’re paying me for my expertise. I wouldn’t mind except that inevitably in these situations I get told a little too specifically what to do. That’s OK, though, as long as I understand the intention behind all the jabber. If I can interpret what’s ultimately being asked for, I’ll deliberately do things my way when I know better how to reach the intended objective. I accept this responsibility. Because what good is my presence otherwise?
Yet some developers are not willing or able to accept this role, nor to interpret the intentions. Apparently there are GigantaMegaCorps where your job is to just write code without needing to see the whole picture. You could live an entire career in these jobs and never have to make a big decision. But in a tiny company with only a few computer guys, you have to be willing to make decisions for the greater good.
I’ve worked with guys who could tell me how our instructions were incorrect, infeasible, or hypocritical, but wouldn’t tell the boss and wouldn’t deviate from those instructions even though we knew it would later cost the company time and money. Sometimes the boss is a jerk, but I think sometimes the developer is also part of the problem if he’s too afraid to make decisions that need to be made. It should be his job, remember? I don’t get that, but I wonder if it happens all the time.
Back when I would go to movies, I would watch the credits roll by and wonder how it was possible that not one of those thousands of people were willing to stand up and ask why the movie they were making had to be so terrible. In the behind-the-scenes featurette about the making of Episode I, there are scenes where George Lucas walks into a room, and all his henchmen are on the edge of their seats with a nervous smile because they’re all so desperate to be a part of Star Wars. There are scenes where George Lucas announces something stupid, and everyone has a look that says, "Yikes, how do I respond to that while still being a part of Star Wars?" So no one says anything. And George just goes on talking to himself. I don’t know, maybe everyone knew he would blow up, and keeping quiet was the least painful option, that is, while remaining officially a part of Star Wars.
Anyway, something just like that is happening within companies where programmers are mysteriously not willing to question stupid instructions even though, by definition, they’re highly-skilled experts, or at least they should be.
So I guess I would just like people to think about the situations they’ve been in, and whether they did the right thing, and why. I’m making a lot of gross generalizations, but I think they ought to prompt a real memory of your own. And I’d like to see people less afraid of risking their jobs for the sake of a necessary confrontation, especially if they’re in the USA, working in the valuable field of computers. Stop being a wuss and subsequently allowing your company to make it onto my list of Most Broken Websites.
Of course, employers also should be interested in allowing people to work effectively, to allow them the responsibility they need, but that’s already been said many times.
Just as you have an obligation to follow some agreed-upon "best practices" so that you’re not being a jerk to your coworkers, shouldn’t you also help your company as a whole by speaking up when things are going terribly wrong and no one else understands? In the long run, wouldn’t that attitude be best for your career?
• • •
On the other hand, if you’re a third-party consultant, take the money. Take the money and run. Just don’t let me find you after I have to explain to the boss that the thing he paid you for never worked.