Software architecture is in crisis, and the way to fix it is a hefty dose of anarchy.
Some lay the blame for this on @boicy with the whole microservices thing.
(Admittedly, @nicolefv, @jezhumble and @realgenekim didn’t help when they statistically proved that he might have been onto something with all that de-coupling and team-alignment…)
However I don’t blame him at all.
I think he saved us; bringing us back to the path of value-delivery and independent services, but now with added independent teams.
But one thing is clear. Microservices need more architecture, not less (as do other forms of #Accelerate-style software organisation).
I mean, all those pesky slices we need to carve up our monoliths (or were they big balls of mud?) That’s a significant amount of work right there…
The truth is, the vast majority of attempts at - and ensuing aftermaths of - such slicing and continuous delivery have highlighted problems for almost all organisations, even the ones who were doing great architecture: How to scale their architects.
One of the biggest problems? Suddenly architects (and I include myself in this group) needed to be in far too many places at once, doing all that "architecture".
And so to cope, we architects either kept doing our job and became bottlenecks, or admitted defeat / got circumnavigated, or worse still went back to code and created “frameworks” which helped teams stick to the true path.
*Shudder*
None of these approaches have worked. And they never will.
And consequently many, many #microservices adoptions failed; with #microservices themselves getting an undeserved bad name in the process.
But microservices aren’t a curse on software delivery - and they ought to be a blessing.
What we need is a workable way to approach them, and in the process realise the associated benefits of both team autonomy and improvements in system architecture.
Straight away that means how we are used to doing architecture, via all-powerful architects taking all the decisions, is going to have to stop.
But decisions still need to get made - that’s what architecture is.
(As @Grady_Booch has said “architecture represents the set of significant design decisions that shape the form and the function of a system, where significant is measured by cost of change.”)
@martinfowler agrees “software architecture is those decisions which are both important and hard to change”.
Now, the decision-takers aren’t obliged to agree with the advice the folks in these two groups give them, but they MUST seek it out, and they MUST listen to it.
Using the #AdviceProcess for decision-making (or something else which meets the anarchistic principles - it wouldn’t be very anarchistic to mandate it) is the most fundamental element of an #AnarchisticArchitecture.
This decentralised decision-making is the core element of any #AnarchisticArchitecture because if it’s not adopted, you’re simply not anarchistic.
But if you use this core element alone, you are sadly unlikely to realise the benefits of the anarchistic approach.
Why? I’m going to bring in some further famous-architect assistance to help make this point.
There's one more definition of architecture - one which I particularly love - that the power of an #AnarchisticArchitecture approach are crystalised.
‘Dana Bredemeyer introduced the ideas of architecture needing to be “(technically) good, right (e.g. fit for context and purpose) and successful (in that it is delivering value in a sustainable way)”’
Let’s return briefly to where we began. Why have #microservices failed in so many places to date? - iI've argued that it's because the intended architecture, if there was one, didn’t get shipped to production.
To be successful, an architecture needs to be RUNNING.
‘The last [“Successful”], is speaking to the organisational dimension of the architect's role that is missing from "right system [right], built right [good]”’ she writes.
“It is very much about ensuring that conversations that are needed to be happening are happening - not always initiating them, nor always helping to focus or navigate them, but ensuring they do happen […] and guiding when needed” @RuthMalan concludes.
Our adoption of the advice process opened up the space for anyone to make decisions, but this alone does not guarantee success. We've simply removed the possibility of more traditional architectural approaches making us fail.
The remainder of the elements of an #AnarchisticArchitecture are focused on enabling @DanaBredemeyers “success”. They are aimed at supporting @RuthMalan’s admonition to “ensure that conversations that are needed to be happening are happening”.
There are four supporting elements:
* The first is a forum for conversations;
* The second is a thinking and recording tool;
* The third is a light to illuminate a unified direction;
* And the fourth allows for sensing the current landscape and technical climate.
The first supporting element in an #AnarchisticArchitecture is something to make the conversations supporting all this advice-seeking easier: an Architecture Advisory Forum. (#AAF).
Our current #AAF is a weekly, hour-long meeting were representatives from all the development teams gather and share their active Spikes and in-progress decisions.
Also attending are the typically “also affected” and “expert” group members.
That means we have QAs, UX, Product, leads from other teams elsewhere in the organisation, Chief Architects, ops, line managers, etc. etc.
The #AAF is a great forum for having loads of great discussions about all things architecture. It’s also great for flagging others who might not be in attendance, but who should be consulted.
The only rule is that the advice process rules - it's the reason its called the #AAF rather than the AR(review)F or AD(ecision)Forum.
Decision-making still lives with the people needing to make the decisions. It's still the #AdviceProcess.
I’ve learned a lot about tweaking various elements of an #AAF to make it well attended (in our current one we typically get 20+ attendees with at least half contributing) and focused. But that’s a topic for another thread.
It should be pointed out, #AAFs are not only useful, they’re fun too. Many people actively look forward to them, because it’s where they learn, get great feedback and input on their pending decisions and Spikes, and also show off what they’re doing. They're social.
We’ve found that a lightweight template structure helps folks learning to make architectural decisions. What is more, we’ve scaled our decision-making and reinforced the #AdviceProcess by encouraging the leaving of comments on #ADR pages.
This means everyone can see the thoughts of people who felt they ought to provide input as a permanent record.
More importantly, the #AdviceProcess can happen asynchronously, speeding everything up, and leaving the #AAF as a forum for the key discussions, and awareness-raising.
The third and fourth supporting elements of an #AnarchisticArchitecture are represented in two key fields on our #ADR template: “Applicable Principles” and “Relevant Radar Blips”. I’ll deal with them in turn.
Having Architectural Principles is not new. Neither is our approach which is 100% stolen from the excellent “Art of Scalability” by Abbot and Fisher theartofscalability.com.
While their book isn’t written from an #AnarchisticArchitecture perspective, the authors realise that for principles to be successful, teams which deliver against them need to feel ownership.
Check out chapter 12 of their book for everything you need to run an Architectural Principles Workshop (it’s in the section “Engendering Ownership of Principles”).
(And while the JADs and ARB’s in the following chapter don’t fit the #AnarchisticArchitecture approach we’re following here, they do contain some great thoughts on when to update the principles.)
One final point on the principles. They’re only principles, and while they come from the teams themselves, sometimes they simply don’t apply.
Rather than being a failure of an #AnarchisticArchitecture, it’s actually another strength - because being unable to meet a principle is a *great* time to go the #AAF and discuss things, and then detail all the reasons why you’re deviating in the resulting document.
That’s principles covered - which play the role of a guiding light for everyone to aspire to. But how do we also take note of our surrounding landscape and climate? Architectural decisions are also frequently based on what everyone else is doing, and who has which skills.
The best way to make your own radar is to kick it off with a session which captures what you have now in your organisation - a baseline sweep or scan if you will.
This too ought to be run as a workshop. I’ve done them where we keep the same quadrants, but we replace the “trial” ring for one called “retire”, allowing us to actively track the lifecycle of tools, techniques, platforms and languages/frameworks through the organisation.
So there we have our five elements of an #AnarchisticArchitecture; one core and four supporting: 1. Advice process 2. Architecture Advisory Forum 3. Lightweight ADRs 4. Team-sourced Principles 5. Your own Tech Radar
Of course it’s possible to go further. We’ve seen that teams working in this way will naturally start to pave their own roads - self-serving their own delivery platform before a Platform Team comes into existence. (See @TeamTopologies for waaaaaay more detail on this.)
Finally I’ve seen teams evolve their architectures - putting re-visit dates on #ADRs so decisions can be re-considered in light of additional information, and retiring / superseding decisions which have gone out of date.
That's it. That's the thread. Apologies again its so long (ideas breed other ideas, what can I say.)
All feedback and comments are v v welcome. (apart from "I don't like long threads" - there's @Unrollme for that) Particularly areas where this won't work. (Constraints #FTW!)
• • •
Missing some Tweet in this thread? You can try to
force a refresh
“Patterns of Anarchy” is a collection of writings published in 1966. I came to it because a) Christopher Alexander quotes from it in “A Pattern Language” and b) because as a consultant and developer I’m interested in different patterns of organising. goodreads.com/book/show/1663…
Edited by L. Krimerman and L. Perry, the book brings together thinkers from across the anarchist spectrum and considers definitions of anarchism, anarchist critiques of socialism, it's philosophical foundations, and more.
There’s a lot in it, especially if like me, you don’t know much about anarchism beyond “A Homage to Catalonia”.
I was talking to a colleague & fellow Domain-Driven Design obsessive @thoughtworks the day before yesterday.
Their gig wasn't using #DDD, and while they knew it would bring benefits, they had no remit to start a full-on adoption effort.
And so the conversation turned instead to how they can make their little part of the codebase a #DDD haven, and keep themselves sane in the process.
Now, the typical mindset of a grafting Dev shipping quality code these days is SOLIDSOLIDSOLID, and while that's generally no bad thing, is there a similar place for #DDD in that scene?
In my life as a consultant I've seen many peeps adopting Domain Driven Design.
Things go wrong a lot; and frequently the problems start in the initial stages.
So I made a thread to share my thoughts and tips on the subject of starting out.
(Please comment. I love feedback.)
When I say "Domain Driven Design" I'm talking about the design process introduced by Eric Evans (@ericevans0) in his 2003 book "Domain-Driven Design: Tackling Complexity in the Heart of Software". amazon.com/Domain-Driven-…
This book, while incredibly readable (one of my top three books for devs) also puts people off with its heft. (Understandable.) There are related works too (Implementing Domain Driven Design by Vaughn Vernon (@VaughnVernon) being the most well known.) amazon.com/Implementing-D…
Arrived for the @sainsburys Agile Community Autism Awareness Workshop at @MSFTReactor. I'm excited to see what they have in store for us...
Catherine Leggett from the @nationalautisticsoc kicks us off. Focusing first on workplace adjustments.
Catherine Leggett: "We're not diagnosed on our strengths, these (from the diagnostic criteria) are "difficulties". But these are strengths in different circumstances.