Favor Value Over Quality

14 commentsWritten on November 11th, 2010 by
Categories: Opinions, Software Development

A mistake that many developers often make is that of putting too much effort into making their code and their designs as good as they can be. Don't get me wrong, good code and good design is obviously important. But what is even more important is that in most cases, someone is paying you to write and/or maintain that code and that person deserves a good return on his/her investment in you. Your job is to create value. Whatever it is that you're working on needs to add value in some way or another.

The most obvious way in which you can create value is when you write code that results in noticeable improvement when it is being executed. It could be a new feature. It could be an improvement to an already existing feature. It could be a performance optimization somewhere. It could be a bugfix. All of these make the software better in an externally observable manner which, like it or not, is all that really matters to the people who are funding your development activities.

Obviously, we all know that good code and good design make software better as well. It just improves the quality of the software in a more internal manner. It's not directly externally observable. It is however quite reasonable to claim that good code and good design lead to sustained productivity while working on the software. It enables the continuous creation of value without making it increasingly expensive.

So focusing on the quality of your code and design is a good thing, right? Of course it is, as long as it doesn't prevent you from actually delivering your software to the people who are supposed to use it in a timely fashion. At some point, you are going to have to accept that you can't spend all that extra time and money to make it perfect. The software you're working on is most likely supposed to reduce costs for its users, or generate money for its owners. As long as it's not being used, it's nothing more than a cost. A big one even.

Focus on creating value. Make sure you keep your code and your design clean enough to achieve that. It's not about how great you think you are. It's not about your ego. It's not about how you can tell people that you've used approach X or pattern Y or library Z in a project that users might not be happy with. It's about delivering the value that you were requested to deliver. Plain and simple.

  • Pingback: Tweets that mention Favor Value Over Quality | The Inquisitive Coder – Davy Brion's Blog -- Topsy.com

  • http://twitter.com/pseale Peter

    This sounds like Strategic Design: http://vimeo.com/12674642

  • http://martin.aatmaa.net Martin Aatmaa

    At the same time, if you ignore quality long enough, you will find yourself in a position where you can no longer deliver value accurately or reliably.

    Ah, software craftsmanship :)

  • Steve Degosserie

    Totally agree, and only those who get that should be allowed to get titles like senior dev or architect.
    @Peter, what Davy mentions is the most fundamental principle of Agile Software Development (read between the lines of the 12 principles of the Agile Manifesto) … Strategic Design is one step further where the value creation drives the design.
    @Martin, Software Craftsmaship is a very cute idea, but it shouldn’t enter in conflict with this core principle … otherwise, you’re stealing from your client.

  • http://www.blogcoward.com jdn

    +1. Very well stated.

  • Moti

    Davy,

    What would you do, if you went to an eye doctor, and he tells you something like: “im gonna fix your sight, you will see great, but you can’t shower ever again”.

    Or, if you pay for a house, and the contractor tells you that the house is great, but the slight problem – he forgot that you wanted three bedrooms, and built you just two.

    IMO, the problem with the software industry, is the product’s qulaity is (at most cases) unclear to the end customer. The client usually has no way of measuring the quality of you work, he can only say if it does what he wants (for now), or not, and even that is questionable.

    One shouldn’t favor value for quality, he should not even strive for both. If one learns enough and practices enough, in most of his everyday tasks, the value for the customer (or himself) will not race with the quality of his code, quite the opposite, actually.

  • Nick

    I have to agree….to an extent.

    You can’t really measure the value of security – until data is stolen and your reputation has gone. But somehow, you have to add this invisible value.

    Do what Davy says – but don’t get complacent when it comes to security.

  • Steve Degosserie

    Nobody said that you have to choose either Value or Quality. Obviously, the customer will always want the best value at the highest quality. But as time & money are finite resources, it’s our job as software professionals to be as transparent as possible by offering our customers the choice between alternate levels of value & quality each with their associated costs, risks and possible mitigations, all of these clearly stated … so, using approach X or pattern Y or library Z often ends up having more impacts than what we initially thought, and thus, ends up being a business decision more than just a matter of a developer’s technical taste.

  • Danny

    I totally agree Joel… I mean Davy… ;)

  • Alex Simkin

    This is a standard triangle: Value (Features) – Quality – Cost/Time. If customer has tons of money we can give him both: quality and value.

  • tcmaster

    In my opinion, you are advocating a very dangerous idea, which can mislead a lot of new comers. Value without quanlity is nothing, value without quality is none-sustainable. Haven’t you see any software been re-writen? Haven’t you think about the reason behind? It’s your so called value over quality (maybe so of those don’t even know the meaning of quality).

  • http://davybrion.com Davy Brion

    @Tcmaster

    did i say that you shouldn’t focus on quality at all? because if that’s the impression you got, it’s the wrong one… i think you may have missed the part where i said this:

    “It enables the continuous creation of value without making it increasingly expensive. “

  • http://twitter.com/vitalystakhov Vitaly Stakhov

    How many projects fail because of devs trying to make the internal quality perfect?

  • http://benpittoors.wordpress.com den Ben

    Alex Simkin, the triangle is:
    - Features (Scope)
    - Deadline
    - Resources (Cost/People)

    If you cut back on one, you also have to cut back on any of the other two. I think you can consider ‘quality’ to be a feature.

    But it’s not always in the quality department ;-) A user may require a certain feature (to deliver value) to be way less complicated than initially understood. So he may be happy with something simpler yet effective enough.

    There’s a point here, and I am going to counter it…

    There are people that have delivered GREAT VALUE by recording macros in MS Office and copy pasting them all over the place altering an identifier here or there, while keeping state in some variables declared in a Globals.vb module…

    There… let it sink.

    I can’t agree on favouring value over quality. And it would be just silly to favour quality over value.

    “It’s not about how great you think you are. It’s not about your ego. It’s not about how you can tell people that you’ve used approach X or pattern Y or library Z in a project that users might not be happy with.”

    I don’t call that quality :)

    “Plain and simple.”

    That sound like quality to me ;)