Agile Software Architecture (with George Fairbanks)
George Fairbanks and I chatted via Google+ Hangout in February 2014 about agile software architecture. I think we found a groove pretty quickly and the conversation overall went great. I've created bookmarks of some of the main topic areas that we covered to make it easier to jump to bits of the discussion you might find more interesting.
During this Hangout we meandered through several topics starting with walking skeletons and leading to...
- Walking skeletons, thin vertical slices, and assumptions about "ideal" patterns for agile architecture
- YAGNI and how you figure out what the bones of a walking skeleton should be
- System Metaphor
- Design Patterns
- Presumptive architectures
- Routine vs. novel design
- Including the "just like the last thing we built" pattern
- How patterns mature over time... and a seeming lack of attention to patterns these days
- I proposed that perhaps patterns are being codified as frameworks (and not patterns catalogs)
- Choose a framework, architecture chosen
- Balancing flexibility and power when choosing frameworks
- Switching frameworks is really hard...
- Refactoring in the small vs. refactoring in the large
- Can you refactor to patterns and back your way into a framework? Maybe....
- If you choose the wrong framework you might be stuck
- Last responsible moment
- There's a tension in keeping options open since it's so expensive (or impossible) to change frameworks later.
- Spiral model
- Great model for thinking about up front design decisions in the right ways.
- Also, correct pronunciation of Boehm, ;-)
- Michael Waterman's research -- see also, his research paper and blog.
- Strategically deferring architectural decisions
- Trading speed of delivery for knowledge - "That would be a nice problem to have"
- See also Boehm's and Turner's book Balancing Agility and Discipline: A Guide for the Perplexed
- Does it make sense to choose a framework that promotes properties you need today to deliver faster at the sacrifice of properties you might need later?
- Engineering by design vs. Engineering by coincidence
- Choosing architectural mismatch to promote different qualities?