際際滷

際際滷Share a Scribd company logo
Evolutionary
Architecture
  Rebecca Parsons
 CTO ThoughtWorks
Agenda
Emergent design vs evolutionary
architecture
Principles of evolutionary architecture

Techniques of evolutionary architecture

How to achieve an evolutionary
architecture in practice
Design and
         Architecture
Evolutionary versus Emergent

Design and Architecture

Evolutionary Architecture and Emergent
Design
Principles of Evolutionary
         Architecture
Last responsible moment

Architect and develop for evolvability

Postels Law

Architect for testability

Conways Law
Last Responsible
       Moment
Delay decisions as long as you can, but no
longer

Maximizes the information you have
Minimizes technical debt from complexity

Decide early what your drivers are, and
prioritize decisions accordingly
Evolutionary, neither emergent nor based
on guesswork
Architect for
       Evolvability
Sensible breakdown of functionality


Consider data lifecycle and ownership


Appropriate coupling


Lightweight tooling and documentation
Develop for
        Evolvability
Software internal quality metrics focusing
on ease of change

Find hotspots and focus efforts there

Measure continually, focusing on trends
Reversability
Postels Law
Be conservative in what you send

Be liberal in what you receive

Only validate what you need

Holds for any information exchange
Use version changes when a contract
must be broken
Architect for
        Testability
Aiming towards testability produces a
well-architected system

Messaging infrastructure used for
messaging, not business logic
Business sensible components
Testing at many levels, including contract
Build pipelines support the volume
Conways Law
Organizations design systems re鍖ecting
their communication structures

Broken communications imply complex
integration

Silos often result in broken communication

If you dont want your product to look like
your organization, change your
organization (or your product)
Techniques

Database Refactoring


Continuous Delivery


HATEOS
Database
         Refactoring
De-compose big change into series of
small changes
Each change is a refactoring/migration
pair (or triple if you include access code)
Changes compose in the same way
functions compose
And of course, version control the
changes
And apply in the various environments
during promotion
Continuous
          Delivery
Automate environments and con鍖gurations

Automate builds and use continuous
integration

Automate testing at all levels
Automate deployment
Just because you CAN release at any
time doesnt mean you HAVE to
HATEOAS
Hypermedia as the Engine of Application
State

Distribution of information

Consumer driven contracts

Evolvable contracts

Idempotency and other properties
Evolutionary
       Architecture
De鍖ne your architectural 鍖tness function
Delay your decisions as long as you can

Understand various forms of technical
debt
Implement evidence based re-use

Create and maintain the testing safety
net
Questions?
  http://rebeccaparsons.com
http://www.thoughtworks.com

More Related Content

Evolutionary architecture

  • 1. Evolutionary Architecture Rebecca Parsons CTO ThoughtWorks
  • 2. Agenda Emergent design vs evolutionary architecture Principles of evolutionary architecture Techniques of evolutionary architecture How to achieve an evolutionary architecture in practice
  • 3. Design and Architecture Evolutionary versus Emergent Design and Architecture Evolutionary Architecture and Emergent Design
  • 4. Principles of Evolutionary Architecture Last responsible moment Architect and develop for evolvability Postels Law Architect for testability Conways Law
  • 5. Last Responsible Moment Delay decisions as long as you can, but no longer Maximizes the information you have Minimizes technical debt from complexity Decide early what your drivers are, and prioritize decisions accordingly Evolutionary, neither emergent nor based on guesswork
  • 6. Architect for Evolvability Sensible breakdown of functionality Consider data lifecycle and ownership Appropriate coupling Lightweight tooling and documentation
  • 7. Develop for Evolvability Software internal quality metrics focusing on ease of change Find hotspots and focus efforts there Measure continually, focusing on trends
  • 9. Postels Law Be conservative in what you send Be liberal in what you receive Only validate what you need Holds for any information exchange Use version changes when a contract must be broken
  • 10. Architect for Testability Aiming towards testability produces a well-architected system Messaging infrastructure used for messaging, not business logic Business sensible components Testing at many levels, including contract Build pipelines support the volume
  • 11. Conways Law Organizations design systems re鍖ecting their communication structures Broken communications imply complex integration Silos often result in broken communication If you dont want your product to look like your organization, change your organization (or your product)
  • 13. Database Refactoring De-compose big change into series of small changes Each change is a refactoring/migration pair (or triple if you include access code) Changes compose in the same way functions compose And of course, version control the changes And apply in the various environments during promotion
  • 14. Continuous Delivery Automate environments and con鍖gurations Automate builds and use continuous integration Automate testing at all levels Automate deployment Just because you CAN release at any time doesnt mean you HAVE to
  • 15. HATEOAS Hypermedia as the Engine of Application State Distribution of information Consumer driven contracts Evolvable contracts Idempotency and other properties
  • 16. Evolutionary Architecture De鍖ne your architectural 鍖tness function Delay your decisions as long as you can Understand various forms of technical debt Implement evidence based re-use Create and maintain the testing safety net