Yeah I know. You’re probably thinking “Here’s another blog post from someone telling us how important it is to instrument our code, so we can get better debugging, better performance, blah blah blah”.
If that is your sentiment, then I’m thrilled because it means the instrumentation message has got through to the extent that it is now considered just a statement of the obvious. As many will know, my predecessor was a huge advocate of extensive instrumentation in your application code. And there is no shortage of examples out there of other Oracle professionals who similarly wax lyrical on the incredible importance of well instrumented code. For the record, I’m in that camp as well, and we now even have contributions to the Oracle community for everyone to have a robust instrumentation framework in their code. So there is plenty of information out there, and it is pretty safe to say that there are no more excuses left for un-instrumented or poorly instrumented code.
So why the blog post ? Well…I’ve got a slightly different assertion to make when it comes to instrumentation, namely, instrumentation can help your user interface. You will be able to provide a better experience to the users of your application by having your code instrumented. Now you might be thinking that I’m just banging the same drum here, that is, by instrumenting I’ll be fixing bugs faster, or picking up performance issues more easily, or collecting metrics to help improve application quality. These are of course true benefits of instrumentation, but we all know that right ?
No…my motivation for this blog post stems from an activity on one of my laptop’s last week.
I went to upgrade it to Windows 10. I fired off the process and after a short while, the following window appeared
and the familiar “something is happening” feedback swirling dots…
I have several laptops at home, so there was no need to sit and watch this one, so I left it and worked on another tackling some AskTom questions. The laptop I upgrading just sits on the shelf, and occasionally plays Netflix for my children. Hence, naturally enough… I totally forgot about it!
That was Saturday. Now on Monday… 48 hours later, I’ve just been over to and waved the mouse to restore the display. And this is what is on the screen:
My oh my …. there must be a lot of things to get ready
The obvious question now is – has anything actually happened ? Has the program hung ? Or is it downloading a huge Windows 10 OS bundle ? As a consumer of this “application” (the upgrade process) I have no idea. There is nothing that tells me what state the application is in. Now let me give the Microsoft developers the benefit of the doubt here, and make the assumption that the upgrade is extensively instrumented, and that if I looked in a logging file somewhere on the laptop hard drive, there would be a capture of the current state which would tell me whether any true progress is being made. And that is typically how most us of implement instrumentation – a means to capture information for diagnosis.
But to do so is to miss an opportunity to directly assist the user. Even if the content of the instrumentation would appear to be gibberish to a typical Windows consumer, just the presence of that detail on the user interface becomes an improvement to the user experience. If my upgrade dialog box had looked something like this:
then even if I have no idea what “getting platform details” means, the fact that I was on Step 17 at 9:00:12 helps me as a consumer, because I have immediate feedback as to whether progress is being made or not. If I see that message at 9:05am, then I’m likely to let it sit a little longer to see if a “Step 18” ever eventuates. But if I’m seeing that message at 5pm, then I can be reasonably sure that all is not well.
And no, I don’t think a swirling icon is sufficient. We all used to criticize the “Progress Bars” on older versions of Windows and the like, when it would either exceed 100% or never get there, or jump back and forth. So I can understand the motivation for the swirly icons we see in all modern devices and operating systems, because they avoid the task of giving any true prediction of completion. And don’t get me wrong, I’m not saying that a return to progress bars is the solution, because that would be understating the difficultly of being able to know how long a task will take. But simply taking advantage of the instrumentation code that I know you already have , and presenting that in some way to the consumers of your application can be a better user experience for them.
Keep that in mind.
It’s really a nice and helpful piece of info. I am happy that you just shared this helpful information with us. Please stay us up to date like this. Thanks for sharing.
Huge (HUGE) fan of Tom, but I never saw any real examples from him to illustrate instrumentation.
Do you have anything simple to show how to do this in a sensible manner?
I have an instrumentation package I’ve used extensively at clients over the years – I’ll do a blog post on it. But also look at Logger