This quarter and next quarter, I’ll be taking music theory classes at school. We’re using a program called Musition, distributed by an Australian company by the name Rising Software. Initially when I set it up, it was using a local database of course material with a local data store of audio files and all the other accompanying stuff. A couple days ago, though, my teacher sent out instructions for connecting the program to the network, and it’s now 100 times slower.
Previous load time was around five seconds. That was tolerable, especially considering what the program was loading. It also logged me in automatically to a local account. Now, however, it takes around ten minutes to load, most of it spent on “Loading Melody Data”. And it requires a username and password. Admittedly, the two together are only nine characters, but it’s still an inconvenience. Also, commands that took milliseconds in the locally-stored version take five or ten seconds to execute and return results. The load time and latency are the problems that really get me.
So, what does this teach us? It teaches us that carefully considered storage architectures are important for the usability of any program. Loading all the melody data across the Internet is a really bad idea, especially since only a fraction of the data will be used in any one session. Loading everything over a local network is only marginally better, because it still wastes a lot of time and bandwidth for no good reason.
A better way to do it would be to load the server’s data once and then cache it locally, requesting only a last-modified timestamp at each sign-on. That would drastically reduce load time and bandwidth use. I’m sure my school is paying for the bandwidth their server uses; they could definitely prevent drastic cost increases.
I’m not sure how to address the latency problem, because one of the foremost principles of application security is to never trust the user. All possible processing should be done server-side to prevent tampering by the client. Yet, this is most of what’s responsible for the delays. If anyone has any ideas, this is your opportunity to leave a shout out in the comments.
I sincerely hope that someone who can do something about this egregious usability problem reads this. It’s really an inconvenience to have to wait five, ten, or even fifteen minutes before being able to use the program, and to have five- or ten-second delays after issuing commands. Someone please do something about this architecture!
PS: If you’re interested in a fictionalized, in-universe interpretation of this problem, I wrote a companion post on another blog I write for, The Queiba Wars. I also wrote a generalized “Best Practices”-type post on this subject for CodingExperiments.com.