Business rule #1 for programmers

Ovid on 2006-03-09T19:14:17

I know some programmers are going to bristle at this. For some, it's because there are reasonable exceptions. For others, it's simply because they'll disagree (I get the latter quite a bit). So for your amusement, here's "Business rule #1 for programmers":

If you're not making or saving your employer money, you probably shouldn't be employed.

For many of us who are quite fond of paying the bills, this is a no-brainer. It's as useful as saying "don't try to remove ear wax with a razorblade."

While one can definitely argue that there are exceptions to this rule, for the vast majority of us, these exceptions do not apply. Yes, you want your code to be elegant and beautiful but if you're about to lose a $100K contract because you won't deliver on time, it's OK to cut corners. When customers are calling and screaming left and right about how they "can't connect", that is not the time to imperiously announce that you'll refactor the entire system to keep this from happening again.

Unfortunately, this is a failing I see in many programmers. They want "purity". Me? I want paychecks. I've been homeless. It ain't fun.

That's not to say that I scoff at purity, either. Anyone who's read my posts about grepping through a code base to remove misapplied "if/else", "ref", or "UNIVERSAL::" code knows that. The problem is being willing to do the wrong design thing now in order to do the right business thing now. It's getting back and fixing the design issues later which is the hard part.


I'd like to add ...

phaylon on 2006-03-09T21:50:08

Programming rule #1 for businessmen:

Getting-It-Done is great, but you can't wait forever to do it right. ;)

Do you really want programmers making the call?

samtregar on 2006-03-09T22:07:42

My first reaction to this is roughly "how would I know?" I'm not a business dude. I have no idea if the code I'm writing today will make money for my company. I consider it out of my hands. When I want to know if I should do something quick and dirty or slow and right I ask my manager. I try to lay out the options as clearly and honestly as I can and then I wait for the decision.

In answer to your straw man who "imperiously announces that he'll refactor the entire system to keep this from happening again," I would tell him that's not his decision to make. Nor is it his decision to make NOT to refactor the system! Programmers that under-engineer to "save time" are just as bad as the ones that over-engineer in the face of pressing business needs. Either call could spell disaster without a proper understanding of the business situation and what kind of programmer has that?

-sam

Re:Do you really want programmers making the call?

Ovid on 2006-03-09T22:44:37

I think you and I are mostly on the same page. I never said that programmers should make this call. I see a lot of programmers railing against managemers who say "we need this done now" when, in fact, it really does need to be done now. When programmers get a better knowledge of the business side, they can better understand the business decisions (and that goes for the business folks knowing the tech side) and make more reasonable recommendations.

It reminds me of when I used to manage coffee carts while in college. Some employees would complain that we'd sell 30 cents worth of product for two dollars. They thought we were ripping people off. I then sat them down and showed them how we could sell that 30 cents for two bucks all day long and go out of business. For someone to focus on just the one little thing they do and not try to appreciate the things others do is a recipe for disaster. Many programmers, managers, secretaries, QA people, etc., are guilty of this.

Re:Do you really want programmers making the call?

samtregar on 2006-03-09T22:54:13

Sure, I've been there, getting the wrong answers from the boss. Some business people just aren't good at making informed decisions even when you've patiently explained all the tradeoffs and benefits. I think we, as programmers, need to be sure we're holding up our end of the bargain - delivering all the data the business-people need to make good decisions. When they make bad ones anyway then it may be time to find a new job. Until then it's our job to follow orders, and to make the best use of the time we're given.

My objection to your "#1 rule" is that it implies that a programmer should know whether their actions are making money or not. I think that's a dangerous idea because I doubt many programmers are capable of knowing this most of the time. Certainly you don't want them guessing!

-sam

Re:Do you really want programmers making the call?

Ovid on 2006-03-09T23:03:00

True, but I see too many new programmers agonize and complain over "perfect" code, failing to realize that perfect is the enemy of the good. Of course, "perfect" is also highly subjective and changes over time. Companies are rarely hiring us for pure research. They're hiring us to get things done and either make or save money. I really do feel that one of the worst mistakes programmers make is forgetting that they're working for a business and not turning in homework.

Balance

Juerd on 2006-03-09T22:11:22

Of course, the paycheck (or in my case, having clients pay my invoices) is incredibly important.

However, the world is not black and white, and there's much gray in between. The gradient isn't linear either, and in fact, many shades of gray turn out to have a very different hue.

While the customer (boss or client) is the one you're serving directly, you're also serving other people. People who do not pay you, or will ever know that you worked on that particular part of code. They are all the people that are involved with your customer, but also people who have nothing to do with it.

To illustrate, an extremely simple example: your customer wants you to send out e-mail automatically. For some reason, you're in a hurry and have no budget and no time to care for proper code. You ignore the RFC and skip sanity checks. The project is finished in time and you get your paycheck. End of the story? Of course not. There's this nice open e-mail gateway, that spammers can abuse.

It's our moral obligation to deliver quality even if our customers specifically state that they do not need it. If they refuse to pay for it, then it is our responsibility to say "no". Even if that does mean you need to find someone else to write out paychecks.

Now, there are as many levels of quality as there are shades of the rainbow coloured gray. Of course , there is lots of purity that isn't needed. But we should always strive for more purity, because in the end, the universe will benefit from perfection much more than from rushed code written by people who write code only because of the paycheck promise.

Lots of things we do is hated by many people, who think the limitations we put in software and information systems are silly. Many of them don't know that these limitations protect their privacy , equipment, time, and sanity.

We need to find a balance. When finding the balance, think of more than your personal situation. Take the global society into consideration, too. And of course, paycheck and purity usually *are* combined without too much trouble.

Re:Balance

Ovid on 2006-03-09T22:52:00

It's our moral obligation to deliver quality even if our customers specifically state that they do not need it. If they refuse to pay for it, then it is our responsibility to say "no".

Really? Define "quality" in such an unambiguous way that everyone will agree on it.

When I'm asked about this in interviews, the thing I make clear is that if I'm told to make a button pink and have it purr like a kitten when clicked, I'll do it (even though I might ask 'em why). However, if I'm told to do something illegal I'll refuse. Unethical? I'll probably refuse (I say "probably refuse" because I might be mistaken about the unethical nature of something). Insecure? I'll balk like mad but, if they insist and it's clear that they voluntarily bear the substantial burden of the risk, I'll agree (in other words, if I put unsuspecting customers at risk, I won't agree).

Re:Balance

Juerd on 2006-03-10T11:53:37

Defining quality is impossible because a definition cannot have the required balance, as that differs per institution, per situation.

As for your second paragraph, that's more or less what I do too. (Although most of the time, it is my *job* to avoid pink buttons.)

Re:Balance

Aristotle on 2006-03-13T00:49:39

See The Crooked Timber Of Software Development and the awesome response Tye wrote at PerlMonks when I posted that link.

Re:Balance

btilly on 2006-03-17T06:54:22

I'd love to read that link. Your recommends are usually good.

Unfortunately I can't because the site has an internal error.

Furthermore the internal error shows me that they present a full stack backtrace on internal errors. Which you shouldn't do in production because it allows people to debug their attacks against your site.

If they're recommending shortchanging program quality for business considerations, the current state of the site suggests that they may wish to re-prioritize...

Re:Balance

Aristotle on 2006-03-17T07:53:21

It’s still available from the Google cache, thankfully. I also have a local copy in my aggregator, should that too fail.

Agree wholeheartedly, but there's one tricky bit..

Alias on 2006-03-10T00:04:58

In principle I agree completely.

I rarely code for clients to the same standard I code for CPAN.

Or at least, I CODE for them as well if they are paying for me to be their "expert", but I often let some of the more finely detailed testing slip, and often let the API documentation slip.

On CPAN, documentation is MUCH more important than for clients. Lots of comments for maintainers are still useful, but spending as much time on writing the POD as you spend writing the code (as you might for CPAN) just isn't worth it when there's an audience of MAYBE one.

Beyond that I think it's important for developers to learn early what is serious infrastructure work (done at a CPAN-like level of quality) and what is work that you'd be willing to throw away if you have to.

And you can mistakes if you get it wrong in both directions.

My only big stumbling block these days is trying to work out which is which, and how to deal with the cases somewhere in between. And then how do you write a set of guidelines to help you demonstrate to others how to make similar decisions...

Making other people money.

pjf on 2006-03-13T00:00:37

If you're not making or saving your employer money, you probably shouldn't be employed.

I agree entirely your statement should be obvious. I also agree that in many organisations it's not the programmer's role to know the best way for them to generate value; that's what managers are for.

However if one wants that pay-cheque to be bigger, it's worth finding out what's really important to your business. It's rare for developers to work in a vacuum, and knowing where the real priorities lay is often easier than one may think. If you do work in a vacuum, then have a chat with your manager. Say that you want to do a better job, and are interested in learning more about business priorities so you can do so. Managers love this sort of thing.

But how does taking an active interest in your employer's business improve your own salary? Well, it's simple.

Employees generate value (either revenue or savings) for a business. In most circumstances the business pays a fixed annual salary for this privilege, and pockets the rest. If you generate more value, then the business has a higher capacity to pay you. Most importantly, the business stands to lose significantly if you leave, so you can effectively negotiate that higher pay.

Taking an interest in effective value generation is also extremely valuable when switching jobs, or even striking out on one's own as a consultant.

It's worth noting that this has nothing to do with software development. In almost every job one can maximise one's personal gains by maximisng the gains of others.