If you know me, you know I hate meetings. But at two straight shops now I have encountered weekly “tech meetings”, where the only thing missing is pints of beer and a dart board.
Those are fine.
At our latest such chat, a young tiger asked how, in a time of encroaching uncertainty, facing the inexorable decay of entropy, us old IT farts could hope to cling to capturing broken data in our rigid SQL tables and columns.
Yeats was among us.
The falcon cannot hear the falconer;
Things fall apart; the centre cannot hold;
Mere anarchy is loosed upon the world,…
I started talking about bowling alley software.
I was implicitly rejecting his premise. When cornered, always reject premises; the argument will devolve endlessly until our turn at darts comes up again.
Bowling alley software, I countered, has nothing fuzzy about it. Pins, lanes, games, shoe rentals, leagues, Monday discounts.
Entropy! Where is thy sting?
Then I turned the question back on our young tiger, another good tactic when stumped ourselves: If you had a marvelous, fuzzy-friendly, entropy-ready database to pull from, what output would your app produce?
The blood-dimmed tide is loosed, and everywhere
The ceremony of innocence is drowned;
The best lack all conviction, while the worst
Are full of passionate intensity.
Would this app compute a non-fuzzy result to offer to some further useful processing? Would order be imposed on the unordered? Talk about defying entropy.
So in my defensiveness I took all the fun out of what could have been a rollicking good discussion, albeit without the beers.
How to program
Feeling bad about that, I have been thinking about how I might have responded more helpfully, and I have come back to the bowling alley, and what we all do when we do IT.
We do indeed impose order on organizations and their practices, precisely so we can use rigid tables and columns, in turn because tables and columns are all we know how to program.
And our organizations benefit from this bullying. Not just because, hey, now we can automate all your tedious information processing. Along the way we also root out legacy ad hoc practices that do not quite work, but which are so old they have become part of the woodwork. Case in point.
If the users will not come to the solution, the solution will go to…
That said, the experienced developer knows that bullying is not always an option. Organizations cannot always change ancient practices. At such times, Einstein’s wisdom shapes the software we write:
“Make everything as simple as possible, but no simpler.”
Where the organization has a weird practice, the supporting software should likewise have an explicit, awkward hack to accommodate their weirdness. Do not strive for an elegant, exception-less expression of a quirky business process. Expose the oddity with odd code. Future devs will be looking for it, or need to learn about it. Do not make the code simpler than the problem being coded.
Entropy is fun to contemplate, but it is true only as an average of all molecular motion. The very nature of building is to produce local islands of useful order from disorder. A programmer asked to automate a task will bedevil their user with question after question looking for invariant rules and, yes, looking for the tables and columns.
“We have an ELSE to code.”
Often users will not have answers! They will tell us precisely how to handle A and B, and A and not B, but be at a loss when asked about not A and B. They would argue it never happens, but we have an ELSE to code. It is what we do, so the users will have to call a meeting to decide.
Wait. What if we cannot tie things down so neatly? What if the rules and tables and columns elude us?
Automate what we can, leave the rest to a human exert peripheral device. Einstein still holds: automate no more than can be automated.
Many come to grief pursuing the White Whale of full automation, when a simple automation of some of a process would let a human expert handle the rest at a glance.
Do not be that Ahab. Until Google or Linus Torvald figure out how to compute the fuzzy, tap human intelligence in otherwise automated solutions.