Agile allows us to commit at the last responsible moment, delivering value early and have self-organised teams.
So why have a role in a team which forces you to do upfront design on a system, when we don’t know all the requirements yet, let alone how we’re going to meet the requirements?
Surely “Emergent Design” is best as it allows for the design to change as the requirements change, so there is no need for a Software Architect – Developers can do it.
Can All Developers Do Emergent Design?
Agile teams that are self organising, empowered to deliver and filled with highly skilled individuals able to collaborate on creating appropriate architectures, do they need a Software Architect in the team? Probably not.
The same argument can be used for not having a Scrum Master in such teams
- The team is self motivated and organised
- Able to remove constraints
- They’re empowered
Do you need a Tester in such teams? No, only if..
- The Team is experienced enough to be able to carry out testing, looking at edge cases
- Has experience in various testing strategies
- Able to distance themselves and critique the code they’ve been working on.
Do you see a common thread between the three examples?
- All the teams have the ability and skills to do the work which that individual would do; (if you’ve already got that and it is working why would you need it?)
- The roles have specific skills which can be passed onto someone, skills which can be taught and introduced to your team members – your peer group.
What happens when your team does demonstrate all the characteristics listed above? Do you need a Software Architect?
Before you answer let’s look at what I think a Software Architect brings to an Agile team.
The Software Architect’s Responsibilities
Software Architects are concerned about (and in no particular order…):
- Application Performance & Scalability
- Application Security
- Disaster Recovery
- Support & Monitoring
- Deployment of the application into Development, Test, Acceptance Testing, Production (DTAP)
- Guidelines & Principles for Development
- Development Reference Points – what IDE, CI, IOC etc… to use
- Legal Implications for the design, e.g. can we store the data in this data centre, what can we store and for how long?
An Architect then has to work out how to resolve the business problem that got the team together in the first place! Software Architects identify the application structure, the remit and framework, i.e. the boundaries of the application.
On top of those responsibilities, the Software Architect must then
- Be Collaborative
- Able to develop – but not necessary to be the best developer in the team
- Able to demonstrate what needs to be done via PoCs / Able to investigate issues
- Create and update design documents to support complex pieces of development work – http://domscode.com/category/design-documents/
- Actively involve the team in design discussions
- Be an Educator within the Team.
All of the above points are important areas within Software Development Life Cycle (SDLC). However the majority of Developers are not concerned with the ‘Hows’ and ‘What If’, they’re in the now, they’re working on their story moving it through the agile board.
So if you didn’t have an architect in the team, how would these things get done?
The Tester And The Architect
The role of the Software Architect within an Agile Team, has the same responsibility as that of a Tester: to show, to educate and to ensure the Developers reassess what they’re doing.
Over my career I’ve worked with 2 types of Testers
- Ones that run through the manual test script, passing or failing the application depending on the outcome
- Ones that intelligently test the application – what could go wrong here, what if this happened?
The second Tester educates the developers on how to test better; those testers have a sense of awe around them that makes the Developers be better testers.
In the agile team we’re looking for:
Developers that test / Testers that develop
Developers that architect / Architects that develop
Does The Role Scale?
Having multiple Software Architects within the department makes sense. Following the now much publicised Spotify model, it makes perfect sense to have a Chapter of Architects. Like minded people coming together to discuss what they’re working on, sharing issues and approaches.
The Software Architect is part of a development team, actively engaged in the development of the project providing expertise to the team.
Could they work across multiple teams? Potentially, but then the management of time per team starts to become an issue. It makes more sense to have an Architect embedded in each development team providing development skills and educating the team in architectural areas.
Agile Teams do need Software Architects; it allows the team to concentrate on the now whilst the architect looks at the now and the next.
The goal is to improve the architecture knowledge and experience of the overall team; in the same way a Tester should be improving the way the team tests.