With over 20 years in the software and technology profession, I fear that I have begun developing some of the tendencies I used to mock when I was younger and still knew everything there was to know. You know, the “get off my lawn” kind of attitude about the ways I had become accustomed to doing things and feelings of repulsion to people trying to push me into the new and unfamiliar without acceptable reasons for me to do so. Alas, I have become my father.
While its fun to occasionally self-deprecate, the truth is that there actually are some attributes of enduring economic viability that would seem to apply across many markets, products and services. Even in the seemingly fast moving world of technology, there are some things that need to be a part of the offering that will sustain your business over the long haul. Often times, those things are just expected and assumed to be understood without explicit mention. When you become interested in quality, those unmentioned areas are usually very interesting to examine to help improve your understanding about what it is that makes the product or service more attractive.
When it comes to software quality, I have recently found myself interested in a wide multitude of attributes that contribute to the quality of a software product or software delivered service. With the rate of change seeming to ever accelerate I felt like what I needed to do was to establish a personal basis for assessing quality so that I could have a benchmark for decision making. This helps me choose who gets to stay on my lawn. 🙂
So, without further belaboring, here are a few f-words that I use to guide my assessment of software quality when choosing and when building a software product or service.
Does the software do what it is supposed to do? This is probably the most basic requirement. If software is advertised to perform a function, it must perform the function. There really is not much room for error here. In addition to performing the function, it must do so consistently and reliably. If I purchase a package for managing my checking and savings accounts, and the balances are not always accurate, then my purchase was a complete waste. Software that does what it is supposed to every time is useful and valuable. Basic reliable functionality is a must have.
Beyond being basically functional, a quality software offering must be functionally complete. An extreme example would be having a word processing program that could not print. Of course today, so many more documents stay digital for their lifecycle, but people still need the option to print. There are cases in the opposite extreme as well frequently called “function bloat”. Function bloat comes with its own host of problems however, a clever design can keep the most frequently use functions front and center while keeping the lesser used functions out of the way until necessary for the user to complete a task.
Does the software move with you? Can it work across devices? Will it work with different data formats? Can you add to it? Can you take away from it? These and other questions are important to understand if a software solution is being built or acquired with the intention of long term usage. As mentioned earlier, the pace of software change is rapid and accelerating. Since no one knows the future with any real precision, it is important that a software solution has extensibility points so that it can move with the user and their changing needs.
Since extreme examples are the most illustrative, let us imaging this: what if your computer monitor broke and in order to get a new one you had to upgrade the operating system? Sounds ridiculous in 2015 doesn’t it? Of course, I remember the days of DOS based gaming where the game only supported certain video cards, but let us not digress. Software driver architecture was created for this very kind of concern. Changing devices and peripherals is just a fact of modern computing. Software that has flexibility designed in should make change like this seamless for any user.
Data format flexibility is another area of frequent change. Imagine if you were a graphic artist and you had to use a different program for every file format? Crazy talk right? You bet.
A great deal of software these days has been influenced by the “app” model promulgated by smart phones and tablets. This model has narrowed the focus of user facing software to very specific targets for features and functions. The Software as a Service (Saas) model is also tracking this style of point solution offerings in some areas. While this model has its pros and cons, what I want to draw your attention to is the idea of foundational software.
While not all software needs to be foundational, some software must be. While change is exciting, it comes with costs. The cost of the change should always be accounted for and projected against the returns that are expected as a result of the change.
Infrastructure software like operating systems, databases and middleware I consider foundational software. This software is enabling of other capabilities. If designed and implemented well, software at this level should experience a much lower rate of change than say that of a marketing oriented mobile application.
Another example is data formats and network protocols. For all our love of the internet and the novelty it brings, its basis is on a network protocol invented in the early 1970s. That protocol, while it has its critics, is an example of an enduring foundational design.
Last, but certainly not least, quality software is fast. When I click, I expect results, now! Software that makes me wait longer than I think I should usually results in the production of other f-words. Fast software is not all about click response speed however. Good user interface design makes it easy to do the things the user wants. Things like: where menus are located, how they are activated, what functions are available under what conditions, etc.. All these things and more are an important part of the “fast” aspect of software quality.
A recent upgrade of an accounting package I use caused me major disappointment in the area of speed. This package that I have used for almost 20 years decided that its checkbook like interface was old fashioned and that it needed to be “cool” now. So, it made its interface look like iTunes. Sure, it’s all snazzy and cool but guess what? iTunes was not made for data entry. In fact, I cannot think of when I use the keyboard with iTunes except to enter my password when I buy things. My fast experience that I had developed over years of muscle memory for quick data entry has now become a drudgery of mousing, clicking, typing and watching useless animated effects. Entertainment and cool graphical effects have their place for sure, but they are not necessary everywhere.
To me, quality is about keeping promises. Quality software is about delivering a solution to a customer’s problem that is functional, flexible, foundational and fast. If marketing makes promises about a product or service, and that quality promise is kept, chances are that customer will also be kept. This is not only good business, its the right way to treat your customer. Make a good promise and keep it with the right level of quality the customer expects. The alternative is to read about other f-words not mentioned in this particular article. Perhaps next time.