Last year, my son introduced me to a podcast called “Black Box Down”. Each episode is a discussion about an air disaster of some sort, and in the vast majority of cases, the eventual BOOM is preceded by a long sequence of small problems, dealt with poorly, or over-reacted-to until recovery is impossible.
Exceptions are like that.
I’ve been working on getting DataStax / Cassandra installed on a machine running on Hyper-V, and although it’s been a little while since I experienced the joy of Java stack traces, it’s coming back to me in a hurry. I Just worked through one that turned out to be rooted in my Java version. It turns out when the installation requirements indicated Java 8 or better, they left out, “but not too much better”. After a bit of googling, I found a link suggesting I might need to roll back my Java version, and that did, in fact, make things better. The process to diagnose has left a bit to be desired, though – starting with the epic stack trace..
What might have been better than this? How about an assertion on startup to flag the Java version as a problem? Once upon a time, this software was using a contemporary version of Java, and it would never have occurred to any reasonable developer to put an assertion like this in place, but at this point, it would be really helpful. Do I have any reasonable expectation that this sort of assertion would make it into the source code? Nope. I fully expect that anyone expert enough in this package to contribute to it is well aware of the Java version required, so there’s just no benefit to them to include an assertion like this. Next problem: packages built on packages built on packages, which make it pretty hard to pin down who should really be responsible for calling out the version dependency.
You may be thinking at this point that an IaC or container solution might be helpful, and I agree. In this particular case, one of the alternatives at my disposal was an Oracle Virtual Box image that was already set up. I opted out of that because I’ve already set up Hyper-V and Docker Desktop, and I’m concerned about having too many virtualization platforms sparring with one another. The “bare metal” setup wasn’t ideal right out of the gates, but the silver lining in this case is that I’m learning a ton.
My biggest takeaway from this experience is going to be to “embrace the suck” – paying attention to the frustration and impact on productivity so I can watch for problems like this in software I’m producing. As always, putting yourself in your users’ shoes will pay dividends, I believe.