The head of a company recently asked me about the quality of their software architecture. He didn’t have a technical background, and was concerned that his technology team was producing something that was appropriate, and wouldn’t lead them into dead ends. He didn’t have any reason to consider that the architecture wasn’t appropriate, but nor was he confident that it was.
I didn’t get to explore the architecture itself, and that wasn’t the point. Our purpose was just to help him move forward and have some more conversations with increased confidence. So I could only talk in general terms.
The first thing I said was that I’ve never worked with an organisation that had a really great architecture implemented perfectly. I have worked at places which have good architectures (as theoretical plans, or a design), but I’ve never seen those plans implemented perfectly. There are always real-world pressures which compromise the vision of the engineers, which means there are always gnarly little corners and situations that cause problems. But in the grand scheme of things that’s okay. After all, no organisation works in a vacuum, and the organistion has a purpose which typically focuses on customers and profitability rather than the creation of technology for its own sake.
When I have seen well-considered architectures implemented really well they are typically only one part of the organisation’s entire system. So my first piece of guidance was: don’t expect perfection.
But what should we look for in terms of our aspirations? What are the qualities of a good architecture (or design), regardless of how successfully we’ve implemented it? For me, there are two perspectives to consider.
One perspective is the outside view. How well does it enable operations from an external perspective. Is the reliability for users good? How well does it enable the appropriate level of security? Does it scale well, or are there pinch-points when things get busy? If it needs to enable integration, what is that experience like for your users?
The other perspective is the inside view. How well does it enable expansion as the organisation (and its functions) expand? How maintainable is it, either in terms of people’s skills or the tooling available today? Can we monitor it reliably? How well can we trace problems? How easy is it to extend? How brittle is it?
The specifics will always vary, but it seemed like a useful conversation. I don’t think the head of the company should know (many) technical details of the system his team is building, but decisions made in the technology area often have both social and operational consequences. So bringing the architecture discussion up a level should be valuable to everyone.