Users of out system complained about reports printing out multiple times erroneously. They also said other reports did not print out at all. We have a developer on our team who specializes in reports. However she asked me to look at the problem because she was at a loss. I told her we first needed to find out exactly what the user was doing. Then I said we should try to duplicate their actions and the system behavior.
I took the initiative and hunted down the users who were experiencing and reporting the problems. With the information gathered by talking with these users, I was able to have our reports developers to duplicate the problem. Normally once you can make the problem happen, you can fix the problem. Replicating the problem sometimes is 80% of the work.
The reports developer could still not figure out what was happening, even though they could make the problem happen. I said we should add some logging to determine what the heck was going on. The logging did not help the reports developer. I took a look at the logging. There was no clear way to tell which report was generating which output. I had the logging modified to have each report generate a unique ID. That ID would be included with each debug output message.
Once again our reports developer was confused. The unique ID did not appear to help them understand what was happening. I took and look and recommended that she sort the debug out by the order in which the stuff was logged. That helped clarify that two reports were running at the same time. That spoke a lot to me. We have a whole scheduling program which is supposed to prevent any two reports from running at the same time. The reports developer was happy because she does not deal with the scheduler program.
I took a quick look at the scheduler. It was written in Visual BASIC by a guy who could or would only code in VB. To start I needed to get VB installed. Then I ran a debug version of the code. That is where I found that this little VB program was a bit complex. In fact, it was overly complex. It was creating multiple threads to spawn reports at the same time in parallel. That defeated the purpose of the whole app.
A Little Bit of Crypto - I have been trying to figure out to "collision resistant" some of these standard hash functions are. It is a tough concept to get my head around. I figure...