When you build an application or utility you are shaping a challenge for all the developers who ever interact with this code. For the rest of your team, for the future developers who maintain and extend the codebase, and for yourself – today, tomorrow, two years from now when you have no recollection of the code.
The challenge is akin to playing a game – and many of the rules of good game design apply just as well to your code base as the product of your compiled application.
A golden rule: ‘Guess what I’m thinking’ is not a fun game
But it is! I can hear some of you shouting. What about 20 Questions! What about ISpy! Yes, ok, they can be fun, given certain conditions: ISpy requires a small enough possibility space. It’s more fun in a car than a supermarket. 20 Questions (a beautiful binary search of the whole universe!) relies upon having an agent that can accurately tell you which pile of hay your needle resides in.
Without those constraints, ‘Guess what I’m thinking’ is just frustrating.