For the last day or so a really great article has been on the front page of Hacker News called Give a Damn. I really love the idea behind it and it rings true in so many ways. Personally, I have never myself been “The Kid” described in the article but I know others who have. So while I don’t want to argue with the ideas put forth in that post I feel I have to put forth an alternate point of view when it comes to what we hackers, developers, coders, engineers, or whatever you want to call yourselves do. “Give a Damn” is about, in a nutshell, how moving fast and breaking things (basically the idea of just shipping working code and to hell with anything else) will only get one so far in their career and that we must all grow up and face the realities and consequences of following that philosophy in our line of work. Give a Damn talks about how you may ship a successful product by writing crap code quickly but that eventually it catches up to you. I can see that but after only a handful of years as a professional developer I have to say that the progression from being “The Kid” (a new/inexperienced coder who just gets shit done) to “The Guy” (an experienced coder who takes create pride in his craft) may often times be backwards. I myself have gone from being “The Guy” to “The Kid”. I’m not proud of it but I have some good reasons why. The end result of realizing that a healthy balance between just getting stuff done and being meticulous is the same but the shift in priorities is different.
Your Employers Don’t Give a Damn
Whether you’re self-employed, work in a large corporation, or anything in between we all have employers. Your employers aren’t always the “boss” you report to. They can be stock holders, investors, the CEO or any authority between you and the CEO, or it can just be your clients. These people want you to create something and you want to create the best thing possible. If you’re anything like me then you take great pride in your work. You want it done right, you see all the details, and though you may not be the very best at what you do you’re still competent and you take great pains to do the very best job you can. That means paying close attention to not just what the client sees but what you see. It’s a lot like that famous story of what Steve Jobs’ father told him about painting the fence; how the mark of a true craftsman is in caring not just about the parts people see, but making sure that even the things only you see are taken care of properly. So we write clean, readable code. Make it as secure as we can, use best practices, and implement what years of research tell us about the particular thing we are trying to accomplish.
And then the boss/client/CEO/whoever comes along and tells you to change XYZ even though you know its an awful idea. They basically tell you to ignore all best practices even when both of you know that the boss doesn’t know what he’s talking about and you do. Or how about this scenario that I’ve been in quite a few times: the boss asks for X. You produce an objectively awesome product. Then about a month later the boss wants X done over. Someone else does it half-assed, sloppily, and in a quarter of the time. And guess what? The boss fucking loves it despite it being objectively inferior according to, well everyone. I keep using the term objectively because I don’t want anyone to argue that maybe the other person’s work was better and its a matter of opinion. For the sake of argument let’s assume the work that “The Guy” does truly is better.
Your Bosses Expect Miracles
The boss will come around every so often and ask for a product and it has to be done yesterday. Well, its impossible. So you’re forced to write some sloppy half-assed solution to please the boss and just hope you get a chance to go back and clean it up later.
No one gives enough of a damn to learn, well, anything
Let’s say you work as a developer but your boss is anything but. Your coworkers are also non-devs. Your’re the sole developer in a department wholly unrelated to coding but that requires your skill to function. So you’re left working with a group of people who know a few HTML tags but nothing else. They ask you for things and use phrases like “should be simple”, “shouldn’t take too long”, and all the rest that are the bane of my existence as a developer. In my case I’m a “yes man”. No matter what anyone asks me I always say “yes”. I’ve given up explaining things to people for a few reasons. Mostly because no one cares to learn. There are special circumstances where I have to explain the pros and cons of a developing in certain ways or explain the limitations and/or choices that come with wanting something or other built. In the end, however, what I explain most often goes in one ear and out the other and I’m left to make the choices for people. And when I’m forced to make choices I’m forced to choose the path of quick and dirty solutions otherwise things take too long.
Your expectations are high. Your work is underappreciated.
In the end it turns out that people just don’t have the same expectations of you that you have for yourself. You may hold yourself to a higher standard than the people you work with or for. At the same time we may also be focusing too much on the craft and not enough on the end result. I understand that a lot of what I wrote can be construed as bashing people who aren’t coders but there’s something to be said for us developers/hackers/coders not having the same priorites as those we’re working for.
In my experience as a developer I feel as if I’ve gone from being meticulous and caring greatly about the end result and all the work that goes into the result to being cynical and often not giving a damn. It isn’t permanent however. I have a healthy dose of cynicism and have learned to reconcile my need for perfection with the outcomes expected of me. There’s a time to take great care and be ba craftsman and there’s a time to just get shit done. I’ve gone from being “The Guy” to being “The Kid”. I’m not proud of it but sometimes it’s necessary and the consequences of being “The Kid” often don’t come to pass.
Don’t Give a Damn
Sometimes, when your boss wants something yesterday and doesn’t care how you do it – stop giving a damn. It’s okay to not give a damn. Get your work done. Get paid. Then go off and find a place where you can give a damn. Its not always possible to just up and quit your job but if you work in an environment where not giving a damn is par for the course and you want to give a damn then there’s a simple solution. Quit worrying so much about how much everyone sucks, get shit done, and in the meantime work on finding a place that suits you. That could mean side projects, self-employment, or finding another job. We can’t always give a damn and when we can’t then we should just not give a damn.
As a developer, I’m not sure if we always grow up. Sometimes we grow down. Maybe that realization is a sign of growing up. I don’t know. And that’s how this blog post ends. I don’t know.