During a very interesting meeting with Nicole Tedesco this last week I was enamored by the following statement:

Aesthetics move whole societies

I found this statement incredibly profound. We were discussing a recent article, “Envisioning a New Language: A Conversation With Sun Microsystems' Victoria Livschitz” regarding the concepts used in the Metaphors conceptual language. As development teams and organizations, we strive for better designs which improve overall software quality and eventually organizational value. In order to satisfy a good design we must meet both functional and aesthetic results.

The International Society for Mathematical and Computational Aesthetics (ISMCA) describes aesthetics in software design as an important tool for structuring systems. In software design we use conceptual metaphor, the description of one conceptual domain using another conceptual domain, as a way to communicate the interactions within a system. Conceptual models, such as those created in UML diagrams, allow developers to understand a larger domain in which they implement a component or sub-system. As a developer becomes more experienced and talented in their craft, the value of such models becomes increasingly important. Developing their components or sub-systems within the context of a larger system domain allows them to make better decisions in aesthetic design.

While I was at the No Fluff Just Stuff software symposium in Redmond, Washington, Dave Thomas delivered a presentation on the topic “Herding Racehorses and Racing Sheep” in which he discussed a software developer's progression towards mastery. If you haven't been to one of Dave's presentations you should based on his presentation skills alone. A major point in the presentation was a description of the Dreyfus Model which contains the following stages:

  1. Novice – Works without concern for an encompassing context and reacts based on rules
  2. Advanced Beginner – Uses more sophisticated rules and starts to put them into context
  3. Competent – Recognizes more contextual elements but still does not formulate understanding of encompassing task. Starts to seek more advanced mentoring and education but is easily overwhelmed by larger concepts
  4. Proficient – Mostly performs tasks intuitively and learns from the experience of others
  5. Expert – Performs almost all tasks intuitively and work on these intuitive skills rather than goal based planning

While building our skills through the first three stages, we have a difficult time understanding conceptual models of systems. We continually encounter metaphors which either surpass our comprehension of the domain or we interpret it incorrectly within the domain. Upon understanding the domain metaphors, we pack this information into our bank of conceptual analysis of the domain. Over time, this bank gets large enough that we are able to rationalize metaphors which seem similar to a currently understood metaphor. At this point we progress into the fourth and eventually the fifth stages of the Dreyfus Model.

All of the above information brings me to a few recent trends in the software development realm: XML, SOA, web services, AJAX, Ruby on Rails, and Python. Many of these concepts and languages have been around for quite some time. Arguably, all have risen in status over the past five years. I would also argue that all of these are either overly utilized or recommended inside IT organizations. There has been an incredible increase in XML, SOA, and web services marketing literature this year with the hype of ESB (enterprise service bus). AJAX, Ruby on Rails, and Python have all been professed as Java and .NET killers based on their “simple” usage.

Now, I do not wish to be known for bashing these concepts and languages themselves, but I do believe the marketing and hype behind them are misleading. Most applications do not need to use XML, SOA, or web services. AJAX, Ruby on Rails, and Python are not going to solve all of our IT organizational issues such as operational and maintenance costs. They are, however, another set of tools which, when used in their context, can improve software development business value. XML, SOA, and web services may allow large organizations integrate disparate systems or small organizations deliver services to customers. AJAX will enhance the web experience in both functional and aesthetic appeal, but will probably not be necessary for all web sites. Ruby on Rails and Python will allow for quick prototyping of systems and may find particular niches in IT utility applications. It is probably not your first choice for EAI, ESB, or SOA based systems.

As software developers and technologists, we must look more deeply into the current marketing and vendor hype. Most, if not all, software vendors are driven by their competition within specific domains. If vendor A has a package which is a solution for domain Y and vendor B comes up with another solution for domain Y which also addresses domain Z, it is almost intuitive that vendor A will add solution for domain Z to their product. This is not necessarily based on customer need or software design aesthetics, it is usually for marketing buzz. We must be able to look past this, even when it comes from our industry‘s luminaries, and make decisions from our own domain context and conceptual models. We all work within a larger domain whether it be the an IT or development organization, a corporate enterprise, government agency, consultancy, or open source community. The goal should be to deliver the most functionally and aesthetically pleasing software possible by those involved. Not to use the next hot technology buzzword on the market.