Maksim Kabakou - Fotolia
The best Agile architects write code
To be a better software architect, brush up on programming skills and write code. See how Agile architects help developers and make projects better when they dabble in coding.
It is a common misconception that developers should write code, and architects should channel their efforts in a different direction. Many architects benefit from building their own working, code-based examples of development processes.
Some software development team leaders believe that if architects write code, it could take their time and focus away from the bigger picture: the long-term vision for software in the organization. Proponents of this so-called no-code camp also feel that if architects are compelled to spend their time writing code, it might discourage them from distributing worthwhile work to developers. But Agile architects can and should use programming skills to demonstrate the value of particular methods to their development team.
Let's examine why architects on an Agile team should keep up programming skills, and take note of instructive architect coding scenarios.
When architects don't write code
Architects who abstain from writing code -- informally known as ivory tower architects or PowerPoint architects -- risk losing touch with development tools, frameworks and libraries over time. Agile architects make design-based decisions which require, in part, practical knowledge of the developer toolkit. When Agile architects lack familiarity with current technology and coding practices, they create obsolete artifacts.
Unless architects get their hands dirty reading and writing code, there's a high possibility that they will only be able to communicate architectural designs to project stakeholders from an abstract perspective. An Agile architect who writes code, on the other hand, can create proofs of concept and prototypes that communicate ideas to the development team in detail.
Delegate programming work properly
Architects who relish in frequent coding can make the mistake of only delegating the basic parts of an application's code to the development team. Most developers enjoy challenging work, and they need the chance to improve their skills as much as architects do.
It's acceptable for the Agile architect to occasionally take the first stab at coding challenges when they arise, but don't hinder the team's long-term growth. Learn how to properly delegate work on software development projects so that the team is successful.
An architect can absolutely build prototypes for complex projects and research new tools and frameworks. But developers should carry out the creation of actual designs, with the architect providing guidance as needed.
Improving code quality
An architect should know how to code for another reason: to effectively review developer-written code and ensure that developers adhere to coding standards.
Programmer architects can gauge whether developers' code adheres to the defined architecture in these reviews. Architects should also provide feedback to the team to avoid repeated mistakes, which will boost code quality overall. Finally, they should also recommend the right tools for static code analysis and for performance metric capturing and analysis.
Software architecture and design collaboration
In an Agile team, software architecture and design are collaborative activities. This notion sharply contrasts with other development methodologies where the architect creates the entire design up front.
While an architect should convey current and prospective projects to the stakeholders, they should also encourage feedback and welcome necessary changes based on the feedback. Agile is iterative, and iteration requires willingness to change.
Time spent in the code editor
While an Agile architect should write code, they shouldn't do it full time. Architects are not developers, and therefore should determine a healthy amount of time to spend coding that garners respect from the team and informs how they design and communicate architectures.
I've been writing code daily for years; approximately 40% of my time is spent coding. I primarily code to learn about new and alternative ways to solve problems that the development team may face, such as an unverified design that only exists as a diagram in Microsoft Visio and represents a risk.
It's the responsibility of an architect to educate and grow the development team. They should be comfortable helping the team implement strategies through practical mentoring and examples. The architect should emphasize non-technical skills on a development team, like adoption of Agile and DevOps principles. Programming skills are one facet of the overall Agile architect's approach to projects.