Like a lot of Australians I occasionally glance down at my feet to see trailing shoelaces. Not often, just regularly enough to make me wonder why - this far out of primary school - my shoes unexpectedly come untied. At all other times I would classify double knotting shoelaces in the same life skill bracket as using cutlery, wiping my arse and pouring milk on my Weet Bix before I start eating it. So what's causing these intermittent shoelace failures?
In the last few weeks that I've been supporting Lotus Connections on Websphere Application Server and I've had to debug a couple of very annoying, minor bugs by analysing trace logs. First I enabled tracing for all the involved components, then I replicated the issue. Afterwards I was able to review the output and logic of every step of the flawed process. The trace showed that one object was setting a property with the wrong value. I documented the root cause and informed IBM, feeling quite proud of myself.
This experience made me think: Why not enable trace logging in my brain to see if I could solve this shoelace problem?
So, I logged into my brain's admin console and turned tracing on at an object level. Then I went about my days. It took a while, but one Thursday evening as I speed-walked through the rain to my train home from work I looked down and there were my shoelaces behind me. I re-tied, made it to the platform in time and then once I was seated I loaded up the logs.
The problem, I found, was in the ordering logic of lace tying when ambient temperatures dropped below certain levels. There was a condition that when feet were cold and both feet were shoeless that the body would put the first shoe on and single knot it, then put on the second shoe, double knot it. Then, with both feet warm(er) in shoes it would return to the first shoe and finish off the first knot with a double tie. This was obviously some heating efficiency tweak. But, there was a bug and the final double-knot call was nested in the wrong If bracket and was being skipped! I submitted a bug report, but I haven't received a response back yet.
Also, when looking into the source code I found an interesting design choice. The code for removing a shoe at the end of the day inherits directly from the "make a sound" class! Not sure if that's a bug or a feature.