I’ve been doing some thinking about the notion of utility lately. Upon some recent reflection of my experience and biases related to cetain technologies, I’ve realized that the lense through which I look is much different than in years past. Some of my most recent efforts at work have been in Java and it is really amazing how many memories the experience has been bringing to the surface. For better or worse, Java is my lingua franca and I’ve written a lot of it professionally. Since then I’ve been exposed to a range of tools that have evolved my perspective far beyond my earlist predelictions for that language and its ways. But since I’ve been using it again I am struck by the idea that perhaps I’ve left what I learned behind without reflecting on why I was so eager to abandon what I knew best.
What is the most useful technology you use? To be more consise, which of these holds the most utility? When I think about this question my immediate answer would to point to Clojure, my favorite language. I am now working professionally with it and I hold it in the highest esteem. But do I believe Clojure to be that much more useful, that it has a much higher utility, than Java? When I go and inspect their respective online descriptions I notice that they both describe themselves as ‘general purpose’ languages. So when I say that I prefer Clojure is it that I believe that Clojure offers that much more generalness of purpose?
When I try to think of examples of why this might be true I find myself only coming up with assertions about not the properties of their utility but about the results of their utility. Both myself and others who are far more advanced than I can make powerful arguments about the results of using Clojure over Java. For example, one argument that I might try to make is that using Clojure will likely result in far safer software. Some other engineer might make a claim that it offers greater maintainiability or is easier to refactor. Some might even claim that it is just better in every way. My instinct is to say that. But what I can not do is claim that it, in its purest essence, offers far more utility than Java or any other language for that matter. But what does one even mean by ‘Utility’? What kind are we talking about? I’ve done some serious thinking about this question and why it matters in software.
But what I didn’t expect was that true clarity would be provided to me by someone who wasn’t a Software Engineer.
A few weeks ago I had decided I didn’t like any of my pairs of pants. Upon this realization I thought of the most immediate remedy, which was to drop everything I was doing on a Tuesday night and speed over to the nearest shop where I could find some that I liked. I casaully strolled into the store and after oblviviously stumbling around the shoe section I finally find the mens department and begin my search. I struggled to maintain focus as an older gentleman seemed to be intent on drowning out the sultry elevator music that assaulted us all from somewhere inside the blinding arrays of flourescent lights by shouting into his enormeous cell phone. Who knew they made them that size nowadays anyway? But I quickly realized I was just handed an opportunity I had never had before.
“Why the heck are they forcing this on us?!”, the man shouted. “I’ve been doing 3 million in loan volume over the past week and all they can do is talk about how we can do more with this new horrible piece of software!”, he blustered. I dodged an elderly woman who seemed to be lost in the men’s section but I assumed that this was because she was wearing sunglasses indoors. Perhaps they were to drown out the brutal flourescent lights.
“The software is horrible! I can’t see what the calculations are doing!”, the man continued. He was furiously sifting through the collared shirts at this point. He seemed to have horrible taste as he only seemed to be picking out floral Hawaiian shirts in gaudy colors.
“I was doing perfectly fine doing everything in Excel!”, he continued. “It seems to me that they just want to automate my skill set away and I guarantee that I can do better without this awful software. It’s unbelievable!”
I felt like I had had an insight that was mostly unavailable to me in the everday as a Software Engineer. I had just listened first hand to what a user felt about being forced away from doing it the way they thought was best. Worse still, it seemed that he believed that some level of Utility he needed in his job was being taken away. I did some reflection as I perused the denim section and realized that I had been complicit in this for some of my career. Most ironincally, the instance I thought of most was a similar case of trying to eliminate the use of Excel in a critical business process.
Sometimes it seems to me that we as engineers focus on the notion of Utility in a vaccum. Reliability, maintainability, speed of development, and the subject of any other claim about the Utility of a language or technology does not always translate to adding value to the end user. Some may argue that the business we work for is our customer. But is this really we want out true purpose to be? Who should we serve? Do we to live in a world where we make out employers happy by choosing the tools with what we deem to be the most Utility but end up writing useless software that does nothing for the end user? Or even makes their life worse like the man whose plight I overheard?
What is the way forward? If so many languages offer similar levels of utility then what would it take for one to push ahead of the pack? Is it possible to create a language that is just that more useful than those we have now? If I were to start a discussion about this I would point to a key property of languages that we don’t seem to talk about much because we take it for granted: generalness. It seems that every language is general in purpose nowadays. We have worked tirelessly to achieve this in the past two decades. It may be that I just haven’t had the right experience yet but I have yet to run into many engineers or organizations who jump at the chance to use technologies that are limited on purpose. Is the way forward to continue to iterate on what we have now? Is it the right thing to do to pursue developing more general purpose languages and technologies? Have we reached ‘peak generalness’ and does this then mean that we have reached ‘peak utility’ in text-based languages?
Perhaps these questions are too deep to ask after a sleepless night.
But I have learned someting about Utility by pursuing these questions.
I didn’t buy any pants that day. I left having found the greater prize of a revelation.
I felt like so far I had wasted so much time focusing on finding and using the technologies with the most Utility that I had lost the true path of the Utilitarian in Software Engineering.
According to the philosophy of Utilitarianism, the morally right thing to do is to choose the action that produces the most good.
I think the most good I can do is to focus on the Utility I offer to Users and not myself as an Engineer.