In my last post I blithely said 'This
is where judgment comes in...'.
Unfortunately judgment isn't easy.
Now when I was younger - say 10 years ago - I was sure about
everything - not least my latest harebrained API design. I chalk that up to
inexperience and not knowing better.
But now after 15 years of making design mistakes I have a
lot more experience. So much so that I can literally see problems with almost
every design. A big part of this is experience morphing into instinct.
Instinct is very useful because it helps weed out absurd
ideas quickly. But instinct has limits. It is not much use if you are feeling
equally uneasy about 3 possible designs.
You need to realize your instincts are based on all your
experiences, and no one project encompasses all your experiences. Which means you can easily
can fooled into thinking something matters when it really doesn't.
For example if you feel uneasy about one of the possible
solutions because it looks inefficient. It might be your 'performance is important
instinct' kicking in. If you are working on a website expected to get millions
of hits a day, that is a valid concern. But if this is a departmental app with
10 users who each hit the site no more than 10 times a day, then probably not
I know this performance example is contrived, but believe me
often it won't be so obvious. You need a reliable way to discard irrelevant concerns
and focus on the real issues.
The best way to do this is to have a set of guiding
principles for every project you work on. Things like:
Creating a list like this gives you something more concrete
than instincts to test when you get that uneasy feeling.
If you have an uneasy feeling you simple ask yourself, Does this
violate any of my projects guiding principles?
I generally find that uneasy feelings will vanish or become
showstoppers when you do this.
Enough so that you'll be much more comfortable making a choice...
... perhaps even the right choice!