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 so much.

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:

  • Simplicity is a feature
  • Predictability & Uniformity
  • Embrace existing standards
  • Payload Driven (HATEOS)

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!