Slide 1

Slide 1 text

Evolutionary Architectures Yeray Darias @ydarias

Slide 2

Slide 2 text

Talia Gershon Ismael Faro Paco Martín Fran Cabrera Jorge Carballo Jorge Barroso Abdón Rodríguez Iván Durán Jesús Pérez Toni Martínez Juan Gómez Axel Hernández Diego Moreda Juan Cruz-Benito Antonio López Yeray Darias IBM Research ETX David García Salva de la Puente Luciano Bello Krissy Brimijoin Borja Godoy Hyung Seo Greg Boland Olivia Ruan Joseph Schwarz Ismael Rozas

Slide 3

Slide 3 text

Act 1: Final Boss

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Time Complexity

Slide 7

Slide 7 text

Time Complexity

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Monolith Microservices Serverless

Slide 11

Slide 11 text

Monolith Microservices Serverless

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Act 2: Starting the adventure

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

1. One Page Design

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Anti-pattern

Slide 24

Slide 24 text

1. One Page Design Pros • It is easy • Keep all the team in the same page Cons • Harder to evolve and maintain than code References • Original talk by Stone Librande (link) • Talk by Jorge Barroso (link)

Slide 25

Slide 25 text

2. Light. Architectural Decisions Record

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Anti-pattern

Slide 28

Slide 28 text

2. Light. Architectural Decisions Record Pros • It is easy • Help the team to remember why they took some decisions • Updated with the source code Cons • People tend to forget to update the records References • Entry at the ToughtWorks Technology Radar (link)

Slide 29

Slide 29 text

3. Postmortems

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

Anti-pattern

Slide 33

Slide 33 text

3. Postmortems Pros • Easy enough to write • Help the team to improve and avoid past mistakes Cons • Some people use them to blame References • GitLab Postmortem after its January 31 outage (link) • Runnics Postmortem slides (link)

Slide 34

Slide 34 text

4. Continuos delivery

Slide 35

Slide 35 text

Anti-pattern

Slide 36

Slide 36 text

4. Continuos delivery Pros • Lower lead time to production • Usually it provides a very professional attitude of the team Cons • Hard to implement • Serious bugs can go into production environments References • Martin Fowler talk about Continuos Delivery (link)

Slide 37

Slide 37 text

5. Infrastructure as code

Slide 38

Slide 38 text

Anti-pattern

Slide 39

Slide 39 text

5. Infrastructure as code Pros • New environments are deployed in minutes • The infrastructure documentation is up to date, because it is code! Cons • Very hard to implement • Usually it creates some information silos around the team

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

Act 3: Learning new ways to fight

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Evolutionary Architecture

Slide 44

Slide 44 text

Architecture

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

Anti-pattern

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

Evolutionary

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

Evolutionary Architecture Small changes Software dimensions Fitness functions

Slide 52

Slide 52 text

Software dimensions (-ilities)

Slide 53

Slide 53 text

accessibility accountability accuracy adaptability administrability affordability agility auditability autonomy availability compatibility composability configurability correctness credibility customizability debugability degradability determinability demonstrability dependability deployability discoverability distributability durability effectiveness efficiency usability extensibility failure transparency fault tolerance fidelity flexibility inspectability installability integrity interoperability learnability maintainability manageability mobility modifiability modularity operability orthogonality portability precision predictability process capabilities producibility provability recoverability relevance reliability repeatability reproducibility resilience responsiveness reusability robustness safety scalability seamlessness self- sustainability serviceability securability simplicity stability standards compliance survivability sustainability tailorability testability timeliness traceability

Slide 54

Slide 54 text

accessibility accountability accuracy adaptability administrability affordability agility auditability autonomy availability compatibility composability configurability correctness credibility customizability debugability degradability determinability demonstrability dependability deployability discoverability distributability durability effectiveness efficiency usability extensibility failure transparency fault tolerance fidelity flexibility inspectability installability integrity interoperability learnability maintainability manageability mobility modifiability modularity operability orthogonality portability precision predictability process capabilities producibility provability recoverability relevance reliability repeatability reproducibility resilience responsiveness reusability robustness safety scalability seamlessness sustainability serviceability securability simplicity stability standards compliance survivability sustainability tailorability testability timeliness traceability

Slide 55

Slide 55 text

accessibility accountability accuracy adaptability administrability affordability agility auditability autonomy availability compatibility composability configurability correctness credibility customizability debugability degradability determinability demonstrability dependability deployability discoverability distributability durability effectiveness efficiency usability extensibility failure transparency fault tolerance fidelity flexibility inspectability installability integrity interoperability learnability maintainability manageability mobility modifiability modularity operability orthogonality portability precision predictability process capabilities producibility provability recoverability relevance reliability repeatability reproducibility resilience responsiveness reusability robustness safety scalability seamlessness sustainability serviceability securability simplicity stability standards compliance survivability sustainability tailorability testability timeliness traceability

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

Availability Resiliency Responsiveness Traceability Scalability Affordability

Slide 58

Slide 58 text

Availability Resiliency Responsiveness Traceability Scalability Affordability

Slide 59

Slide 59 text

Availability Resiliency Responsiveness Traceability Scalability Affordability

Slide 60

Slide 60 text

Availability Resiliency Responsiveness Traceability Scalability Affordability

Slide 61

Slide 61 text

Fitness Functions

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

f(x) = 56

Slide 64

Slide 64 text

f(x) = 79

Slide 65

Slide 65 text

f(x) = 43

Slide 66

Slide 66 text

Atomic Holistic Triggered Continuos Unit tests Legal audit Load test

Slide 67

Slide 67 text

Act 4: Ready to fight

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

6. Static code analysis

Slide 70

Slide 70 text

Anti-pattern

Slide 71

Slide 71 text

6. Static code analysis Pros • There are a lot of tools to implement it • Helps to have a better and safer code • Advanced tools can verify aspects like security or concurrency problems Cons • It is not magic, requires an effort from developers References • Measure and improve code quality (link) • Detecting and analyzing redundant code (link)

Slide 72

Slide 72 text

7. Architectural rules enforcement

Slide 73

Slide 73 text

Anti-pattern

Slide 74

Slide 74 text

7. Architectural rules enforcement Pros • Helps to organize the code better • It helps to keep the system more “modular” Cons • It requires a great effort to have some common understanding References • Architecture blog post by @herbertograca (link)

Slide 75

Slide 75 text

8. Monitoring

Slide 76

Slide 76 text

Anti-pattern

Slide 77

Slide 77 text

8. Monitoring Pros • Helps to know how each change affects the overall system Cons • Quite difficult in distributed architectures References • Mastering Chaos - a Netflix presentation (link) • Monitoring Microservices by Adrian Crockford (link)

Slide 78

Slide 78 text

9. Social code analysis

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

Anti-pattern

Slide 81

Slide 81 text

9. Social code analysis Pros • It helps to localize hot spots of code Cons • Very dependent on the analysis tool • Hard to implement from scratch References • Analyzing software with forensic psychology by Adam Tornhill (link)

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

One change at a time

Slide 84

Slide 84 text

Decide the most important dimensions for you

Slide 85

Slide 85 text

Measure how your changes affect the system

Slide 86

Slide 86 text

Automatic!!!

Slide 87

Slide 87 text

Q & A