I spent about an hour yesterday integrating OAuth into a learning project. From the time I decided to play with it (knowing the absolute bare minimum about OAuth), to the point at which it was successfully doing what I wanted it to took about 40 minutes. This was the development version of lego – plug in a bit of code, configure the specifics, hook it into the desired area you want, tweak a little bit… done.
Juxtapose: The time I’ve spent trying to work with code that has no discernible interfaces – A black box with no windows. Pages of instructions to achieve something trivial. Configuration in multiple places. Hours spent trying to guess the “magic” variable that you need to reference that’s defined somewhere in the depths of code but never mentioned. Underlying it all – the assumption that I know how you think.
Other developers don’t think like you. The simplest units of code should do one thing, have a clear way to make it happen and then verify that it happened. It should not affect other things that aren’t related to what the code is designed to achieve. It should be efficient. It should be Orthogonal.
Your users do not think like you do. They do not understand the inner workings of your software. The interface should require an absolute minimum of context to be useful. Even if they were dropped onto a random screen it should be clear to them what will happen when they perform an action, and it should be clear to them when the action has happened. They should never have to ask “What do I do now?”.
They should not have to understand how your brain works.