We’re Not Paid To Write Code

code 0 comments suggest edit

On Twitter yesterday I made the following comment:

We’re not here to write software, we’re here to ship products and deliver value. Writing code is just a fulfilling  means to that end :)

binary-code All I see now is blonde, brunette, redhead.

For the most part, I received a lot of tweets in agreement, but there were a few who disagreed with me:

While I agree in principle, the stated sentiment “justifies” the pervasive lack of quality in development

Doctors with this mentality don’t investigate root causes, because patients don’t define that as valuable

That’s BS. If you live only, or even primarily, for end results you’re probably zombie. We’re here to write code AND deliver value.

I have no problem with people disagreeing with me. Eventually they’ll learn I’m always right. ;) In this particular case, I think an important piece of context was missing.

What’s that you say? Context missing in a 140 character limited tweet? That could never happen, right? Sure, you keep telling yourself that while I pop a beer over here with Santa Claus.

The tweet was a rephrasing of something I told a Program Manager candidate during a phone interview. It just so happens that the role of a program manager at Microsoft is not focused on writing code like developers. But that wasn’t the point I was making. I’ve been a developer in the past (and I still play at being a developer in my own time) and I still think this applies.

What I really meant to say was that we’re not paid to write code. I absolutely love writing code, but in general, it’s not what I’m paid to do and I don’t believe it ever was what I was paid to do even when I was a consultant.

For example, suppose a customer calls me up and says,

“Hey man, I need software that allows me to write my next book. I want to be able to print the book and save the book to disk. Can you do that for me?”

I’m not going to be half way through writing my first unit test in Visual Studio by the end of that phone call. Hell no! I’ll step away from the IDE and hop over to Best Buy to purchase a copy of Microsoft Word. I’ll then promptly sell it to the customer with a nice markup for my troubles and go and sip Pina Coladas on the beach the rest of the day. Because that’s what I do. I sip on Pina Coladas.

At the end of the day, I get paid to provide products to my customers that meet their needs and provides them real value, whether by writing code from scratch or finding something else that already does what they need.

Yeah, that’s a bit of cheeky example so let’s look at another one. Suppose a customer really needs a custom software product. I could write the cleanest most well crafted code the world has ever seen (what a guy like me might produce during a prototype session on an off night), but if it doesn’t ship, I don’t get paid. Customer doesn’t care how much time I spent writing that code. They’re not going to pay me, until I deliver.

Justifying lack of quality

Now, I don’t think, as one Twitterer suggested, that this “justifies a pervasive lack of quality in development” by any means.

Quality in development is important, but it has to be scaled appropriately. Hear that? That’s the sound of a bunch of eggs lofted at my house in angry disagreement. But hear me out before chucking.

A lot of people will suggest that all software should be written with the utmost of quality. But the reality is that we all scale the quality of our code to the needs of the product. If that weren’t true, we’d all use Cleanroom Software Engineering processes like those employed by the Space Shuttle developers.

So why don’t we use these same processes? Because there are factors more important than quality in building a product. While even the Space Shuttle coders have to deal with changing requirements from time to time, in general, the laws of physics don’t change much over time last I checked. And certainly, their requirements don’t undergo the level of churn that developers trying to satisfy business needs under a rapidly changing business climate would face. Hence the rise of agile methodologies which recognize the need to embrace change.

Writing software that meets changing business needs and provides value is more important than writing zero defect code. While this might seem I’m giving quality a short shrift, another way to look at it is that I’m taking a higher view of what defines quality in the first place. Quality isn’t just the defect count of the code. It’s also how well the code meets the business needs that defines the “quality” of an overall product.

The debunking of the Betamax is better than VHS myth is a great example of this idea. While Betamax might have been technically superior to VHS in some ways, when you looked at the “whole product”, it didn’t satisfy customer needs as well as VHS did.

Nate Kohari had an interesting insight on how important delivering value is when he writes about the lessons learned building Agile Zen, a product I think is of wonderful quality.

It also completely changed the way that I look at software. I’ve tried to express this to others since, but I think you just have to experience it firsthand in order to really understand. It’s a unique experience to build a product of your own, from scratch, with no paycheck or deferred responsibility or venture capital to save you — you either create real value for your customers, or you fail. And I don’t like to fail.

Update: Dare Obasanjo wrote a timely blog that dovetails nicely with the point I’m making. He writes that Google Wave and REST vs SOAP provide a cautionary tale for those who focus too much on solving hard technical problems and miss solving their customers actual problems. Sometimes, when we think we’re paid to code, we write way too much code. Sometimes, less code solves the actual problems we’re concerned with just fine.

Code is a part of the whole

The Betamax vs VHS point leads into another point I had in mind when I made the original statement. As narcissistic developers (c’mon admit it. You are all narcissists!), we tend to see the code as being the only thing that matters. But the truth is, it’s one part of the whole that makes a product.

There’s many other components that go into a product. A lot of time is spent identifying future business needs to look for areas where software can provide value. After all, no point in writing the code if nobody wants to use it or it doesn’t provide any value.

Not to mention, at Microsoft, we put a lot of effort into localization and globalization ensuring that the software is translated into multiple languages. On top of this, we have writers who produce documentation, legal teams who work on licenses, marketing teams who market the product, and the list goes on. A lot goes into a product beyond just the code. There are also a lot of factors outside the product that determines its success such as community ecosystem, availability of add-ons, etc.

I love to code

Now don’t go running to tell on me to my momma.

“Your son is talking trash about writing code!”

It’d break her heart and it’d be completely untrue. I love to code! There, I said it. In fact, I love it so much, I tried to marry it, but then got a much better offer from a very lovely woman. But I digress.

Yes, I love coding so much I often do it for free in my spare time.

I wasn’t trying to make a point that writing code isn’t important and doesn’t provide value. It absolutely does. In fact, I firmly believe that writing code is a huge part of providing that value or we wouldn’t be doing it in the first place. This importance is why we spend so much time and effort trying to elevate the craft and debating the finer points of how to write good software. It’s an essential ingredient to building great software products.

The mere point I was making is simply that while writing code is a huge factor in providing value, it’s not the part we get paid for. Customers pay to receive value. And they only get that value when the code is in their hands.

Tags: software development

Found a typo or error? Suggest an edit! If accepted, your contribution is listed automatically here.



39 responses

  1. Avatar for Rob
    Rob August 26th, 2010

    Agreed. We are really paid to solve problems. Code is an artifact of solving problems - along with discussions, tests, and hopefully working solutions as well.

  2. Avatar for JcMalta
    JcMalta August 26th, 2010

    I hope this post is not a reaction to any recent evaluations.
    To many people, you are a coding "God" .... your small team has recently revoultionised web development on the MS stack and all indications are that you will continue to do so.
    I for one appreciate every blog you make and the contributions you have made to the betterment of the devleoper world could be considered priceless.
    To use any simple "metric" against such outstanding skills in communication, foresight and "setting the right eample" would be silly to say the least.
    Keep doing things the way you have been doing them!

  3. Avatar for Andrea Saltarello
    Andrea Saltarello August 26th, 2010

    or, to put it in simpler words: the ISO9126 standard defines quality in IT software intensive systems as the level at which the system conforms to stakeholder's requirements

  4. Avatar for Bevan Arps
    Bevan Arps August 26th, 2010

    I think you're quite right - the code isn't the point, it's a means to an end. In work time, anyway (*).
    I captured my thoughts on this area last year with an article on my own website, "Nobody wants my Code".
    (*) In my own time, I code because it's fun.

  5. Avatar for phil peace
    phil peace August 26th, 2010

    I totally agree. We used to have a mantra at an old company of mine:
    "People don't want half inch drill bits, they want half inch holes"

  6. Avatar for Matt
    Matt August 26th, 2010

    What a provocative article. I totally agree.

  7. Avatar for Erx
    Erx August 26th, 2010

    Ok, just to put forward, I love Haack and S.Gu ( pronounced HackAndGu), and to make an off course side note, please oh please include ability to return multiple views from one action so we can cleanly update disjointed areas of a page without resorting to js-mess ( pronounced, jay-ess mess), thank you and btw I agree with what ur saying. Catch from Australia, ( pronounced, "Australia")..... What Did u expect????

  8. Avatar for Renzo
    Renzo August 26th, 2010

    I totally agree when you say: "Quality in development is important, but it has to be scaled appropriately"

  9. Avatar for Tony
    Tony August 26th, 2010

    A project can be done fast, done right, or done cheaply. Pick 2. You will never ever be able to pick 3 unless you find someone like Mr. Haack to write code for free. =P
    Like anything in the world. Development is a balance of many things. There is a perfect balance to every project. The problem is getting everyone from the CEO down to the lowest code monkey to be on the same page.

  10. Avatar for Jeff Sheldon
    Jeff Sheldon August 26th, 2010

    Well... I agree somewhat. I mean, that's how our company is as well. Quality is scaled back some in order to shorten the time to market. The demand/priority for the product decides it's time to market. I barely even get any say in when something is going to be completed, they just expect I can get it done in that time frame. So I agree somewhat about how things really are.
    I just don't like it :)

  11. Avatar for Jennifer
    Jennifer August 26th, 2010

    Thanks Phil. That context makes a huge difference, at least for me. As a PM the responsibility is to ship a great product, on time! As a developer, your being paid to write code that implements the required features for the product. Context makes all the difference!

  12. Avatar for Ray
    Ray August 26th, 2010

    It all goes back to the Goal...isn't that right Jonah Phil?

  13. Avatar for alessandro
    alessandro August 26th, 2010

    Bravo! Good post. I'm in agreement too. You can easily compare this analogy to the thought of wasting computer time and making slow apps. However, wasting cheap computer time to save programmer resources is a wise design decision. In other words, our time is often the most expensive in terms of software development and we all need to learn trade-offs.
    In this business, if you cannot deliver functional applications in time, your out.
    Writing good software requires that we make serveral tradeoffs with many factors out of our realm dictating most of the decisions. Blindly ignoring everything else in the name of writing the most efficiently crafted piece of software will most likely not end too well.
    Simply, if you are creating the next best car with great milage, the fuel efficiency won't matter if the car doesn't work.

  14. Avatar for John
    John August 26th, 2010

    The first thought that came to my mind was "how typical, a program manager at the company that delivers the game console with a 50% failure rate is de-emphasizing quality . . . ", but I get your point, even if I believe that it was imperfectly delivered.
    I would use the term "benefits" to the user, not "value". In marketing, "value" is most often associated with cheap stuff than to quality. Wal-Mart emphasizes value. GM emphasizes value. Lexus doesn't. Nordtram doesn't.
    From a dictionary standpoint, "value" is supposed to mean everything that a user gets out of something, but that's not the most common use.
    Also, I wish that you had mentioned usability instead of shipping date. Usability is intrinsic to value, but is often neglected. Nothing sucks away user happiness like a poorly designed interface. Let's say that I'm late for work and I've got 5 minutes to use a site to make an online transaction. I can't be slowed, because I couldn't figure out an unintuitive UI.

  15. Avatar for Nate
    Nate August 26th, 2010

    At my last job I had a statement similar to what you said. The code we were working on was far from complex. It was a lot of database calls, and handling a process.
    I remarked that if we're getting paid to write code, we're ripping the company off. Because they could always find someone cheaper to write this code.
    We're getting paid to help solve business problems. Sometimes that means identifying bottlenecks, sometimes it means seeing bad policies, and sometimes it means finding the off-the-shelf software that will solve their problems.

  16. Avatar for Anon
    Anon August 26th, 2010

    Nice post, Phil. But you know perfectly well that, as a Microsoftee, you're paid to sit in meetings and process email (often at the same time) ;)

  17. Avatar for Pablonius
    Pablonius August 26th, 2010

    While I agree in principle with almost everything in your post, I think quality still needs to be stressed to a certain minimum level.
    I agree that there is little value in creating "perfect" software, but the other side of the spectrum (i.e. "time it market is everything") sacrifices your ability to push new features out quickly and maintain overall system stability.
    In my experience business trying to push all three points of the iron triangle at the same time usually find they have none delivered (expensive, slow, and bad). And that my friends, is bad for business.

  18. Avatar for Viktor
    Viktor August 26th, 2010

    I agree with most of what you said, I just have a little remark. You're saying code is part of a whole. I say without the coding, there is no product. You can skip documentation, localization and still have a working product in many ways. But without the coding, there is nothing. You can't write documentation on something that doesn't exist, and you can't localize something that doesn't exist. Code is not only part of a whole, code is the central part of the whole. At least in that case. :)

  19. Avatar for Roboblob
    Roboblob August 26th, 2010

    I mostly agree.
    The best is when these two things match and writing good code is complementary to delivering good products to the clients.
    But i find that it is terrible when you see lots of poor code mashed up just to complete the deadline and deliver even if it will crash later and be hard to maintain.
    but its a real life that we live in... so you have a good point there.

  20. Avatar for Anna Lear
    Anna Lear August 26th, 2010

    I agree. Besides, good code and providing value to the customer are not mutually exclusive concepts either. If something is hacked together in horrible ways just to meet a deadline and make a quick buck, the application will eventually fall apart (run slow, fail in weird ways, etc.) -- and that definitely is not valuable to any customer, unless they specifically ordered an "app that crashes every time I tab out of it".

  21. Avatar for mat roberts
    mat roberts August 26th, 2010

    Ahhh, you ascent of the value chain has begun. Next thing you'll be saying "we're not here to ship product, were here to make money".

  22. Avatar for Joe Enos
    Joe Enos August 27th, 2010

    I agree for people in leadership positions - software development managers, lead developers, architects, etc. But several of the places I've worked have only one or two people who actually understand the business needs and make sure the solution meets business needs. The rest of the department is made up of people whose job IS to just write code, and their jobs can be measured by code quality and quantity.
    In a large shop, I wouldn't expect the junior developers to know or care about how much value they're delivering to the customer. It's simply not their job, any more than it's the job of the receptionist to make sure they're getting the best deal on long-distance phone service.

  23. Avatar for tobi
    tobi August 27th, 2010

    Did you learn that technique of putting in non-explanatory images from Joel Spolsky?^^

  24. Avatar for Kevin Pang
    Kevin Pang August 27th, 2010

    Another point to consider: delivering bad code can actually destroy value rather than create it (e.g. maintenance costs in the future, bugs that result in legal action / tarnished reputations, etc.).

  25. Avatar for D0cNet
    D0cNet August 27th, 2010

    In short, people will buy into "best value for your money".

  26. Avatar for haacked
    haacked August 27th, 2010

    @Joe I disagree. I think junior developers should care about the value they're delivering. After all, they're not robots. It's very gratifying to know that the code you write has impact!
    When I was a junior developer, I found ways where I could meet the customers needs by writing less code. For example, by finding existing libraries that we could build on that solved their needs. If I were only focused on "doing my job" which is writing code, I would have written all that crap form scratch. Horrible!
    I think when you focus on delivering value, you realize you're not being paid by the pound when it comes to code (unless you're an hourly contractor of course). ;)
    And to all those mentioning poor code, believe me, I agree that quality is important. I'm not advocating choosing poor code vs good code. I'm just pointing out a distinction between good code and Space Shuttle code. I still set the bar high, but recognize it does get scaled within that high bar to meet the specific need.

  27. Avatar for David Tchepak
    David Tchepak August 27th, 2010

    Hi Phil,
    I think the space shuttle example is a red herring. As you point out, there is a big difference between quality as meeting business needs, and low defect count. Appropriate testing and whether you use formal methods or not depends on the context, but perhaps other forms of code quality are a more fundamental part of software development.
    Posted my thoughts on this here.

  28. Avatar for David
    David August 27th, 2010

    And yet so many job postings ask for coders...

  29. Avatar for bryanl
    bryanl August 28th, 2010

    Actually, you most likely are paid to write code. The fortunate consequence of you writing code means problems are most likely solved.
    Unless you are in a position to steer a company, you must play your part on the team. Over stepping your bounds could put you in hot water with your management or team. (even worse)
    That being said, I fully agree with your sentiment, but am skeptical of your rhetoric.

  30. Avatar for Randy Bone
    Randy Bone September 1st, 2010

    "As narcissistic developers (c’mon admit it. You are all narcissists!), we tend to see the code as being the only thing that matters."
    Nope, can't agree with that. The only thing we all have in common is that we're all introverts. Really. You would not have spent your youth in front of a computer screen if you weren't. You'd have been out chasing girls.

  31. Avatar for Nishal
    Nishal September 6th, 2010

    I totally agree with you, Phil. Just like everything else in life, we do things for a reason. People who disagreed on this are either fanatic code lovers (they write code because they love it) or are lying too feel good about themselves. That's what I think!

  32. Avatar for Andrej
    Andrej September 8th, 2010

    actually i am really surprised why a lot of people in software industry are arguing about obvious things...
    What you are saying is that "you are paid for results/value, not the process (writing code, construction work and etc.)"
    In real life any customer doesn't care how much time you spent on bringing the value to them.
    So, does it make sense to discuss such topic at all? Or is it software developers are SO special ?...

  33. Avatar for Owen Davies
    Owen Davies September 10th, 2010

    Totally agree.
    We're problem solvers!
    Business users don't care if we write code to solve the problem, or if we can buy it from somewhere. As long as it solves the problem within budget we did a good job.
    My company requires a database product to use on the website I'm writing for them...but I wouldn't even think about writing my own database...I'd use MS SQL or Oracle or an open source one.
    Did I fail by not coding my own DB? no...

  34. Avatar for Rickard Nilsson
    Rickard Nilsson September 12th, 2010

    It is "real artists ship" not "real artists write nice code". I think Steve Jobs pharased this one 25 years ago.

  35. Avatar for Donkey
    Donkey September 14th, 2010

    Hmm.. seems like a lot of words in the post, just because you received a few unsupportive tweets. Just tell them they're wrong, instead of towing the middle line, backing down and trying to be liked by everyone

  36. Avatar for Nerd Gizzle
    Nerd Gizzle September 14th, 2010

    Explains why we wrote superb/well packaged apps and never got anyone to buy into the product :-(. Did take my money though so in that instance.. i suppose was paid to write code.. :-D
    Provocative piece... given me something to ponder over.... Although i wonder, In the instance that your customers care more about efficiency/maintenability code than delivery would this still apply? I reckon you cannot always achieve the same result with the same tactic.. Considering external factors are also in play

  37. Avatar for paul mungai
    paul mungai September 28th, 2010

    Hi Phil,
    I completely agree..."Sometimes, when we think we’re paid to code, we write way too much code. Sometimes, less code solves the actual problems we’re concerned with just fine.".
    Great post!

  38. Avatar for Tugberk Ugurlu
    Tugberk Ugurlu November 13th, 2010

    I agree with Phil. It will be so wrong to say that someone like phil scottha and scottgu are writting code.
    They are way better than that. Think, They created ASP.Net MVC ! There is nothing to say more :)

  39. Avatar for kaydence g b
    kaydence g b January 2nd, 2011

    why would someone stele someones code