The Well-Rounded Architect (Journey ( Elements of a Good Architect…
The Well-Rounded Architect
What is An Architect
The architect is a role
A name for a collection of resposibilities. We all play multiple roles, you might just as well be a parent and at the same time you also have this role
A name for a collection of responsibilities
Sometimes this role does not exist in a team. If the responisibilities are distributed between the team then it might happen that you don't need that role.
In some organizations the role can be played by multiple persons.
The architect is the person responsible for the important architecture decisions.
We all work with passionate and smart craftsmen and craftswomen. We all have preferences around specific decisions and prefered ways of doing things. And thats important.
But it's the responsibility of the architect to make sure that those decisions get made and that we are heading in the right direction
It's not that nobody else cand help make the decision, but the role is there to make sure that these decisions get made in a timely fashion
What is architecture?
People whose shoulders we stay on
Architecture represents the
design decisions that shape a system, where significant is measured by
cost of change
If you can easily reverse a decision, then it is easy to back off from it.
so if it becomes less important then it becomes just a design decision
The other aspect is that somethimes architects are the people that burn architectures
I like to think about architects as nurturing architecture. We kind of picked the term
Building Evolutionary Archtiectures
because it has this biological sort of metaphor
If you think about gardens you can plan a lot but there are a lot of things you have to do right in order to have a great garden.
They are there to support the team and the business to make sure that where possible the best decisions are made.
You want to take this nurturing stance in your teams and help make sure that the best decisions get made.
Benefit from diverse teams and diverse opinions
Elements of a Good Architect
Let's look at the things that make up a good architect
An effective Architect develops skills as a
When you think about nurturing and being a gardner you can't really take a dictatorship style of leadership. It is style a leadership style but it is not the one that will be the most efective in todays software engineering type of teams.
what do I mean by a leader?
what if we inverse this question of what a leader is?
what happens if we don't have technical leadership? perhaps you have been in a project with
5 persistente frameworkis
3 automated test frame
5 parallel branches
a hand rolled source control system
all on the same project *
these is what happens when you haven't been in an environment that makes change easier as time progresses
quote from julianboot I had ten guys on my last project, all of them had opinions and all of them were expressed in the code base
how many have you experienced this?
these type of problems is what technical leadership should help address.
you want everyone to work towards the same goal. but normally people have different expectations on what that goal shoudl be
some want to learn bdd, others something about machine learning, and also someone wants, get rid of the technical debt that was acrued in the last several years
in todays fluid world the goals shift over time as well. so you as a leader will help shepeard this as well.
You have to think about the things that are nudging people toward the same goal.
An effective Architect acts as a good
and shepherds everyone in the same direction
An effective Architect is also a good
How many have worked with an architect that does not like code (i'm sorry for you)
The decisions they make are usually out of context. If you don't have any knowledge about the code base you don't know what the extra complexity you add with any decision that you make
So one of the key aspects is to spend some time writing the code or taking the time with the team to understand the code base
The architect has to be a good developer. He does not need to be a great developer and up to date on all the latest and greatest technologies.
As a developer it's very important to get early and fast feedback. As you have a good hypothesis on something that might work.
And also a good developer you should have emphathy around what your colleagues are facing
you can see what happens when you make some decision, for instance if you choose something that increases the time to feedback for everyone.
on a whiteboard everything is wonderful, but when you face reality you must understand the system constraints.
People should have the mental model of sitting with the team and helping them making better decision
decision loop feedback
first hand observation
experiencing the side-effects
discovering system constraints
An effective Architect is
when you write code you are thinking of the problem you are trying to solve.
you have to think about the system you are writing the code for.
beyond the simple deployment is the whole operations side that are linked to the system you are building.
-- Constant Change
You must consider your decision with the whole ecosystem in mind not just your current tooling
An effective Architect is also an
We don't just build software because we like it but because we also solve business problems.
So we must also think about the business in terms of costs vs benefits. it's always about the tradeoff of buying a solution right now or deferring the decision and building it yourself internally
Look the value it brings now and the cumulative cost over time.
It's also about
so we always look at mechanisms that allows the teams to explore and experiment.
Try new things and innovation but not just for the sake of innovation.
An effective Architect looks forward like a
it's only our skills that change over time but also the industry at large changes over time.
So you should look at the technology radar that helps you look at the tools/ languages/techniques/frameworks that are being adopted over time.
You have to think abreast about the things that are important in your industry and keep track of it over time.
So think about where things are going. You have also clasifications like HOLD/Asses/Trial/Adopt.
An effective Archtiect must be a strong
The A must have strong communication skills.
Most time is spent with the development team (refactoring, coupling, dependency injection, kotlin)
some times the audience changes and we are talking about
in order to adapt the message
finance cost/benefit/investment capex, apex
you will have different ways to tell the same story based on the audience
communicator outwards and inwards making people outside and inside the team on the same context on the decisions you've made
presentation that excite and motivate
always looking forwards
dodgy sales person
nobody understand why
resume driven development
never realises the ideas
Ivory tower architect
better in theory than practice
fear of being redundant
I need to stay coding and be up to date on the latest and greatest
Does a lot of prototypes but never think it through in production
Tinkerer (when you don't have the balance)
Ignored by the business
Ignored by developers (if you tinker all the time, you drop code bombs)
if we also add leadership
they build a lot of platforms that don't add value
establishes "technical projects"
big bang failure mode
There is no right shape of being an architect
The key is to find a minimum that brings a balance in the attributes that you have.
Use the chart to build your skill sets
Just starting (find practices)
Improving (small goals) explicit focus
Capable (over time with deliberate practice) this is ok!
It's ok just to be capable and balanced
Map yourself realisticly and see your shape for today. and choose where you want to be in the next 6 months.