Abstraction in a nearly reasonable world
I like systems. I’m always fascinated by wonderfully designed systems which are as useful as they are beautiful. In my own work, I often feel a strong pull to “invent” an elegant and general “solution”. The result, more often then not, exhibits neither trait.
“The real trouble with this world of ours is not that it is an unreasonable world, nor even that it is a reasonable one. The commonest kind of trouble is that it is nearly reasonable, but not quite. Life is not an illogicality; yet it is a trap for logicians. It looks just a little more mathematical and regular than it is; its exactitude is obvious, but its inexactitude is hidden; its wildness lies in wait.” — G. K. Chesterton
In the rush to create, it is so easy to see patterns that don’t actually exist. Things which appear to be same are often not at all, while other things turn out to be nearly identical beneath the surface. The world is a wild place, and any designer of a system must remember that things are nearly, but not quite, as reasonable as they appear. Madness lies in the edge cases.
This is why abstraction (otherwise known as “naming things”, one of “two hard things in computer science”) too early in the design process is so dangerous.