Some weeks ago I was asked to provide 100% support to an extremely urgent project.
Few days later a critical problem arose in one of the projects I usually manage. Clearly I should have to inform my boss about if, and how, my 100% support could be reduced.
In order to provide my boss an estimation of the problem resolution time I met the person who reported the problem to get more information. The problem was actually odd, and we quickly realized it was, indeed, a side effect of another likewise odd data stored in the database by a user: a too wide abeyance duration.
Both the reporter and I agreed on the fact that our experience on that project expected an abeyance duration to be within a solar year:
but the odd one spanned across three solar years:
So we searched for a requirement about that duration: we did not find any documented requirement about it.
Luckily the abeyance duration was stored in one database’s table only, and because all SQL queries were stored in XML files, it was quite simple to understand where and how abeyance duration was used in the source code. We noticed abeyance duration was always used as if it was always expected to be within a solar year.
That was a perfect textbook example of implicit requirements.
Moreover, after some phone calls, it came out the odd abeyance duration should have been considered acceptable! Yes, we had to manage a changing in an implicit requirements with likely no time available. I said: “Houston, we have a problem”.
While I was wondering about how the hell I could have coped that emergency, a scene about my university studies emerged in my mind. The Software Engineering teacher was saying:
... a way to solve a problem is to put ourselves in a situation of not having
that problem ...
I guess it was the feeling of wisdom I felt in these words which made surface another scene in my mind, the one in which the young monk of the “The Matrix” moovie says:
Young Monk: “Do not try and bend the spoon—that’s impossible. Instead, only try to realize the truth.”
Neo: “What truth?”
Young Monk: “There is no spoon.”
and the abeyance duration was my spoon!
The metaphor my associative mind suggested me was the following one.
The real world was the one produced by the source code of the web application, and the source code had been driven from the implicit requirements: every abeyance duration is included into a solar year. On the other hand The Matrix world, in which users live, lets them put in the web application a spoon: an abeyance duration which spanned across three years.
So I should not have to try incorporating the spoon in the real world, meaning that I shouldn’t have to try managing the too wide abeyance duration in the source code; instead, because “There is no spoon.”, I would simply have to rethink to too wide abeyance duration in terms of more suitable short duration intervals, each one included in a single solar year:
So, with no time available to change the source code, we solved the emergency telling the user to properly split the too wide abeyance duration.
Finally we planned for better times both to explicit the implicit requirement and to analize how to adopt the modified requirement.