In my most recent (and perhaps final) consulting gig, I had to implement a complex "standard" for statistical data interchange. It was a horrible task. The standard had many problems and even some impossibilities. Eventually I discovered that no-one had ever fully implemented this standard before, including the people who created it.
Which drew me to this post on designing data interchange standards by Adam Bosworth. Here are his points and my comments from standard nightmare experience:
- Keep the standard as simple and stupid as possible. My standard nightmare was specified in hundreds of pages of XML schemas.
- The data being exchanged should be human readable and easy to understand. My standard nightmare made the data being exchanged complicated. So complicated that two people versed in the standard and the data needed to ponder it and debate it to understand it.
- Standards work best when they are focused. My standard nightmare tried to use the same syntax to share wildly different types of data, such as the contact info of a person, and the historical modifications to the reported monthly unemployment data for Sweden.
- Standards should have precise encodings. My standard nightmare got this right.
- Always have real implementations that are actually being used as part of design of any standard. The creators of my standard nightmare claimed to have done this. But eventually they had to admit that there was no such thing. They were satisfied merely to assume they got it right. But they didn't get it right - there were problems which made some parts of the standard impossible to implement. It was as if you wanted to request a person's phone number, but could only do so by specifying the person's favourite colour.
- Put in hysteresis for the unexpected. I had to look up what this means. It means, allow the system to cope with situations you haven't thought of. My standard nightmare was highly rigorous in what it allowed, and therefore made it impossible for us to return some data, or work around the problems in the standard.
- Make the spec itself free, public on the web, and include lots of simple examples on the web site. My standard nightmare was free and public on the web. It included only one example which - although simple - was incorrect.
If you are ever offered the chance to work with my standard nightmare, decline. Refuse. Escape. Quickly. Normally I like a challenge. But I like it to have a realistic chance of being solvable.
My standard nightmare is called SDMX – Statistical Data and Metadata Exchange.