For a while now I’ve been feeling like something has been missing in my programming work. I’ve referred to it as ‘craftsmanship’ when trying to express the sentiment to someone else. You know, the ability to really hone something to as close to perfections as possible give you current skill set.

But that, unfortunately, is not what most programming is about. It’s about trying to come up with a working solution in a problem domain that you don’t fully understand and don’t have time to understand.

The big reason that craftsmanship has been lacking for me is budgets. Clients often don’t want to pay for 2 hours of toying with a way to do something just to see if its a few less lines of code. They don’t want to pay for a few hours of playing with the UI so that it’s a perfect blend of features and simplicity with that perfect interaction that makes a user raise their eyebrows in appreciation.

Never mind that this type of interaction and attention is something that clients say they want. Almost every developer learns quickly that what a clients says and what they are willing to pay for are drastically different things.

Every project quickly turns in to a crunch with a few extra features tossed in. Then a difficult problem comes up and we still work hard to make a deadline since we really want to please a client. The things that suffer are the little items that would really make a site ‘pop’.

So now you’ve got a project that’s certainly functional but overall it’s a bit of a mediocre example of the high hopes you had in your head. Maybe some programmers learn to lower their hopes, they get jaded. In the 5 years I’ve been programming I haven’t become jaded yet, resigned maybe but I still try to fight the spiral to mediocre interaction.

I can see why some become totally jaded and give up though. Working on project after project that end up being ‘only okay’ gets tiring. Now it is true that the common denominator is me.

I’m the one on these projects. The clients are different, so maybe I just can’t deliver? Maybe I’m some interaction genius waiting to be unleashed on the right project?

After talking to many other developers, I don’t think it’s me not delivering. I like to think that it is in fact me aspiring for so much more than I can do. Unfortunately at some point I have to make sure my kid is fed and has a house. That’s going to trump a few hours of extra unbilled work on a project every time.

Do you have any solutions to getting the time to make that project pop?

Quote from Programming in the 21st Century.

4 responses to “The Programming Rat Race”

  1. Eric Davis Avatar

    I think most creative people deal with this. There is always something else that could be tweaked: a bit more paint here, a few more notes here, a few pixels here.

    I’ve come to realize that it is much better to ship something that isn’t “perfect” than to make it “perfect” and never ship. There are countless stories about great code or products that never see the light of day.

    Then I use my spare time to make products or side projects “perfect”.

    (I quoted perfect because you can never get some things perfect. Getting them good enough for you and your style is all you can do.)

    1. curtismchale Avatar

      Shipped code is the best kind for sure.

  2. Matthew Lang Avatar

    Perhaps selling your time at a reduced rate for these tinkering sessions is the way to go?

    Agree with the customer on a number of areas where the product could be improved upon and use the offer of a reduced rate to fix these areas.

    I face the same problem every day at work. Most of the time the customers do not want to spend extra money on getting some smaller improvements in their ERP systems.

    A bit of education on how small improvements could give them better performance/maintainability of their ERP installation is probably needed.

    1. curtismchale Avatar

      It certainly would be noble of me to reduce my rate, but I run a business not a charity. Clients are not only paying for me to type code, but my years of experience doing my job for them. Reducing my rate for ‘tinkering’ would also encourage them to negotiate the rate down any time they wanted to call work tinkering.