A primer for emerging software architects


Written by Anders Marzi Tornblad

Published on dev.to

This is part 1 of the Getting into software architecture series.

I have been working with software architecture in different forms since 2005, and I often find myself mentoring new and aspiring architects. One thing that keeps coming up is the importance of grasping the foundational principles of software architecture and applying these principles. This article is for those who are just starting their journey into this exciting field. We'll explore software architecture principles, why they're important, and how they apply in an Agile environment.

Understanding software architecture

The discipline of software architecture lies at the heart of developing complex software systems. It involves the high-level structuring of software systems through a set of design decisions, often documented as architectural patterns, that address critical system concerns such as scalability, resilience, and maintainability. Each architectural decision influences how components in a software system interact and behave as a whole.

When we talk about software architecture, there are several key aspects to consider:

Applying software architecture principles in Scrum

Now, let's bring our attention to the Agile environment. Scrum emphasizes the incremental and iterative development of software, which naturally poses a few challenges for us as architects. How can we incorporate a comprehensive architecture in an environment where the development is done in short sprints, features evolve over time, and change is not only expected but also welcomed?

Here's where evolutionary architecture shines. Coined by Rebecca Parsons, Neal Ford, and Patrick Kua, evolutionary architecture focuses on creating architectures that can evolve with changing requirements and technologies. It emphasizes principles like last responsible moment.

In a Scrum environment, we can use architectural spikes: short, time-boxed investigations, to help inform our decisions about the system's structure. We consider different solutions and choose the one that best fits the current needs of the system, while keeping future changes in mind.

Sources to deepen your understanding

To master software architecture, it's crucial to familiarize yourself with reputable sources that provide a comprehensive view of the discipline. Here are a few of my recommendations:

For Agile architecture, I highly recommend the Agile Architecture: Strategies for Scaling Agile Development article by Scott Ambler, and the Disciplined Agile Delivery book series by Scott Ambler and Mark Lines.

Wrapping up

As budding software architects, always remember that architecture is not a one-time decision. It's an ongoing commitment to ensure that the system's design can respond to change. In a Scrum environment, be prepared to revisit your architectural decisions at the end of each sprint, or even during. Embrace the mindset of 'inspect and adapt'.

And lastly, a good architect isn't just someone who answers questions, but one who knows what questions to ask. Keep asking, keep learning.

Articles in this series: