Skip to Content

No doubt, there is much content available for active management and design of architecture. In deed there is so much, that one can wonder, why there are so many systems out having a bad architecture. I am sure, that is true for non-software related systems as well – at least partially. Howvever as I am definitely not an expert in other businesses I stay focused on architecture of software systems.

I would like to refer to IEEE 1471 definition of Architecture: “The fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.”

This definition seems to be wisely written – it contains the structured approach byusing words like “organization” and “design” as well as the emergent character by “embody” and “evolution”. This emphasizes – my interpretation – that you actively can drive and design an architecture but get “architecture” as a characterisitic under the hood as well.

I think there is not much need to delve into the wellunderstood topics of focused architecture design and management as many books, articles and guidelines are available, which are worth reading. I know that agile architecture management is a bit less discussed but still one gets some hits on an interent search. My starting position is different two both in thinking about architecture not actively addressed at all. There is not much thinking necessary – just by writing software one creates something that has architectural flavour. Even if one just has a very simple program consisting of one class (main) one has embodied design – in this case the fact, that it is monolithic. The second class requires thinking in organization and structure and contains many design decisions on top. The more the decision one takes the more architecture a system has. Probably not an architecture providing desired characteristics like loose coupling or maintainablility but some kind of intrinsic architecture.

Looking for a methapor I stumpled over ants and anthills – while reading in a book about emergent systems. An Anthill has an organization – thus I would say an architecture – that serves the ants quite well (as I assume again). However there is no obvious central builder or architect dictating next moves and building blocks. Any ant working on the ant hill has a build in blue print, structure or even only some basic instructions how to build the ant hill. Every work and contribution is so to say equal to others. Organization emerges via recognizing local needs, structures and the closer environment. If there is e.g. a tunnel in the hill it is likely to persist over some time and the hill is growing because the location where it was build is accepted (even if this is only true in average).

A stupid thought experiment – far from being realizable – how can we encourage ants to build a better hill (if this is possible at all) – e.g. requiring less ground, material and providing more internal space (very human perception). Building a central plan does not work – because there is no real hierarchy in an ant colony. The only chance is to empower each single ant with a “better” blueprint. Each worker has to understand the improved design and act according to it.

Maybe you figured out where I am heading to – how can we transport that inside onto large software development projects? Simply stated – everybody working on the big project has to act according the blue print. Obviously this comparision is poor with respect to many aspects but opend up my mind for one point, that I personally underestimated for quite a while. It is the fact, that one needs to address the insight of software project participants much more. Assuming that over better insight the actions are more according the global plan. The only way I know to address this is communication – if I excludes pychological manipulation and related stuff.

Luckily software projects can have an active and separate design process, which can be managed e.g. via governance of projects and by reviewing designs and the like. And for today my only take away is that we should not forget to address the intrinsic aspect of design and governance is very important but not sufficient.

To report this post you need to login first.

7 Comments

You must be Logged on to comment or reply to a post.

  1. Thorsten Franz
    Hi Oliver,

    That’s a very interesting idea. To show you my admiration for it, please allow me to nitpick on it endlessly. 😉

    Actually, I want to work one aspect: Each individual ant has no blueprint (not even a local blueprint of a small region in the anthill), but is programmed with and executes a set of rather simple rules and the beauty is in the emergence of the complex and well-adapted anthill structure out of simple instructions embedded in the individual agent (ant).

    Biologist Richard Dawkins explains the difference nicely in a chapter about embryology in one of his books (I forget which one it was):
    The building instructions encoded in DNA are often compared to a blueprint, but actually they are much more like a cooking recipe, which consists of instructions. (The single instructions in a cooking recipe such as “stir” or “bring to the boil” need not correspond to any element of the completed dish.)

    Same with the ants – they have no local blueprint, but rules which are applied in a local context, and the result is a structure which appears to have been designed on a global level.

    If we want to achieve the same in software architecture, we need to figure out
    – either by which local rules they operate, and modify the local context so that a desired outcome on a global level emerges (this is what economists try to do with incentives)
    – or how to set the local rules so that in the given local context, the agents will behave so that a certain outcome on the global level emerges (this is the legislative, programming conventions approach).

    Or we can be optimists and say that a sensible structure will emerge even without rule or context tweaking. But let’s not forget that it took evolution many ant generations to modify the locally applied rules so that great global structures were able to emerge seemingly by themselves.

    Cheers,

    Thorsten

    (0) 
    1. Oliver Kling Post author
      Hi Thorsten,

      partially I mixed up with the previous block so please see my comments upwards as well.

      Yes I think that you hit the points – local context is a very important key word as defining the local contexts (plural) a bigger thing made of is already architectural work.
      Regarding the optimism – I am not really sure here. I once read the statement “Things left to them self, go from bad to worse”, which is basically true for architecture. If no one takes care for the big picture – the outcome is one that probably is not according the needs.

      Yours, truly

      Oliver

      (0) 
  2. Lucas Osse
    Hi Oliver,

    Interesting thought experiment that could help to understand better what’s really the crux of architecture.

    First build I have, is that I think that every ‘system’ has an architecture. It could be a somewhat clumsy one, but every system (anthills, trees, elephants, ships, IT landscapes) has an architecture.

    Our DNA ‘knows’ how to build us, but how do we know how to build an IT landscape? Answer: we have to be told. E.g. in building houses we know a ‘building code’, which is sort of a standard set of rules for building houses. This set could even become more or less implicit as people get used to it, and use it a lot. It becomes ‘part of their DNA’ ;-).

    So if I understand you well Oliver, your point is, how can we communicate architecture or design guidelines (such as a ‘building code’) to development teams and tune that communication (such that it is received)?

    I’d say that is a multifold approach:
    -experienced software developers explaining why the building code leads to better results looking at it from broader perspective
    -stimulus from management, to build according the building code, and explaining why
    -showing successes
    -educating people
    -doing checks to sse if the software is built according the building code
    -etc. etc.

    I think we are talking about changes in behavior of people here.

    So indeed there is a dfference in actually making an architecture, and making sure that people behave according the architecture. And to get back to the ants, if the architecture is simpler, then making architecture work will be simpler.

    Regards,

    Lucas.

    (0) 
    1. Oliver Kling Post author
      Lucas,

      thanks for pointing me to R. Dawkins – you are basically right here. Looking at this from the rules perspective makes not less interesting because you turn the question into “What are the rules everyone needs to follow” – and having in mind that according the example following is based on “free will” (obviously another interesting topic).

      Simplicity gives another turnponit – in asking a second question: “How to change the local environment into a focused subset of the complex overall picture or how to compartmentalize a big challenge into manageable smaller ones, that one can follow a few simple rules”?
      Obviously this leads back to upfront design (layers, components …) and then immediately into iterative and agile methods.

      Yours truly

      Oliver

      (0) 
      1. Oliver Kling Post author
        Obviously I made the comment to the wrong reply. Sorry for this.
        I am replying on a separate thing hopefulle correctly this time.

        Soryy

        Oliver

        (0) 
    2. Oliver Kling Post author
      Lucas,

      yes – this is about communication. But I am not sure if it is only communication – but empowerment as well. As projects or individuals have obviously power to implement architecture better or not so good to really worse it is important to encourage good local decisions. Here I would like to point to mission type tactics – where setting the target is the influence on has to a project. Maybe I am following up on this.

      Thanks

      Oliver

      (0) 
  3. Paul Centen
    Yes Oliver, the message of the ants’ hill is nice. To function in a system you have to know about the system as a whole and what part an individual or a sub-system plays therein.

    Question: can one reverse this description? Mathematically one would call this extrapolation.
    Answer: Sometimes, but not often.

    Reasons:
    Stay in biology and look to the bee colony with drones, worker bees and a queen.  Depending on the wealth for that colony, a cell in the comb might be constructed to enable a “queen development”. Once this insect is adult (means being a queen), it takes part of the colony to found a new colony. The honey production is used to prepare the flight. That means: simple  extrapolation didn’t worked out. To prevent this negative “growth” feature (from the perspective of the bee as a species) the beekeeper has to destroy such cells in the comb.

    Next to the fox and the rabbit: once the population get that large and (especially) dense the probability for infects (myxoma virus or rabies) rises.

    System constraints:
    These examples from biology indicate the symptom of constraints, changing the equilibrium. Typical for human beings is the prolongation of success by copying and extension, built on replication. The requirements for the fundaments of a building depend on the size and the “numbers of balconies”.
    The system dynamics might be built in by DNA or have to be learnt by education. That depends but also differentiates.

    Kind regards Paul

    (0) 

Leave a Reply