29 October 2010

Architecture for small systems?

It is Friday afternoon and I'm allowed to have some wild ideas...

After a long e-mail conversation with one student of appropriate architectural styles to use in a project course I realised that his ending comment is spot on:
I think the course and it's literature are focused on large systems and seeing that we are new to this, especially with a new language in parallel, its difficult to not apply what we learn during the course.

In my opinion the patterns covered in the book left me half way with the idea that most architectures could fit into a pattern, within its own right.
I have been too blind when I teach, and not even my professional experience helped me to identify the problem:
Most (all) literature about architecture teaches solutions for big systems.
Is there a niche for information on how to architect small systems? Small in the sense of not having millions lines of code, or a large development team, or a long project. I know that the agile manifesto states that that one of twelve important principles are
The best architectures, requirements, and designs emerge from self-organizing teams.
But do a google search on "agile architecture emerge" and see what comes up, a lot of interesting reading that suggest that the issue is not that simple.

A lot of software systems are small, from a bittorrent client (the student project) to the software in the door control unit in a car, to a mobile app. And yet they would all benefit of having some though about what they must meet for non-functional needs that is addressed by a (simple) architecture. Should I write a book on architecting small systems? So that a team member is better prepared when he or she participates in a small project where the architecture "emerges"? You don't need to be an architect to benefit from doing thinking at an architectural "level".

1 comment:

Marcus Ljungblad said...

It is not such a wild idea at all! Maybe we could collect whatever resources we can find on architecture for "small" systems? In case there's nothing, then yeah, you should probably write a book ;) If I remember correctly 37signals have some ideas in their first book (available online).

It would be interesting to see how architecture descriptions (formal or the back of a napkin kind) differs between small and large. How is, for example, traceability addressed in smaller systems? Are all parts of a SA Description applicable and of similar importance in small systems as in large systems?

Btw, the issue of course literature only being applied to large scale systems is not limited to the SA course. Professors in general, and your colleagues, would do good with this realisation once in a while. Large is good, but most of us start out working on small(er) systems, or subsystems.