Ten Principles of Good Design Redux | Part 3
I usually get rather testy when software developers insist that Software Development and Architecture are more Art than Science. The testiness is usually exacerbated by the poor quality of the code that is generally written by these very same software developers. If you need to do a depth-first traversal of a binary tree it is extremely unlikely that you will need to invent a new algorithm for doing so. Somewhere in the Noosphere you will undoubtedly find an exhaustive academic study on optimal algorithms for tree-traversal. I have lost track of the times that I have had to scold developers for attempting to implement their own crypto or thread-synchronization primitives.
Is traditional Meatspace Architecture an Art or a Science? It is unarguably a creative discipline, but it is fundamentally underpinned by the material sciences and psychology*. Buildings that do not respect the laws of physics don’t stand very long, regardless of how beautiful they are. Meatspace Architecture is a creative process that is governed by a set of predominantly invariant constraints. It is true that new materials are constantly being invented, which alter those constraints, but I don’t imagine gravity is going away any time soon (until we start living in space anyway). I believe that Software Architecture (in the small and large) is no different from its Meatspace namesake.
So now that I have pooh-poohed Software Development and Architecture as Art I am going to do some legerdemain, some prestidigitation, and apparently contradict myself. Great Software Architecture is Art! A great software design, either in the small or large, can, and must in my opinion, be a thing of beauty. As a Software Architect you must be able to show a design to a colleague and have them say “Wow, that is awesome!”; “awesome” being equivalent to “beautiful” in High-Geek.
Is it not true that budding artists of all types spend years and years learning, and in some rare cases developing, formal techniques? Only when they have truly mastered these techniques do they go on to create truly magnificent works of art, channelling their raw creativity and talent through a set of deeply inculcated techniques. Yes, yes, I know there are some great works of art painted by cats, but they are the exceptions rather than the rule.
And there is great hidden value in creating aesthetically pleasing software designs. The human brain is genetically tuned to recognise certain levels of complexity and other naturally occurring patterns as either aesthetically pleasing or not depending on their utility. By ensuring that your designs are aesthetically pleasing you are tapping into a pattern recognition system 2.5 million years in the making. An aesthetically pleasing software design is going to be more understandable, more enjoyable to implement and maintain, and most definitely easier to sell to a client or your management.
Quod erat demonstrandum (I hope anyway).
* Historically psychology has been considered a pseudo-science but I think folks like Steven Pinker and his ilk are dragging it kicking and screaming into the realm of “pure” Science.
i think one of the pieces of sadness and also one of the things holding back a true drive for beauty in architecture is the level of skill that you have to have to actually see it.
ReplyDeletecertainly not even every person running around calling themselves an architect is actually a great or even good architect. a user or even someone else involved but not in the know like a PM or QA will only have the barest glimmers of hints of the beauty of the underlying architecture. it might become more obvious over time as it tries to scale, deals with overload or when you try to add features to the system but even that takes a pretty talented other to really see.
you might know a dozen architects that might see your architecture and only one may see it's beauty. at least with art everyone has an opinion and it's great if someone with an eye loves it even more. with software your avg user is in love cause the UI has good pictures.
Spad,
ReplyDeleteI agree that there are aesthetic nuances that only emerge if you have domain knowledge, but I think there are attributes of a design that can be appreciated by someone who has never seen a software design or code in their lives. I have a 900-line F# file that I think would love to get printed as a massive glossy poster and stuck up in a gallery!
There is a third ingredient in the recipe: science, art, and craft.
ReplyDelete