Would Heu-risk it? Part 30: The Corruptor
Another weapon that might blend into another card from another category. Let us look at the rhyme and then I´ll tell you why I separated them:
”Seeing is believing, we´re told as you know
But like the whispering game, flaws tend to grow
Even if the facade looks right as day
Look for the messiness hidden away”
So, what does it mean?
So ”The Facade” deals with the same concept but from a tool-perspective.
Today I thought we’d look into why this is such a weak point of software.
First of all, we have the concept of moving between technologies. In a standardized world where everyone used the same set of technologies, coding standards, architecture etc this would probably not be as much of a problem. But here we are! In a world where we have a whole jungle of options to choose from, all behaving slightly differently. A lot of those differences are not obvious and can cause results we did not anticipate.
We could for example be dealing with different operating systems, different programming languages, different databases/storage. They all have some, however slight, differences.
A good example of this is translations between different character sets. Have you ever come across a weird bug where what you see on your screen is not exactly the same as what is actually in the. database? Maybe you see. weird unhandled characters or the computer complains about garbage signs? Chances are you are seeing the effects of different character set transformations. Look up what/which (Good place to start is here) you are using and learn to recognize the problems they can cause.
Or maybe we deal with error codes in completely different ways.
Or maybe one side is doing things synchronously and the other synchronously. One side shuts down outside of office hours, the other does not. Oh the ways that could mess things up!
And/or we could be dealing with different areas of the world (with the complexities that brings, see Lost in translation), different business purposes and therefore different strengths and weaknesses.
Different businesses will value different things differently (say that quickly three times!) Some ways this could affect you is that you might use different words to mean different things, meaning you can think you are using data for something it was not meant for. Or you could be using different ways of rounding things, which could affect you a lot or not at all. Or you have different ways of calculating something that exists on both sides but are used for different purposes, say VAT. Maybe that could mess things up for you?
We are also dealing with the fact that each of these connection points adds the possibility of human error. Someone makes a change that should not affect you but it turns out it does. (see also ”The Contract”). Every added contact point brings on a lot of new complexity. Just as added team members makes a group more complex, an added integration or contact point adds to the complexity. One more system to communicate with, one more list of acceptable values to keep updated.
And of course: the biggest issue here might be that however small a problem starts out as at one end, it will/might increase with each connection point and end up a huge problem at the end. Like the whispering game, we tend to lose things along the way. It can be information, decimal spaces, small translation errors, time.
In one of the applications I worked on we imported files from a multitude of other applications, in a lot of different ways. There were text files, XML-files, word documents, spreadsheets, paper documents being scanned, pictures – you name it. We used FTP, direct file upload, file uploads via email, scanning, cloud based solutions. There were even USB-units physically being handed over.
But my example is actually: Printers!
One time, during the stone ages, I was in charge of physically printing a batch of documents for a large subset of our users.
Thousands of papers were being processed, on my local printer. This printer was used because it was set up specifically for printing on a particular type of paper, for a particular type of envelope, with very important margins, footers, headers etc.
Of course it did not work out well. I probably had to discard a few thousand paper prints because something was slightly off. And in the end it turned out the address did not match perfectly with the window on the envelope so someone had to fold them in a less than optimized way to make it fit.
A few millimeters off and it took someone hours longer just to fold the papers, imagine that!
I am very glad we moved to centralized printing after that experience.
Quote of the day
”The computer is also not famous for having mercy”Orson Scott Card
Make dirt pay – QA Hiccupps
Patterns, principles and practises of Domain-Driven Design – Scott Millett, Nick Tune
How to test an application for correct encoding – Stack overflow
Encoding test files – GitHub
Data corruption – Wikipedia