Dear Sir or Madame in the suit,
Hi there! I’m a programmer, and I’m really good at what I do. I’m pretty sure you’re good at what you do too, but I think it’s safe to say that we’re good at different things. The thing is, people like me are usually working for people like you, and that’s cool, we like that arrangement for the most part. In general, we would much rather make shiny fun things than agonize over boring things like quarterly profit margins (ew). Unfortunately, because of this arrangement, we don’t always tell you the hard truth, because it’s way too easy to just fire us and find someone who is willing to lie to you. It’s just business.
I guess what I’m trying to say is that you’re kinda making this software thing harder than it needs to be.
Here are some things that we wish we could tell you:
We talk about you behind your back.
It’s true, and it’s not helping. We can whine to each other about what ails software development all day long, but until we engage people like you in the conversation, we’re just talking to ourselves. So I’m reaching out to you. Help us out here. In exchange, we’ll help you print all the money you need for your Scrooge McDuck-style gold doubloon swimming pool or whatever it is you want out of life.
Those fussy nerds in the room wearing plaid button-up shirts and blue jeans, looking meekly at their little notepads in order to avoid eye-contact control your profit and loss. They deserve to be treated with a little bit more respect than just some code monkey who makes the button blue. We get frustrated, but we still don’t say anything, we just silently walk away with years of knowledge that you can’t replace.
You should practice empathy, for selfish reasons.
Whichever model fits your specific world view, the fact is that these nerds are shy and you pay them a lot. If you push them around and intimidate them you cannot expect a solid return on that investment. Bear in mind, when I said “shy” earlier, I meant “cripplingly stunted socially”. You might think to yourself that this is the perfect situation for you, an extroverted captain of industry with all the best ideas. These nerds will do anything you ask them to, won’t speak up for themselves, and they aren’t out for your job? Sign me up!
The thing is… sometimes, and I mean this with all due respect: Your ideas are awful. I mean really awful. Like, “Let’s add a friendly paperclip that gives advice on your writing” awful. The kind of thing where any self-respecting technologist should stand up and walk out of the room because of how silly it is, but they have kids to feed, so… the system shall have a “clippy”.
“How long is this going to take?” is not the right question.
It’s totally a fair question, you should be allowed to ask it, but it ignores a lot of things; things you should care about. The “this” is so ill-defined that it’s nearly impossible to say for sure.
The astute reader will notice in this highly informative chart that I found on the internet, that there is no intersection of all three attributes.
This is the “Iron Triangle”, and it’s not really up for debate.
What you should be asking is, “What am I getting, and is that worth what I’m paying for it?”
Then, it’s easy to keep the “good” part as the constant, and flex only on what you deliver. Nobody wants bad code. Your customers will hate it, and all those precious dollars will not be yours. We can do better, but it starts with you.
Process won’t fix your problems.
If the above sounded like that “Agile” thing that your friend the product owner has told you so much about, you’re right, it does. Sadly, it’s not the whole answer. You can’t just manage your way out of this one. Process is a way of wrangling lots of people if varying levels of skill and motivation toward a common goal. This effect is not an enhancement, it is an average. It allows you to coalesce 10 developers, one of whom does 90% of the work, into a “team”, with a “velocity”, so that you can see some burn-down charts and feel good that work is being done. Here again, you are not being told the whole truth. There is overhead associated with gathering and maintaining these team metrics (most of which are fabricated anyway). The top performers burn out, the low performers can’t keep up, the project still fails.
The real solution is to have just enough process to get by, don’t obsess over the management aspect too often, and most importantly get involved.
In computer science, we have an adage: GIGO – Garbage In, Garbage Out.
If you, yourself, in person do not actively work at making your project a success, and all you do is spout out a few “as a, I want, so that” incantations once every two weeks to be put on a 3×5 index card, no amount of process is going to save you.
Technical debt is the same as financial debt.
Every time you say “I want it now”, you are creating debt. If you never allow your developers time and resources to clean up this debt, it will never be paid back. What’s worse, there is no software equivalent of a credit bureau, so we can incur as much debt as we like, more than can ever be paid back even if you went years without incurring any more. In this instance, you are both the lender, and the consumer. This is not a position you want to be in. Technical debt inhibits future growth in the same way that being shot in the face inhibits living. When every new feature must first traverse all the past mistakes, duplication, hacks, band-aids, and overrides you never made a priority, how fast do you think you’re going to move? Faster than your competitor? Safe enough to pass that audit? I don’t think so. Wise up, pay up. There is no free lunch.
You shouldn’t be the only “decider”.
Reject the notion of closed-door “requirements gathering” sessions. Embrace true collaboration, because you have no fucking clue how this shit works.
But HE does.
Software is incredibly hard to get right, and the people actually building it are the right people to discuss what you want, and the best ways to accomplish your goals.
Listen to your engineers, or you are in for a bad time, and you will not go to space today.
That’s all for now I think. In the end, I still love what I do, I just wish we could communicate a bit more openly and fix some of these things.
Love you all, and please don’t fire me.