In a recent series of four articles Dutch national newspaper de Volkskrant gave a fascinating and unsettling account of the Dutch Inland Revenue (belastingdienst). This has apparently plumbed such depths of disorganisation that the tax collection process itself is in jeopardy. No tax revenues means no oxygen to keep the public sector rolling. Only the most rabid or naive of libertarians would not be horrified by such a prospect. Of course I was most interested in the faltering IT landscape with its six hundred different applications, the actively endorsed exodus of mature IT staff with their in-depth domain knowledge, the glaring cultural divide between generations of developers and the equally large unwillingness to bridge the chasm.
I’m not making assumptions about the code quality of these systems, although I have a bad feeling about it. Dutch tax collection must be hellish to automate. Recent decades have seen radical overhauls of tax law by subsequent cabinets of varying political colours. The politicians responsible for the running of the belastingdienst are rarely science graduates and readily put their faith in the whizz kids to translate the updated law tomes neatly into working software. You can see the challenge there. I can’t imagine lack of coding skills was the issue. I also don’t think any programmer at the belastingdienst pooh-poohs the importance of software quality; the systems process billions of euros. It’s just a highly complex and dynamic domain. I find my annual tax return complicated enough to outsource it. (Actually, I can’t be bothered).
The entirety of a nation’s fiscal law easily covers several bookshelves. To transform even a fraction of it into working software takes fiscal know-how. Should every developer at the belastingdienst have a law degree? No, but it wouldn’t hurt either. I think the comparison with professional translation can be helpful. It’s obvious that you can’t translate a text if you don’t fully understand what it says. So when a text is written for an audience of specialists a layman’s grasp of the subject matter won’t do and neither will a dictionary. During my brief career as a translator I took some introductory courses in Dutch law at the Open University with the prospect to specialise in legal translation. A legal translator has to know the subtle differences that exist between supposedly universal concepts in different legal systems. The differences between American felonies and misdemeanours cannot be mapped to Dutch misdrijven and overtredingen, even though you could translate them that way for a lay audience. Don’t forget that each English speaking country (or Spanish, French, German) has their own legal system. At least for a medical translator the human body is pretty standardised the world over.
There are generic programming skills, but there are no generic software projects. Each operates within a specialist domain – be it retail, finance, entertainment or transportation – and has its own target audience. If it caters for every tax paying resident this can only increase and complicate the domain: the more people the more exceptions to cover. Not every programmer will want to become a domain expert. The technocrats are usually well represented and they are more likely to view domain knowledge as a necessary evil. This needn’t be a hopeless state, as long as there are plenty of colleagues who do have an affinity with the business and keep the hard core techies from making rash assumptions. Above all everybody must be conscious and respectful of each other’s qualities and share a commitment to deliver quality software.
The young guns in the belastingdienst had nothing like the deep domain knowledge of some of the old hands, who had been offered generous severance packages in previous years. They preferred to work in small agile teams and release often. The mature programmers had developed a habit of working from home and share their updates weekly at the office. It wasn’t going to work.
It’s easy to point the finger at management or government, but that’s too facile. The majority of the developers – at least those with staying power – was unsuccessful or unwilling to bridge the cultural divide. Working at cross purposes must have felt like a more productive mode. No laborious meetings in which you’re tempted to call the other team waterfall dinosaurs. Just let everybody stick to their own kind. The consequences are now painfully clear.