There are a lot of things that annoy me in my industry: lack of commitment to writing quality code, no discipline regarding tests, and many, many more. These things irritate me, and I see them all the time, but there is one irritation I encounter that is so common that it dwarfs all others, at least in frequency.
How common is it? It's so common that this post has been in my Drafts for about five years. What I mean is, I wrote it in reaction to someone irritating me at work, but decided not to post it because I was worried they would see it and know I was talking about them. And it's been in Drafts since that day because I encounter it so often that any day I post it, it will be seen as a response to something that actually happened at work. There hasn't been a break in the last five years where I could post it without at least one person thinking it was a reference to them. That's how common it is.
In fact, I know posting even now, it's going to look like it's related to an occurrence this week. STFU co-workers, I wrote this shit ages ago. Except this paragraph, which I wrote just now.
Anyway, what I'm talking about is developers refusing to do things or complaining about doing things because they distract them from what they call "Real Work."
Here are some examples:
- "Can you come back later? I have Real Work to do."
- "Ugh, can we finish this meeting? I've got some Real Work to do."
- "I didn't have time to update that ticket, I was doing Real Work."
- "Why are we even talking about this, don't we all have Real Work to do?"
The implication here is that the developer is resisting a particular thing in favor of doing Real Work, implying that the thing they are resisting is inherently not Real Work.
And what is Real Work? Real Work is writing code. I've never seen a developer ask to stop coding so he can do some Real Work in a meeting, Real Work only ever refers to sitting at a computer and typing code.
Over my career, I've seen the Real Work dichotomy used to avoid, resist, or complain about planning, designing, architecting, retrospecting, conversing, whiteboarding, testing, bug swarming, estimating, and even deploying.
What this phrase is really a euphemism for is "fun stuff", but nobody would ever say "I don't want to go to that meeting, I have fun stuff to do," because it would make them sound like a whiny brat. As an aside, I wonder how these exact people would feel if their boss saw them on Reddit and asked them if they had any "Real Work" to do.
Here's the deal, fellow developers. You're not a professional Coder. Your title isn't Lead Code Writer. It's probably something like "Software Engineer" or "Software Developer". Your job is not to write code. Your job is to write software, and that's not exactly the same thing. Sometimes, successfully developing software means you need to plan what work will be done in a long boring planning meeting. Sometimes, developing software means estimating work so that business stakeholders can have a good idea of when stuff will be done. Sometimes it means grabbing a whiteboard and figuring out long-term architectural direction. Sometimes it means having long, drawn-out discussions or even arguments with other developers who feel differently than you. And yes, sometimes, it means writing code.
Writing code is just one part of developing software. The fact that it's the part you like the most doesn't mean you don't have to do all the other stuff - doing that stuff helps ensure the success of the project. If you're in a planning meeting, the meeting isn't keeping you from doing your job, the meeting is your job.
When you're at work, everything you do is real work by definition, at least as long as the company is willing to pay you for it (so playing Angry Birds on the shitter for 20 minutes while your legs fall asleep probably doesn't count).
I'm not arguing for unnecessary distractions. A planning meeting for poorly defined work, a discussion that leads to no decision, or a bug triage meeting that fails to identify the source of bugs are all waste, but they're not waste because they're keeping you away from your keyboard, they're waste because they're keeping you from making forward progress on developing software. We should always strive to minimize meetings and reduce distractions, but that shouldn't be used as an excuse to avoid being a professional.
Every time I hear someone complain about having to do something they don't want to and how they have "Real Work" to do, all I can hear is a crybaby whining that real-life professional software development doesn't consist of them sitting in front of a monitor with headphones in for 8 straight hours per day. Get over it, you're not entitled to fail to communicate with your team or your business simply because it's not fun for you.
Imagine if you ordered a hamburger at Burger World and the register-worker told you that he wasn't putting in your order because the part of his job he likes is flipping the patties, and he really doesn't like entering orders. That's you every time you talk about "Real Work."
This is part of the reason software developers have a reputation for being unprofessional. It's not because we like wearing t-shirts with dumb nerd shit on them or curse a lot, it's because we have a tendency to act like self-entitled, obstinate twerps.