I've been paying the rent as a professional software developer since the 80s. I've also worked both full time and part time as a musician for longer than that. In my travels, I've come to recognize a great many similarities between programmers and musicians. Both have the fire, passion and soul of the artist. And all too often, both are incredibly naive when it comes to the business end of things. Business - you know, that aspect of your work where they actually pay you at the end of the day?
Whether you're up all night banging away at the next Killer App or you're cranking up the guitar in a smoky bar full of black leather jackets, chances are good that money isn't really what you're concentrating on. However, contrary to popular belief, that doesn't make you noble. At the end of the month, no matter how compelling your art may be, your landlord is only interested in cold, hard currency. It's just the way the world works. If you don't take the business aspect of your career every bit as seriously as you take your art, you're going to end up hungry. And just for the record, I've also done the starving artist routine. Trust me, it's not nearly as romantic as it looks in the movies. Give me a fat bank account and a two inch steak any day of the week. My art's much better when I'm not distracted by the constant rumblings of an empty stomach.
Programmers by and large fare much better than their guitar playing brethren when payday rolls around. Even in the midst of the occasional economic slumps that the tech industry has weathered over the past few decades, a low paying coding job beats the heck out of a high paying bar gig. Nonetheless, all things are relative. If you make a living as a programmer, then you need computers, software, development tools, research books, and probably an extremely robust espresso machine. Spare change to tip your local pizza delivery person is also a good idea if you want to ensure that your pepperoni delight arrives while the cheese is still melted. All of this requires money. The difference between a hobbyist and a professional is that the professional lives off of that money. My best friend taught me that when I was but a fledgling, wannabe garage band musician, working for free. Believe me, getting paid is better.
You mean income is a bad thing?
Now here's where the tale starts to get a little strange. In almost any other line of work, people who pay close attention to the financial aspects of their career are simply considered ambitious and motivated, attributes that actually garner respect in many circles. Indeed, in most industries, making money is a sign of success. However, when you hang out at the local coffee shop and listen to the musings of programmers and musicians (who for some reason tend to end up at the same espresso bars), you'll find that money is not only a secondary consideration, but that those who pursue it are frequently scorned by their fellow artists as being somehow less pure in their craft.
Among musicians, referring to a song or style of music as "commercial" is intended as an insult, one that implies that the songwriter sold their artistic soul for a few bucks and is therefore beneath creative contempt. You'll find a similar attitude among programmers. Those who have financial and career goals as a priority are often held in disdain by the true software artists.
In both cases, there is nothing wrong with being zealous about your craft. Indeed, show me someone who has no passion when it comes to their vocation, and I'll show you a very mediocre craftsman. However, if you're going to be a professional in an artistic field, you have to master the business aspects just as completely as you've mastered the creative ones. Failure to do so will bring dire consequences, not all of them immediately obvious.
Why do you go to work?
First, let's take a look at why you became a professional programmer to begin with. Sure, coding is more fun than just about anything else that comes to mind, but you could code in your spare time for free. In fact, the programming you do in your spare time is often much more rewarding from a creative point of view because you're not tied to the constraints of business apps. You can write the programs and use the technologies that really excite you. So, come to think of it, why the heck would you want to spend all day writing Corporate Software that's not nearly as cool as you'd like to make it, when you could instead spend your time kicking out the really great, bleeding edge stuff that gets your motor running? Easy. Your company pays you money to write software, and even if it's not as sexy as what you do in your spare time, you need that money. Pizza ain't free.
And when you get right down to it, this really speaks to the heart of the matter. You get up each day, you shower (or so your co workers hope, anyway), you jump into the transit vehicle of your choice, and you fight the masses to get to the office so that you can pursue your day as a professional software developer. Of course, once you get there, instead of coding, you spend a large portion of each day dealing with the fallout from unrealistic marketing schemes and ill informed decisions from clueless managers who think that semicolons are merely punctuation marks for sentences. You cope with an endless stream of pointless meetings, interminable bureaucracy, insipid mission statements, unrealistic deadline pressures and a general environment that seems to care about almost everything except the cool software you're trying, against all odds, to deliver. You don't have to cope with any of this nonsense when you're sitting at home on the weekend, coding away on your favorite pet project in your robe and bunny slippers. So, tell me again why you spend a significant portion of your waking hours fighting traffic and wearing uncomfortable clothes to spend time in an office environment that seems dead set on working against the very things in life that you hold dear?
Oh, yeah, that's right. They pay you money to do so. Sorry. I forgot. Really I did.
We're in this for the money
Now let's clear one thing up right off the bat. I'm not some starry eyed, naive musician who would classify your art as "commercial" just because your primary purpose is making money. Oh, wait, what's that you say? That's not your primary purpose? Yeah, right. The word I would normally bark out in response to that relates to the end result of the digestive process of bulls, but I'm going to try my best to be a bit more eloquent here. So, let me try to put this another way.
Every single hour of every single day that you spend in the corporate world as a professional software developer is driven by one, and only one thing. Money. Get warm and fuzzy with that, or find another career. Regardless of how passionate you may be about the art and science of software development, at the end of the day, it's highly unlikely that you'd spend five seconds of your time at the office if they weren't paying you to do so. You're there for the money. I don't make the rules. It's just the way it is.
So, no matter how passionate you may be about your craft, at the end of the day, you're a hired gun. Maybe you're a full time employee. Or maybe, like me, you're a professional mercenary. It doesn't matter. Either way, it all boils down to the same thing. You show up to code only when people offer to pay you money to do so. Personally, I find no dishonor in this lifestyle. I deliver the very best I have to offer to my clients. They offer the very greenest American dollars they possess in return. >From my point of view, everybody wins in this scenario. And so, I'm constantly baffled by programmers I encounter in everyday life who speak from the perspective that only the software is important, and nothing else.
Really? Is that true? Then can I have your paycheck? I mean, only if you don't care about it, that is. Personally, I could find a lot of uses for it. But if the software is all that's important to you then shucks, let me give you my bank account number. I'd be happy to assist you in dealing with those pesky details that arise from the business end of the programming vocation. It's no trouble. Really. I'm happy to help.
Perspective is everything
Of course, anyone who has by now labeled me an insufferable wise guy is completely unfamiliar with my work, be it coding, writing, speaking or training. Yes, this is an intentionally confrontational posture towards all who bury their heads in the sand and think of software and nothing but software. In fact, you happen to be my primary target for this particular conversation. But that doesn't mean that I don't like you. In fact, it's your very posterior that I'm trying to protect.
Week after week, I either personally encounter or hear tales of you, or someone like you, being trashed in the workplace because you have no grip on the realities of the business world. You're taken advantage of and work ridiculous hours to no good end. Your software requirements change more often than your manager changes his socks. You suffer the consequences of releases that are absolute disasters because your company refuse to give you the time you need in order to do things the right way.
You are completely unarmed in this melee if your only response speaks to the needs of the software. To your complete surprise and dismay, you'll find that nobody cares. Consequently, you're ignored, your project suffers an ill fate, and the skies just aren't as blue as they could be for one simple reason. You're trying to solve the right problems, but you're speaking the wrong language. And so, you lose. Over and over again.
A simple strategy for winning
So do I have all the answers? Yeah, probably, but that's another conversation entirely (and should you doubt it, you can always take the matter up with our local attack Chihuahua - he has very strong feelings about such things). However, in this particular case, what you should really be questioning is whether or not I have a perspective on the software business that will help improve the things that you truly care about in our industry. And by the strangest of coincidences, I just happen to have some of those as well. But then, I guess you saw that coming, didn't you?
I've been known to talk for hours on end about the specific tactics that we, as professional software developers, can employ to ensure the delivery of a Really Cool Software. In fact, you could say that it's my stock in trade. Today, however, my message is much, much simpler. I'm not talking about bits and bytes here. Okay, in fairness, I never spend much time at all talking about bits and bytes. You guys already know about that stuff, and you don't need me to teach you how to code. What I am talking about, in particular, is perspective, and I deem it a critical issue. In fact, I'd go so far as to say that if you don't have the proper perspective, you're screwed, and so is your project.
So what's the perspective that I'm promoting here, and how will it help you? Just like the title says. This is business! Forget your technical religions. No one cares! Never mind how cool the app you just coded is. Nobody wants to know! Really! The people who are in a position of power and have the authority to influence the quality of software you deliver live in a completely different world than you do. Until you come to terms with this one simple fact of life, you're going to bang your head against the Corporate Wall for the rest of your career. And worst of all, the software you deliver will suck! Okay, maybe not suck in the eyes of Mere Mortals, but you and I both know that it could be way cooler than your management will let you make it.
Changing your approach
And this is where the rubber meets the road. Are you tired of the stupid decisions that limit the quality of the software you deliver? Are you tired of the ridiculous and arbitrary deadlines you have to deal with that ultimately result in software going out the door, with your name on it, that you consider to be, to put it politely, sub standard? And are you tired of losing argument after argument over this in countless meetings? Then it's time you pulled your head out of your, er, compiler! Companies who pay you to develop software are businesses, and they will only respond to arguments that have their basis in business! Learn a new perspective, and prevail!
I never use one word where thirty will do. It's a personal shortcoming. Particularly because in this case, what I've taken many words to relate can be summarized quite succinctly. Your job is not about software. It's about business. Grasp this one simple concept, and apply it in all of your interactions. Every time you attempt to promote your agenda to those who have the power to do something about it, stop and ask yourself these questions. Does what your proposing make sense from a monetary and business perspective? Will the person you're speaking with see value in it from their point of view?Or are you speaking only in terms of software?
I realize that it seems a bit strange to de emphasize technical issues when what you're trying to do is improve a technical product, but at the end of the day, everyone else shows up at the office for the same reason that you do. They're in it for the money, and business is the path to obtaining it. Speak from this perspective, and you'll be amazed at how much it improves your ability to deliver the next Killer App. Compared to dealing with people, debugging is the easy stuff.