Programming Blog

Jeremy Morgan

Mostly Coherent Ramblings of a Silicon Forest Software Developer

Cheap, Fast or Good. Pick Any Two

Author: Jeremy Morgan

This old saying in Programming holds true, and I’m still amazed at the amount of folks out there who still don’t get it. The matrix is quite simple yet so many folks want it all. Programmers want to build beautiful awesome software built at their own pace, and get lots of money for it. Managers want beautiful awesome software immediately at the lowest price possible. I think there is a way both parties can be satisfied.

Constructing Software is Craftsmanship

The biggest mistake managers often make is thinking that all software is created equal, it’s a commodity and [ set task ] should be completed in [ set time ]. This is a common yet expensive mistake. Software building is craftsmanship just like building a house, furniture or many other products out there. By drawing this parallel you can better understand how to get what you want.

Let’s think about furniture for a minute. What’s the difference between a handcrafted Italian Leather sofa and an Ikea piece together couch? Thousands of dollars for one thing, but why? Because of the process it takes to make it.

Italian Leather Sofa


The Italian Leather Sofa is assembled by hand out of the finest materials. The wood frame is made of high quality wood that is expensive and lasts a long time. It’s cut with detail and precision, and carefully assembled so it will not come apart easily. Then each piece of leather is cut and inspected, sewn together and put over the most comfortable springs and stuffing that they can find. It is put under a microscope to ensure its comfortable, looks good and can last 100 years or more.

Ikea Self Assembled Sofa


The Ikea model is much different. There are machines that mass produce the sections of cheap, readily available wood. If it isn’t broken and completely decayed it passes. They are slapped together and cheap readily available stuffing, the cloth is stapled over and it flies out the door. They don’t even assemble it for, but that’s your job.

Two very different models

You have two very different products made in entirely different ways. One sofa is made from the finest materials by skilled craftsmen (or women) and the other is made of commodity items and people pushing buttons on machines. So which one is better?

The answer is neither one. The sofa that’s better is the one that is better for your particular application and ability to afford it. If you don’t have $10,000 for a sofa you can at least plant your butt in something that won’t break the bank. Or maybe you don’t care enough about sofas to spend that kind of money. Maybe sofas aren’t really that important to you and you’d rather spend it on a boat, or you have kids!

Those who have the means and desire for a certain level of quality will purchase the handcrafted sofa and gladly fork over $10,000 for it. They’ll wait for it to be delivered and pay the premium rather than expecting to take it home for $200 bucks in 15 minutes. Why isn’t software treated the same way?

How to Build Your Sofa

If you’re in charge of a software project, you have to ask yourself some pretty simple questions, and they’re the same questions you’d ask when purchasing a sofa.

  • How much can I afford? (Talent and Tools)
  • How much time do I have to do it?
  • How important is each feature?
  • Is it worth the investment?
  • Is “good enough” a better choice than “the best”?

With software you have a lot more options and things to think about but the idea is very similar.

Things that are hard to control

  • How many developers you have
  • The quality of those developers
  • How well they work together
  • The amount of time your bosses give you
  • The amount of other projects on the table
  • The resources you’ll need (hardware, etc.)

These are difficult to control in most companies. Unless you have the luxury of a giant budget, tons of high quality programmers and “whenever” deadlines, these are challenges you’ll have to work with. Welcome to the real world.

Things that are easier to control

  • Talent of your developers - You can work hard to find the right people, push them to keep improving and shed the ones who hold you back. It takes time, but it can be done.

  • The environment - You can give the programmers a quiet environment free of distractions and give them the tools they need. By holding these things back you’re also punishing yourself.

  • Project Priorities - By careful prioritization of your needs you can have them focus on the important parts of the project. Giving them 200 small things to do at once will only leave with you with low quality unfinished work.

  • Time given for testing - In all the places I’ve worked I have found the managers that give ample time for testing rarely get embarrassed by shipping a product full of bugs that will embarrass them. Sell your boss on the importance of this.

  • Keep them focused - I don’t mean blocking Reddit (though that may help) but keep them focused on a small set of tasks. If programmers have more than 3 concurrent projects going their productivity drops off exponentially. Narrow their work down to a few important things and follow them to they are done.

You need to focus on the things that are easy to control and make an effort to work on it.

Focus is the key

I consider this step the most important part of the things a manager can control. Focus is more important than the talent of the programmers in my opinion. You can take the best programmers in the world and overload them with one-offs and get junk.

You don’t see doctors performing heart surgery while talking to another patient about tonsillitis while answering the phone at the front desk. Focus is important. Overloading a developer isn’t “pushing them to their peak” it’s shooting yourself in the foot.

The formula for your sofa

  • Determine what resources you have.
  • Nail down the specifications and be realistic.
  • Decide what’s the most important.
  • Be realistic about the quality. The difference between good enough and fine art is vast and expensive.
  • Divide the tasks so the important things are finished first.
  • Make a solid plan. Plan for the inevitable roadblocks.
  • Set expectations and hold each person to them.
  • Give them everything you can to help them complete it.
  • Show your bosses some awesome stuff.


Instead of relying on wishful thinking, a proper analysis of what you have and what you can do will go a long way. You don’t have to be in the software industry for long before you’ll see a team of a few people who crank out awesome software way ahead of a big group of programmers that are mismanaged.

Just use common sense and determine where you should put your focus. If you want it fast and cheap, you’ll have to expect low quality and maybe that’s ok. If you want fine art, get ready to spend some money and wait a few months. The best place to be is somewhere in the middle.

If you’re building a small widget to show the local weather on your website fast and cheap is fine. If you’re building a shopping cart and sales portal with customer data you may want to give it some more time and let the programmers build it right. It’s worth it when it works.

Do you like articles like this?

I’m constantly hacking on stuff and writing about happenings in the programmer world. You can subscribe to my feed here, or you can get the hacker newsletter 100% spam free!

You can also follow my projects on GitHub: