Agile Software Architecture Cesario Ramos 04-2009
Code focussed Do what is important now Evolves during the project Defers Implementation Documentation focussed Do what is important in the long term Defined upfront Includes Implementation Agile Architecture Classic Architecture
Why agile software architecture?
Deliver Fast Increase ROI. Early validation of your business case. Give customers what they want when they want it.
Defer Commitment Reduce risk. Decide based on most possible knowledge. Keep yours and the customers options open.
Eliminate Waste Support something that does not add value now. Have the architecture slow you down
so we need sw architecture to... Be the simplest solution to support the current functionality. Change without increasing risk or waste. Change economically. Change without making the software worse. Evolve in early and refine later iterations.
Comparing with civil engineering
Based on concrete analysis using physics and mathematics. Based on things you know and change slowly. Plan, Do, Review. Plan the work, work the plan
Requirements Design Coding Testing Release Analysis Design Construction Inspection Release Software Development Civil Engineering Coding is NOT Construction
and then.... When do we test our requirements? When do we test our design? What if we overdo it?  How do you handle changes? Requirements Architecture and Design Coding Testing Release
How to create agile software architecture?
High level guidelines. It’s helpful to know the functional modules needed to do the kind of business at hand. It’s helpful to know your current state and to know the desired future state modules architecture. (based in info known at the time.) You should include in the release plan the steps needed to go from current state to future state. Consider ROI in the decision making process Work on architectural modules only when actually needed. Evolve the architecture during the various releases Do not let quality decay, Refactor to the Open Closed. Validate, adapt and re-plan architecture.
Needed modules to do the business at hand?
DCI Architecture What the system IS Captures what is stable The domain classes What the system DOES User stories. Business objects.
Evolve the architecture?
Open Closed Principle A module should be open for extension and closed for modification
Refactoring as Fowler proposed Improving the design of existing code. Refactoring to be Open Closed. For handling future requirements. Refactoring Provides Value by Reducing Risk Reducing Waste
Separation Of Concerns Low Coupling Minimal dependencies Minimal side effects High Cohesion Single responsibility One reason to change
Tests Drive Design Supports you to look at your public API. Supports you to think about cohesion. Supports you to think about coupling. Supports you to not produce redundancies.
Readable code public   void  advanceTurn() { if ( characterHavingCurrentTurn  + 1 < p layableCharacters .size()) characterHavingCurrentTurn ++; else characterHavingCurrentTurn  = 0; }
Programming by Intention public   void  advanceTurn() { if (notAllCharactersInListHadTheirTurn()) nextCharacterInTheListGetsTheTurn(); else firstCharacterInTheListGetsTheTurn(); } private   void  firstCharacterInTheListGetsTheTurn() { characterHavingCurrentTurn  = 0; } private   void  nextCharacterInTheListGetsTheTurn() { characterHavingCurrentTurn ++; } private   boolean  notAllCharactersInListHadTheirTurn() { return   characterHavingCurrentTurn  + 1 <  playableCharacters .size(); }
Summary Agile Architecture helps you reduce risk and waste. OO/XP principles and practices make evolving architecture  possible. Particular approach depends upon knowledge of domain, technology and project size.
Agile Software Architecture Cesario Ramos 04-2009

Agile Software Architecture

  • 1.
    Agile Software ArchitectureCesario Ramos 04-2009
  • 2.
    Code focussed Dowhat is important now Evolves during the project Defers Implementation Documentation focussed Do what is important in the long term Defined upfront Includes Implementation Agile Architecture Classic Architecture
  • 3.
    Why agile softwarearchitecture?
  • 4.
    Deliver Fast IncreaseROI. Early validation of your business case. Give customers what they want when they want it.
  • 5.
    Defer Commitment Reducerisk. Decide based on most possible knowledge. Keep yours and the customers options open.
  • 6.
    Eliminate Waste Supportsomething that does not add value now. Have the architecture slow you down
  • 7.
    so we needsw architecture to... Be the simplest solution to support the current functionality. Change without increasing risk or waste. Change economically. Change without making the software worse. Evolve in early and refine later iterations.
  • 8.
  • 9.
    Based on concreteanalysis using physics and mathematics. Based on things you know and change slowly. Plan, Do, Review. Plan the work, work the plan
  • 10.
    Requirements Design CodingTesting Release Analysis Design Construction Inspection Release Software Development Civil Engineering Coding is NOT Construction
  • 11.
    and then.... Whendo we test our requirements? When do we test our design? What if we overdo it? How do you handle changes? Requirements Architecture and Design Coding Testing Release
  • 12.
    How to createagile software architecture?
  • 13.
    High level guidelines.It’s helpful to know the functional modules needed to do the kind of business at hand. It’s helpful to know your current state and to know the desired future state modules architecture. (based in info known at the time.) You should include in the release plan the steps needed to go from current state to future state. Consider ROI in the decision making process Work on architectural modules only when actually needed. Evolve the architecture during the various releases Do not let quality decay, Refactor to the Open Closed. Validate, adapt and re-plan architecture.
  • 14.
    Needed modules todo the business at hand?
  • 15.
    DCI Architecture Whatthe system IS Captures what is stable The domain classes What the system DOES User stories. Business objects.
  • 16.
  • 17.
    Open Closed PrincipleA module should be open for extension and closed for modification
  • 18.
    Refactoring as Fowlerproposed Improving the design of existing code. Refactoring to be Open Closed. For handling future requirements. Refactoring Provides Value by Reducing Risk Reducing Waste
  • 19.
    Separation Of ConcernsLow Coupling Minimal dependencies Minimal side effects High Cohesion Single responsibility One reason to change
  • 20.
    Tests Drive DesignSupports you to look at your public API. Supports you to think about cohesion. Supports you to think about coupling. Supports you to not produce redundancies.
  • 21.
    Readable code public void advanceTurn() { if ( characterHavingCurrentTurn + 1 < p layableCharacters .size()) characterHavingCurrentTurn ++; else characterHavingCurrentTurn = 0; }
  • 22.
    Programming by Intentionpublic void advanceTurn() { if (notAllCharactersInListHadTheirTurn()) nextCharacterInTheListGetsTheTurn(); else firstCharacterInTheListGetsTheTurn(); } private void firstCharacterInTheListGetsTheTurn() { characterHavingCurrentTurn = 0; } private void nextCharacterInTheListGetsTheTurn() { characterHavingCurrentTurn ++; } private boolean notAllCharactersInListHadTheirTurn() { return characterHavingCurrentTurn + 1 < playableCharacters .size(); }
  • 23.
    Summary Agile Architecturehelps you reduce risk and waste. OO/XP principles and practices make evolving architecture possible. Particular approach depends upon knowledge of domain, technology and project size.
  • 24.
    Agile Software ArchitectureCesario Ramos 04-2009