Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Evolutionary Architectures

Evolutionary Architectures

This talk was given at the TLP Innova 2018.

One of the most difficult things in the modern development is tackling the complexity. Based in the ideas proposed by Neal Ford, Rebecca Parsons, and Patrick Kua in their book, the slides contains some techniques to help to reduce the complexity during the software development process, based in my own experience.

Yeray Darias

July 19, 2018
Tweet

More Decks by Yeray Darias

Other Decks in Programming

Transcript

  1. 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
  2. 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)
  3. 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)
  4. 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)
  5. 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)
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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)
  11. 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)
  12. 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)
  13. 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)