160 likes | 330 Views
Continuous Attention to Technical Excellence and Good Design…. Agile Software Architecture – Why Do We Care ? 3/14/12 Jonathan Rayback, Motorola Solutions. Why do we care?. Shouldn’t this be someone else’s problem?. Why do we care?. Shouldn’t this be someone else’s problem?
E N D
Continuous Attention to Technical Excellence and Good Design… Agile Software Architecture – Why Do We Care? 3/14/12 Jonathan Rayback, Motorola Solutions
Why do we care? • Shouldn’t this be someone else’s problem?
Why do we care? • Shouldn’t this be someone else’s problem? • We’re executives after all!
Why do we care? • Technical executives: • We want to have understandable, maintainable code. • We want our developers to be craftspeople. • Other? • Business executives: • We want to better understand what our money buys us. • We want to be able to respond quickly to business priorities (isn’t that what Agile promised us?). • If the structure is valuable in and of itself, you can sell the structure…the platform itself has value…shareholders care
Obstacles? • Organizational? • Conway’s Law: “Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.” [1968] • Cultural? • “too” “agile”? • Coding seen as more valuable than designing? • Lack of skills needed to cultivate good architecture? • Habit of running faster than really capable? • Reality? • Not all software is green field…sometimes you inherit bad code
Good software architecture…(From Robert C. Martin: http://www.youtube.com/watch?v=WpkDN78P884) • …should reflect what the software does. • Like building blueprints…
Good software architecture…(From Robert C. Martin: http://www.youtube.com/watch?v=WpkDN78P884) • …should reflect what the software does. • Like building blueprints… • …allows major decisions to be deferred. • Story of FitNesse…
Good software architecture…(From Robert C. Martin: http://www.youtube.com/watch?v=WpkDN78P884) • …should reflect what the software does. • Like building blueprints… • …allows major decisions to be deferred. • Story of FitNesse… • …maximizes the decisions not made. • “Simplicity – the art of maximizing the amount of work not done – is essential.”
Good software architecture…(From Robert C. Martin: http://www.youtube.com/watch?v=WpkDN78P884) • …should reflect what the software does. • Like building blueprints… • …allows major decisions to be deferred. • Story of FitNesse… • …maximizes the decisions not made. • “Simplicity – the art of maximizing the amount of work not done – is essential.” • “Architecture is the art of drawing lines such that all dependencies that cross a line always go in the same direction.”
ExampleIvar Jacobson as described by Robert C. Martin • Driven by use cases so architecture communicates what software does • User stories? • Use cases are architectural currency…they become objects: Interactor/ (Control) (Use Case)
ExampleIvar Jacobson as described by Robert C. Martin Entity Interactor Entity (Use Case) Entity
ExampleIvar Jacobson as described by Robert C. Martin Application-specific Logic Application-agnostic Logic Entity Interactor Entity (Use Case) Entity
ExampleIvar Jacobson as described by Robert C. Martin Application-specific Logic Application-agnostic Logic Entity <I> Boundary Interactor Entity (Use Case) <I> Boundary Entity
How? • Dean Leffingwell: Agile Software Requirements • “Requirements and [Architecture] represent two sides of the same coin.” • “What the system will do” is reflected in requirements • “How the system will do it” is the architecture • They are NOT independent! • Emergent architecture is good but sometimes it needs to emerge intentionally. • Eventually all systems will have portions that need to be re-architected. • Common vision, strategy and governance model required.
Leffingwell’s Eight Principles of Agile Architecture • For large systems • Leverage desirable agile properties • Adds safety: • The teams that code the system also design the system. • Build the simplest architecture that can possibly work. • When in doubt, code it or model it out. • They build it, they test it. • The bigger the system, the longer the runway. • System architecture is a role collaboration. • There is no monopoly on innovation. • Implement architectural flow.
Key takeaways: • Focus on your organization: Conway’s Law. • Get the right people with the right kind of temperament and skills. • Embrace the System Architect. • Insist that teams take time to nurture the code. • Don’t abdicate your role as steward!