Welcome to the nightmare factory

In my earlier post I called software development the dream factory.

Unfortunately the very things that make software the stuff of dreams can also create nightmares.

World without rules

Once you’ve started to write some software, you are setting up rules for your new world.

Those rules define what you can or can do. Once they are defined, it’s often very hard to change them.

There lies the problem. Software is so unbounded by rules that inevitably people make the wrong decisions and are then locked into those decisions.

Once you have created your world you have to live in it. You must live with all the decisions you’ve made.

Looking into the future

Software changes so rapidly that it becomes a challenge to choose tools and techniques that will stand the test of time. Today’s best practice becomes tomorrow’s worst practice.

I recall when bitshifting was a clever optimisation. I was there when winforms was the best way to build desktop applications. I saw service locator go from being a best practice to a worst practice, replaced by IoC containers.

Right now, if you wanted to build a SPA, which javascript framework would you choose? How many of the current favourites will still be in use and being maintained just 2 years from now?


    One of the problems with software is that is it really, really flexible … until it isn’t. One moment you are defining the rules, then you are bound by the rules. Depending on the choices made up front, some of the flexibility might remain.

    Imagine for a moment if a software project were building a bridge over a canyon (I know it’s an overused example). Some of the things that might be completely impossible in the real world are easy, but things that easy in the real world might be close to impossible, depending entirely on the decisions made earlier. For example, it might easy to move the bridge 200m down the canyon, but impossible to add a new coat of paint.

    This is terribly confusing for consumers of the software as the rules aren’t consistent. In the last ‘bridge’ they requisitioned, moving the bridge was hard but painting was easy, why is it so hard this time?

    Welcome to the nightmare factory

    The dream factory also creates nightmares. There are no rules. You are in full control.
    You are going to make the wrong decisions with long term consequences.
    Welcome to the nightmare factory, enjoy your stay 1.

    1 On the bright side, not all dreams turn to nightmares

    Welcome to the Dream Factory

    I’ve often heard software compared to all sorts of things: construction, engineering, even art.

    For me, I always think of software development is the dream factory. Software is so free of any rules, you can do whatever you want to do. It’s like a blank sheet of paper. In 3D. Or as many dimensions as you chose to define, because you genuinely can choose how many dimensions you want.

    In construction, if someone is building a house, they can’t suddenly ask to add another storey. In software this isn’t an unreasonable request. Artists are still limited by the materials they use.

    When people write games they have to build or use a physics engine. Pause to think about that for a moment. Even the rules of physics don’t apply!

    Every piece of software is like a whole new world.


    I originally trained as an engineer. A real engineer, not a software engineer.
    Real engineering is heavily restricted by physical limitations. If you are designing a frame, you’re pretty sure you are going build it out of steel. Sure more exotic materials might be an option (carbon fibre, titanium, nanotubes etc), but most are too expensive to be viable. So you’ll design it to be built out of steel, the same way an engineer 50 years ago might have done.
    Engineering means designing and building from known patterns and materials. You’ll use the same basic mechanisms, materials and machines. The configuration might change but the basic materials and patterns are the same.

    Aren’t there limits in software?

    Now software does have some real bounds. Compute, latency, bandwidth and storage are all limited. However in the age of cloud computing, only latency and bandwidth are truly limited. Even these limitations change rapidly, compared to other industries.

    This is the industry that runs on Moore’s Law, where computing performance roughly doubles every 2 years1. Imagine being an engineer, where the materials you work with doubled in strength every 2 years!
    Most software is limited only by willingness to spend time or money creating it. The only real bounds are the ones you create yourself.

    Welcome to the Dream Factory

    This is why I call software the dream factory. It is truly the stuff of dreams, limited only by the skill and imagination of it’s creators. Software itself does not impose any real bounds.
    Welcome to the dream factory, enjoy your stay.

    1 Moore’s law is more a measure of the number of transistors on a chip doubles every 2 years, however performance is a rough approximation