Current Architecture Trends: A Lot To Do With User Experience (UX)

 Several  debates on architecture overlap. At a first glance they could be treated as a whole, isolated from the rest, but when we go deep on them we discover that they are actually part of a major discussion

Endless struggles for high cohesion, low coupling, reasonable reusability or complexity reduction -just to mention some-, they actually want to conquer a same land: inexpensive development and later maintenance. A predictable, under budget, Software Development Life Cycle (SDLC)

However, those battles have given place to several strategies along the last decades: from the, nowadays old fashioned, Remote Procedure Call (RPC) to the updated Service-Orientation (SO) , mentioning CORBA and some other casualties along the way. From another perspective, the Model-View-Controller (MVC) architecture pattern and its derivatives (including the most evolved Model-View-Presenter, or MVP) are again another attempt to achieve similar things: low coupling, a possible reusability of a same model between different applications, etc. While MVC/MVP aren't an alternative to SO, the later actually complements the former in what respect to accessing the model. Although they looked as belonging to two different camps, what is evident is the fact that both techniques were intended to decrease the cost of developing software

The architectural landscape is plenty of examples like this one

User eXperience (UX) is probably another topic that, treated in isolation, seems to be self-contained but when you double-click on it there's (happily) a lot of other architectural concepts that are clearly related with. So let me tell first how this thought was initiated, and later I'll show you how almost all in Software Architecture, sooner or later, attempts to provide a better experience for users

A friend of mine, architect he, found me in a book store some months ago. I was checking a stack of books on UX, so he asked me if I was about to design UIs for some applications and needed to improve my skills. That wasn't false, I mean, my UI design skills are actually very poor, but the real reason I was checking on UX (let's observe I didn't say UI but UX) was because I was to spend the next months analyzing and writing architecture recommendations on UX. He seemed a bit disappointed about that, as he let me know: on his view, the architectural story on UX is very short, "just have some graphical designers doing the UI with usability concepts in mind, some developers coding the behavior... and it's done! The rest is solutions architecture as usual. How much more can you say about that? Maybe, updating the speech to the current line of products, you can mention Microsoft Expression for UI designers, Visual Studio 2008 for developers, XAML as lingua franca for both and that's all, folks! "

Before going ahead ask yourself, honestly, do you realize why my friend's point of view is a simplistic one? Do you, instead of that, share his view? If that is the case, I hope I can change your mind in what follows

The first misconception that leads to opinions like the previous one is considering that User eXperience (UX) is all about the User Interface (UI) . Actually the opposite is likely to be right in the sense that UI is a very important part (surely not the only one) of UX. Probably UI's importance among other disciplines affecting UX is due to the fact that any decision, any change in the interface is immediately perceived (even if we just display the interface, without actually using the application it belongs to) with all our human senses (mostly, our vision and tact)

If we interpose a cache in order to reduce some network latency originated on front-end / back-end round trips, the experience of using our application will be enhanced as we won't wait anymore for those most common (and thus, already cached) queries. However, that improvement didn't involve any change in the user interface

Next, I'll enlist a series of nowadays trends, debates and disciplines in Software Architecture, showing how the search for a better User eXperience is, in last instance, a motivator of those

 

Web 2.0Enterprise 2.0
  • Applications in this range are designed to take advantage of network effects. In other words, the more they are used, the better results they offer to their users (more accurate, more complete, etc)
  • The long tail coverage brings more productivity to users, as the information is segmented and classified to flow toward them in a proactive manner
  • Rich Internet Application (RIA) technologies like AJAX or Silverlight, from a UI perspective this time, help achieve higher levels of responsiveness
Service-Oriented Architecture (SOA)
  • As the different, formerly isolated, silos are being integrated, data gathering phases release the user of entering large amounts of info in those cases where such info can be taken from some federated services. This is not only less error prone but it also alleviates the user to have already entered information at hand
  • The orchestrated model suggested by SOA carries a better overall response time as certain composed processes (belonging to a variety of platforms) can now be performed in a streamlined manner (either synchronously or asynchronously). In the past, those operations stayed pending of the execution of nightly batch processes, postponing to user for any answer (either positive or negative) to the next business day
  • As the service orchestrator consolidates answers from one or more sources, any device able to get the orchestrator can expose such functionality to its users. Therefore, from the user's perspective, SOA applications are likely to be available in more than a single device (web, desktop, cell phones, ATM, POS, etc). Even considering that not necessarily all the functionality can be exposed on every device
Software as a Service (SaaS)Software + Services (S+S)
  • The dynamics of this software delivery model implies that just a small footprint needs to be installed on the desktop (in the SaaS case, eventually nothing is left there). That way, is very easy to release new versions of the services with 0 (zero) impact on their clients (which thus enjoy always a latest version)
  • Personalized features and data follow the user, wherever device she uses to access the services
  • From the user perspective, there's no need to worry on infrastructure administration (backups, availability, etc) as usually there is a SLA clause establishing the SaaS provider as responsible about that
Agile Development
  • The user doesn't have to wait so long to get software updates, mostly focused on her current primary needs (as a drawback, user dedication for feedback provision must be promptly)
  • As applications are built based on so-called User Stories, the resulting software tends to be user-centered (let's consider that user-centered design is one of the techniques to maximize the application UX)
  • Acceptance and stress tests help anticipate unexpected application behavior with an evident impact in the UX (low responsiveness, inaccurate answers, etc). Testing is a phase present on several development processes, not just the agile ones. However, Agile processes make an optimal management of these test cases
Identity and Access
  • Latest integration of biometric mechanisms helped the user avoid remembering complex passwords, being obliged to change it often
  • Federated applications relying on a common identifier authority release the user of those applications to remember possible different credentials, and reenter those as well, with no need to impersonate generic users (being obliged to track the original requestor for auditing purposes)
  • In case of application unavailability, remote login facilities help inspect the health of an application or its server without needing a physical presence (getting the downtime shorter)
Management and Operations
  • Monitoring indicators based on SLA health models fire alarms intended to react proactively before users notice that something is going wrong, reporting that to the call center
  • Smart deployment technologies like Java Web Start (JWS) or MS ClickOnce take care of application delivery/renewals with little or no user intervention (trend known as no-touch deployment)
  • .NET Shadow Copy, farms, load balancing, graceful degradation, failover and other techniques were created to maximize the ability of having highly available, yet scalable applications regardless the number of users
Performance Tuning
  • Caching techniques, as mentioned before, are applied in those places where we don't want to have a user awaiting for an answer, with the risk of switching to another way (i.e. competitor service) to carry her duties without sacrificing personal productivity
  • High-Performance Computing (HPC), while an expensive solution yet, is applied where an answer is required in humanly reasonable times
  • Asynchronous programming models and callback techniques emerged to bring responsiveness to our applications in terms of user expectations

 

The list could follow. Summarizing all as final words for Software Architects, there's a lot to do from our side to help our applications get a better (if not the best) User eXperience. As we could see in the list above (for sure incomplete) every architectural decision we take affects positively or negatively the experience that our applications offer to our users (customers, employees at our same organization, etc). Therefore, from our perspective (the one of Software Architects), studying UX-related issues is not just getting a state of the art on UI technologies and innovative devices, but actually understanding how they fit in the general picture (if they do). Complemented with the remaining current debates on Enterprise Architecture, we must extract conclusions on how the UX is affected by all those, in order to take better decisions for our next releases

Clearly a long road to traverse. With this first I inaugurate a series of blog posts on User eXperience (UX) ... for Architects, 'course!! smile_wink