Software Engineering through the lens of Simon

Thoughts on Evolving a Software Architecture

Hello reader, today I have some thoughts about software architecture and how to approach making changes to an organisation software architecture. The thoughts I have are a result of some of the pain I’ve gone through working on software throughout my career.


Documentation

What tends to happen with software documentation is that different teams will have differing levels of effort when it comes to documenting their areas of responsibility, resulting in documentation quality and consistency becoming poorer over time.

To ensure the quality and consistency of documentation I’m of the opinion that the documentation about an organisation’s software systems is the responsibility of the lead software architect. One of the responsibilities of a software architect is to ensure that the entire software stack is coherent and current and thus they are best placed to not only document the what but also document the why. Additionally, an architect regularly reviewing documentation will have ample opportunity to discover areas of improvement just from noticing parts of the documentation that seem weird.

If an organisation also has technical writers in their employ I would advocate that they report into the software architect. This way the architect can oversee the documentation written and ensure quality is consistent.

Flexible Software Architecture Decisions

If an architectural change is enforced with little prospect for the change to be altered or debated by those who are implementing the change, then this can lead to resentment towards the one requesting the change. Often times the ones requesting the change are not present to help when difficulties arise as a result of the change which can lead to comments being passed around like

If changes are not well received but the architectural change is actually necessary, then I think there are generally two reasons why:

So if you are in a position at the top of your organisation and you are considering making software architectural changes, I would highly recommend that you engage with the engineers working under you as they will have valuable day to day insights that will help you in your decision making. As a bonus, any changes you put in place will be better received by your colleagues.

Software Lifecycle Aware Architecture Decisions

One of the things I see commonly with some architectural changes like “move to cloud service providers” is that the change specified by the person making the decision is incomplete. As a result, other engineers are left trying to figure out what else is required to make the change possible.

I think this is best illustrated with an example. Let’s say that an architect has decided that in order to keep things consistent some services should be replaced with managed AWS products. The architect compiles a list of services that are to be transition to AWS and directs the engineering teams to make the changes. However the directive is missing the following:

What tends to happen is that the engineering team will try to fill in these missing parts but run into difficulties (such as access rights, difference in environment between local and AWS etc) and become frustrated that a lot of time is being wasted on the transition which could have been used to do bug fixes or feature changes. It’s also likely that the difficulties are solved in several different ways by different teams and that these solutions become tribal knowledge and not well documented.

Now if the architect above had also investigated and documented…

… then the engineering team would have a lot easier time switching to AWS. An architect doing this upfront investigation and documentation would also need to consult with the engineering team, which gives the engineering team an opportunity to provide feedback on the transition.

So I think any architectural decisions need to also consider what the change means in terms of the full software lifecycle from development to production. Otherwise the changes that occur can become disjointed as different teams try to address various difficulties in their own way.


So these are some of my thoughts about software architecture. In summary, good documentation, flexible decision making and considering the full software lifecycle will ensure that any software architectural change is well received by everyone in an organisation.