Monday, July 2, 2012

The Illusion Of Simplicity

If there is one thing I've learned in my 11 years (holy crap 11 years?!) of developing software professionally it's that nothing is simple, not even the simple things.

I've come to understand that a big part of the reason for this has to do with the way our brains work.  We're capable of holding different and inconsistent mental models of the world in our heads at the same time, switching back and forth between them, and we're not even aware of it.  This is why when you ask a client, "how do you do <thing>?", they say "we do x, y, z", but later you find out that what they actually do is more like "if a then x, y, z; if b then y, z; if c then x, z; if d then w".

Sometimes we think our job is to discover and implement this complexity.  But our job is actually more than that.  Yes, we need to discover and model all that complexity, but our most important job is to then hide it away behind a simple facade, maintaining our user's illusion of simplicity.

And lest you blame this on stupid users, we suffer from the same problem when implementing algorithms!  At least I do.  This is one of the things I struggled with in solving the Word Ladder problem.  I kept over simplifying the problem, which presented itself when my attempted solutions ran into some condition it didn't account for.  Actually, I was lucky those solutions didn't work.  Sometimes a solution that doesn't really understand the problem does work, but as the problem changes overtime, that solution rapidly degrades.  It's the same issue, I allowed my illusion of simplicity to cloud the true depths of the problem.

Embrace the user's illusion of simplicity!  Fight your own!