From "Fundamentals of Software Architecture"
🎧 Listen to Summary
Free 10-min PreviewBalancing Hands-On Coding and Architecture
Key Insight
Architects are expected to code and maintain a certain level of technical depth, a balance that can be challenging to achieve alongside their core architectural responsibilities. A critical pitfall to avoid is the 'bottleneck trap,' which occurs when an architect assumes ownership of critical path or framework code within a project. Due to architects not being full-time developers and having to divide their time between coding, drawing diagrams, and numerous meetings, they inadvertently become a bottleneck for the development team. To circumvent this, effective architects delegate ownership of critical path and framework code to the development team, thereby fostering a greater sense of ownership and deeper understanding among team members.
Instead, architects should focus their coding efforts on implementing a piece of business functionality, such as a service or screen, that is scheduled for one to three iterations in the future. This approach yields three significant benefits: the architect gains valuable hands-on experience writing production code without creating bottlenecks, the essential framework code is appropriately distributed to the development team, and by working on similar business logic, the architect can better empathize with the development team's practical challenges concerning processes, procedures, and the development environment. When direct team coding is not feasible, architects can maintain hands-on involvement through frequent proof-of-concepts (POCs). These involve writing source code to validate architectural decisions, for example, comparing two caching solutions through working examples, to understand implementation details, effort required, and evaluate architectural characteristics like scalability or performance. It is recommended that architects write production-quality code for POCs, as these often become reference architectures and help maintain good coding practices.
Further methods for architects to remain hands-on include tackling low-priority technical debt or architecture stories, or fixing bugs. These tasks not only free up the development team for critical functional work but also allow the architect to identify potential issues and weaknesses within the codebase or architecture. Leveraging automation is another effective strategy; this involves creating command-line tools, analyzers, or architectural fitness functions to streamline repetitive development tasks, such as automated source validators for coding standards or custom functions for architectural compliance using tools like ArchUnit for the Java platform. Finally, frequent code reviews, although not direct coding, ensure architects are involved with the source code, helping to guarantee compliance with the architecture and providing opportunities for mentoring and coaching within the team.
📚 Continue Your Learning Journey — No Payment Required
Access the complete Fundamentals of Software Architecture summary with audio narration, key takeaways, and actionable insights from Mark Richards, Neal Ford.