Find, and Celebrate, the Beauty in Software Architecture
Posted in Eric Bruno on August 16th, 2011 by Eric BrunoEric Bruno originally posted this on Smart Architect.
Software engineers, whether programmers, architects, or development team leads, often refer to software design or code as elegant. But can it be outright beautiful? I'm not talking about just its correctness, usefulness, or even its elegance, but instead its overall beauty, which in my opinion encompasses all of the other positive attributes of software architecture.
I fear that people may not look at past software projects with the same sense of the need for preservation that they do for the architecture of structures. If someone were to ask you to provide a list of past software projects that were beautifully architected (besides your own, of course), would you be able to come up with a single one, never mind a list? It would certainly be a difficult task. Part of the problem is that software architecture isn't apparent to the end users of the software itself.
I propose that you should not typically ask the architects or the end-users themselves, but instead ask the people who maintain, administer, and manage the software. This isn’t just a philosophical exercise, by the way – you’re asking about architectural beauty in order to highlight the achievements of your individual architects, expand on their unique ideas and innovations, and have their successful designs replicated within other systems for years to come.
Judgment Day
Examples of people who can judge architectural beauty, for enterprise software, are:
- The folks who handle the deployment of the various components that make up the software system;
- Your datacenter operations people;
- Those who work your help desk.
There may be other types of jobs that people do to maintain your enterprise software systems, specific to your enterprise or your software, but you get the idea.
So I ask you, do you talk with them on a regular basis? Do you ask their opinions of the software that comes their way, or whether there are any specific headaches related to it that they're willing to share? Also, does anyone track problem incidents from their perspective? I'm not talking about bugs and other software errors, but about operations-related issues such as failed attempts to add new users, or other concerns, such as ease of deployment of new software versions to production, resiliency of individual systems, and so on.
True Beauty Is Internal (and Enduring)
It's as important to ask your deployment, operations and other application management staff these questions as it is to ask home or building owners their opinions of the spaces they occupy, as a way to judge the related architecture. With software, the beauty of an architecture is reflected in its lasting nature, which goes beyond a single software system. Since individual systems are so short-lived (before they're updated or replaced with something else), the gauge of software architectural beauty is judged by how it propagates, and becomes replicated in other systems.
If it turns into a template by which future systems are built, it may be beautiful, especially if it's replicated by companies other than your own. But how can you be sure something's worth replicating? By tracking the issues I suggested above, plus a few others:
- Performance, scalability, flexibility, ROI: Those are a given, of course.
- Ease of deployment: Track both how easily and quickly new servers are brought online, and new software is deployed to existing systems.
- Help desk activity: If you don't hear about your users' complaints, it could be because you have a good help desk. Make sure you track all help desk activity to find faults and improvements.
- Provisioning and permissioning: Understand the difficulties involved in bringing new users online, or to give permission to existing users for additional system functionality.
- Data issues: An area too often ignored, data-related issues can account for a great many errors as well as wasted time and lost money. Track your data issues, and find systemic problems and patterns to avoid in the future.
- Application-specific probe-points: Much like hardware engineers build probe-points into their electronic designs, you can carefully analyze your system for areas that are specific to your software to track over time, while in production.
Some tools to use in your quest for beauty include those to help you track and manage issues regarding data availability, cloud-based deployments, individual software components, and other hardware and platform-related issues. Consider the following:
◦ CA Infrastructure Management
◦ oneSIS open-source enterprise management system
◦ Bugzilla, or Mantis open-source defect and enhancement tracking software
Incorporating the use of these systems, or others like them, into your architecture and processes ensures that the beauty in your applications' architecture will shine through.
Fame and Fortune
Everyone knows the names of famous building architects throughout history—Frank Lloyd Wright, Christopher Wren, Michelangelo. I accept that the world at large may never celebrate chief enterprise architects to the same degree. But at least within the organization it’s important to highlight the achievements not only of your enterprise architecture, but of the individual architects involved. As you discover patterns in your systems that have led to great success, you’ll want to publish them internally for others to replicate in their own systems, and for future architects within your organization to learn from. When you do that, don't forget to publicly commend the architects themselves, since achievement is often quite contagious.
The first company I worked for believed in this, and good design was highlighted and shared across teams. This proved very fruitful, as the result was a long history of successful software products with few, if any, canceled products or releases. The key, as in most things in life, was good communication through tools, processes, techniques, and quite frankly, culture.
As the enterprise architect in your organization, you have direct control over all of these attributes, and as a result, over the success of your software systems. What do you find beautiful in software architecture? Is it its reuse through your organization, its innovative qualities or other aspects, such as its flexibility? Share your thoughts with us.