Thursday, October 27, 2011

Software Luxury

Many things in this world can be considered luxurious — cars, homes, hotels, and yes, software too.  Attributes that establish an object as luxury include things like the material, the cost, and the brand.  It's difficult, sometimes, to state why exactly something is luxurious — at least in terms of visible properties.  We say things like, "it's a Rolex" or "it's a Mercedes" — the brand in it's own is luxurious.

Products that don't have the recognizable brand name to back them might be of outstanding craftsmanship and quality.  Yet, these things aren't considered luxurious items.  Perhaps they're used in industry to perform a specific task — instead of tooling around on a winding round or displayed as a decorative ornament.  Aside from the brand name, how can we identify luxurious things?  This is particularly interesting when it comes to software because we think of software as a tool more than a sumptuous want.

Tools and toys
To secure more insight into what makes something a luxury and what makes something a necessity, it's helpful to classify things more broadly.  A toy, be it a boat, a ski-doo, or a train set, isn't a requirement for day-to-day living.  They're a form of entertainment — something to keep us occupied when we're not busy other duties.  Yet, not all toys are luxurious.  When you're busy playing with rudimentary item, the desire to progress upward is unavoidable.

Tools are necessary for any trade.  They're how we're able to succeed at any task.  Tools get the job done, so even if we're not doing something enjoyable, tools make the job a little more bearable.  Tools are the screwdrivers, the text editors, the trucks — the things we need when we're not busy entertaining ourselves.  Once again, there is always room for improvement, a way to execute the task more efficiently or more comfortably.  If only there were a more luxurious shovel.

These broad categories — tools and toys — occupy the vast majority of our wakeful existence.  And they don't exist irrespective of one another either — they both share the same drive to improve, to become even more joyful, or perhaps less painful.  And that's just how the tools and toys of our lives evolve — through the constant pressure to become more integrated with what we're accustomed to.  Or, perhaps we're not accustomed to something luxurious, but that doesn't stop us from observing what luxurious items do, the joy they bring, and try to mimic that in the next generation of lower-end products.

Software necessity
Software necessity is hard to define — at least in a broad sense.  If you're performing an accounting task, you're probably going to need a spreadsheet.  If your doing development, you're going to need an editor.  These things are absolutely necessary, but they don't address the more granular idiosyncrasies associated with them.  For example, most spreadsheet applications have the required functionality built-in — the formulas, the importing capabilities, and so forth.  But what about defining your own formulas — what if your organization has a standardized set of formulas to plug into the data?  This is a specific requirement the application must support.  A necessity.

Software tends to carry a more stringent definition for everyday work necessities.  It clearly isn't enough to say I need a text editor to do development work.  You're probably used to features of a specific editor or IDE.  So this doesn't mean you can't do your work, it just means you can't do it effectively without contrived workarounds.

The necessity of software goes beyond simple features — checklists that determine the usefulness, the productivity one can expect from a given software package.  There is the matter of where software runs, what protocols can it support — things of that nature.  If an organization is determined to stick with legacy software that isn't web-friendly, they risk being left behind.  Staying current with the times is a necessity not just because it's allows new innovations, but because the competition will no doubt be on top of it.

There are two dimensions of software necessity — the bare minimum fundamental stuff that is requirement to do the job.  Then there is the the more specific aspects that allow you to do the job better.  These latter additions to your systems, small incremental changes and adaptations that transform a monotonous job involving a dozen steps and hide that complexity behind an intuitive interface — these are luxurious relative to the first iteration of the product.

Developing luxury
All software, if it is to survive, must be continuously developed, continuously improved and fleshed-out.  Are we developing luxurious software by making these improvements?  Or are we simply raising the bar of necessity?  Because, as time goes by, what was once thought of as a luxury, turns into a diminutive, core part.

If luxury is a definitive property of something whereby it goes above and beyond what the thing was designed to do, maybe luxury has no place in software development.  Remember, software is about simplicity — without simple solutions, we're stuck in an even repeating loop of frustrating experiences where we're trying to do something that goes beyond project scope.  Superfluous features, and conversely code, should be pruned.

But who's to say that creating luxurious software can't be reduced to simple improvements that aren't intrusive to the user or the developer?  We might even go so far as to say that luxury in software is created by removing things — by taking complexity and replacing it with simplicity.  Maybe instead of focusing on feature checklists, software projects should think about how the user will perceive it in terms of necessity.  A reductionist approach, removing superfluous constructs from the system, yielding something small in size and high in value.  The must luxurious software is that the fulfills the necessities, unlike other items in the world where luxury is the nice-to-haves.