I’m often in meetings with stakeholders who are either overwhelmed with the complexity they’re facing or entranced by the possibilities before them and yearning to explore them all. In either case, I ask them to focus on the core of the system we’re designing by quoting Gall’s law:

A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.

This useful rule-of-thumb was articulated by John Gall in his book Systemantics, which is where I first saw it. (There’s lots more wisdom in this book; it’s worth looking into.)

The idea of starting small and evolving from there strongly resonates with my experience. You may have a clear vision of what the environment should be, but that doesn’t mean you know all the implementation details. There are also assumptions in the vision that should be tested against reality, and it’s essential that you test the critical ones before you get to the details.

Determining which aspects of the system are central and which are trivial is something of an art, and easier to do in some projects than in others. This is one of the reasons why it’s so important to start with a conceptual model instead of the user interface; UI discussions can be rife with important yet non-critical issues. Getting the big stuff right first in a smaller release allows the team to start in the right direction towards their vision, whereas aspiring to get everything right in the first iteration is often a waste of time and resources.