Antique inspirations for software architects

The Roman architect Vitruvius around the year 15 BC completed his impressive, ten-volume treatise on architecture—De Architectura. It covers every possible type of man-made structure ever needed by the people of his time, but starts out wisely by prescribing basic qualities that good architecture must embody:

All… must be built with due reference to durability, [utility], and beauty. Durability will be assured when foundations are carried down to the solid ground and materials wisely and liberally selected; [utility], when the arrangement of the apartments is faultless and presents no hindrance to use, and when each class of building is assigned to its suitable and appropriate exposure; and beauty, when the appearance of the work is pleasing and in good taste, and when its members are in due proportion according to correct principles of symmetry. [emphasis mine, and I prefer ‘utility’ over ‘convenience’ in the original quote]

Vitruvius, De Architectura, Wikiquote

Sounds familiar? It certainly did for me when I was brainstorming the set of values that our newly minted team of software architects was to adopt. Durability, Utility and Beauty described perfectly how I thought about good software architecture.

  • Durability means that software must stand the test of time. Work as long as necessary without crashing or requiring mid-way reboots. And it shouldn’t need to be rewritten from scratch every few years, but instead adapt well to changing needs. This principle guides the selection of languages, platforms, frameworks and tools.
  • Utility means the software must fulfill requirements that it was given and must do so well. If it’s a user-facing application, it must be easy to use and supportive, if it’s meant to handle high load, it needs to scale well. If it exposes an API for others to connect to, that has to be comprehensive and flexible. We need to build software always with its intended purpose in mind.
  • Beauty means the software must be pleasing to the eye. A clean, simple UI, laid-out and colored for readability. Inside, a logical layout of components, packages and modules. Good, clear but concise naming, plenty of whitespace, short functions, variables of unambiguous purpose. Computers will read anything. We need to code for people. This principle underlies front-end and coding style guides.

We unanimously decided to adopt these two-millennia-old qualities as our team’s values and to visualize them, I proposed an image that would become our logo: the Millau Viaduct—a spectacular bridge designed by sir Norman Foster, built near the city of Millau in southern France.

Millau Viaduct

Bridges ideally embody durability, some serving the public for centuries, like the Charles Bridge in Prague, opened in 1402. Getting people efficiently and safely across rivers, valleys and canyons is as clear an illustration of utility as we could hope for. And while beauty is in the eye of the beholder, to us Millau Viaduct truly is beautiful, with its slender structure suspended over the Tarn valley like a delicate web of strings.

We’re using these values to ask better questions. Is it durable? Will this fancy framework you have spotted at some conference be around in two years? Are you sure we need the user to click three times to submit the order? Can we make it easier? Can you read your own code? Can your new team colleague read and understand it? Old lessons that continue to hold true in an age technically so much more sophisticated than when they were put in writing.

Photo of Millau Viaduct by Phillip Capper.

Trusting software

Where’s the Save button? Scrolling up and down the settings page, finding none. The trend is nowadays to just skip those and save all changes automatically. Just like we don’t need the Stop button ever since the iPod came out. We just need Pause.

The trouble with this approach is trust. Most users do, and always will, approach any computer system with a slight discomfort. On the surface, there’s this colorful array of boxes and buttons, maybe with a few cute icons. But underneath, there’s this made-in-hell machinery, that operates on the verge of magic. Nobody knows how it works “under the hood”, besides the creators maybe. Least the users.

When I modify settings and click an explicit Save button, I assume my changes were saved. But what if there is no such button? And no message that says anything about saving? I feel this inner discomfort knowing that perhaps something just malfunctioned, the app probably saved my changes, but maybe it didn’t.

Think of software design as a conversation. One where the parties cannot see each other – like with walkie-talkies. The receiving party responds with a confirmation – “roger”, “over”, “settings saved”, “account created”.

The more operations your app performs automatically for the user, the more important it is to confirm outcomes, both correct and erroneous. This is how you build trust.

No contact, no contract

First name, last name, e-mail, telephone, organization, position, marital status, weight, height, size of underpants? How much really do you need to know about your customers when they contact you? A lot, of course. The more you know the better you can understand and serve them. You need to be in constant contact with your customers to keep checking on their changing situation and collect feedback on your actions. But what will all this information be worth if your customer doesn’t contact you at all in the first place? No contact, no contract.

Oversized-contact-form

Looking at the form above a prospective customer will likely prefer to grab the phone and call in, rather than fill out all the fields correctly. That is unless she’s a bit phone-shy and won’t get in touch at all. Now if the form is smart with some validation on top of it, that requires filling out all fields, that’ll perfectly add to the frustration. There are always many other companies offering similar services, available just a click away.

Simple-contact-form

Now that is something different. Admittedly the guys from Analog don’t take any new work at the moment (I’m sure they’ve more great projects than they can handle), but they did manage to remove all possible barriers for future customers to contact them. Just click the text field and type, what you like, as much as you like. Then hit submit and we’ll get back to you. That’s implicitly telling to the customer: we’re here for you. We care. It pays.