14 Principles of a Software Architect in an Agile Environment
May 19, 2015
- Facilitate rather than dictate architecture
- Negotiate for the reduction of technical debt
- Lead by example
- Embrace emergent design
- Refactor relentlessly, harvesting application idiomatic patterns
- Design with the expectation of change
- Extract Embedded Frameworks
- Make design choices at the last responsible moment
- Do not try to predict the future
- Rely on tightly coupled team discussions to make and socialize design decisions
- Choose simple solutions that can be replaced later once more complicated design is required and when the limitations are more well known
- Do not enable those would use architectural considerations as a pretext to force waterfall processes
- Rely on team members to make rational, adult decisions regarding code, and use refactoring as a mentoring opportunity
- Do the minimum amount of upfront design necessary to clear easily visible pitfalls, but expect to have to pivot at any moment.