The 7 Sins of Software Developers


I’m trying to assemble a list of sins for software developers. Ideally 7, since, well, this is the normal number of sins one would expect.

I’ve come up with the list below. It is by no means definitive, and hopefully I can get enough feedback to improve it greatly.

Some caveats:

  • I don’t say that all software developers exercise all the time all these sins. Just that most software developers are guilty of at least some of them at least sometime 🙂

  • A few yeas back, I was guilty as charged on all 7 sins. I still find myself guilty many times of at least 3.

Anyway, here it is:

We, software developers, suffer from the following 7 sins:
  1. We are not dependable
1.1. We ship with bugs
  1. We (think that we) are perfect and have nothing more to learn

  2. We don’t learn (or forget) our history

  3. We don’t value our experienced peers

  4. We develop a high tolerance to pain

  5. We don’t manage time effectively

  6. We don’t take enough care of personal health


p>Anything to add, remove, fight for or against? Please let me know in the comments.


  • I don’t think “lack of dependability” can be blamed on programmers. Every single new piece of software is an experiment by definition, and experiments can fail — it’s in their nature. As for bugs, even if you ignore the perpetual issue of customer and/or management pressure, there are problems that simply can’t be caught until production. Even unit tests are written from an insider point of view, and as such probably suffer from blind spots.

    Same thing about managing time effectively. How efficient do you want to be? Assuming you have any say in how you manage your time in the first place — see above.

    The “tolerance to pain” bit is spot-on, though, and I think it deserves extended discussion.

    • I agree with the part of every new piece of software being an experiment. But, since we know that, we should be very clear on that point, shouldn’t we? Why would we promise something we are not sure we can do?

      As for shipping with bugs, I agree that we cannot catch all problems until production. I think however that those are very intricate bugs.

      • I  don’t make promises, Alex. I try to make it clear to all customers that nothing is guaranteed, by the very nature of this noble craft of ours. But I’m yet to meet a customer who understands this, and they’ll twist my words around until they can construe them as a promise of sorts.

        Maybe that’s understandable up to a point, since they are paying money. But money can’t change the nature of reality.


  • I got another one on twitter from @vadimcomanescu :

    “After a while we see abstractions in everything we do, even when is not necessary.” Reflections on design, craft and software

A new home for merging ideas about design

It is my strong belief that software design can learn a lot from other design disciplines. I wrote blog posts, a book and did talks on this topic, and it was time to group them all together. These ideas have now a new home: My plan is to add more blog posts there, and to involve other people doing work in this area.