architectural refactoring dave adsit architect davidadsit
play

Architectural Refactoring Dave Adsit Architect @davidadsit - PowerPoint PPT Presentation

Architectural Refactoring Dave Adsit Architect @davidadsit codeobsession.blogspot.com Architectural Evolution at a mostly true story What is Software Architecture? Architecture is the stuff thats hard to change. Martin Fowler What is


  1. Architectural Refactoring

  2. Dave Adsit Architect @davidadsit codeobsession.blogspot.com

  3. Architectural Evolution at a mostly true story

  4. What is Software Architecture? Architecture is the stuff that’s hard to change. Martin Fowler

  5. What is Refactoring? Refactoring is a changing the structure of code without changing its behavior.

  6. What is Architectural Refactoring? Intentionally changing the structure of a system without altering its features.

  7. Why would anyone do that? The technology fails to meet the needs of users The team fails to deliver on the needs of the organization

  8. Architectural Drivers Quality Attributes Performance Compatibility Reliability Scalability Extensibility Availability Maintainability Usability

  9. Architectural Drivers Constraints Money Hosting Environment Experience Skills Knowledge Capacity

  10. Patterns of change A generally reusable solution to a commonly occurring problem within a given context

  11. Build a monolith Fast and easy Can be done with a small team Allows for quick changes No need for QA handoff No need for Ops handoff

  12. Leverage a distributed web cache (CDN) Offload traffic from a web server Improve response time for users far away

  13. Cluster the servers Distribute load Improve reliability Move from physical to virtual machines

  14. Eliminate session state No more sessions pinned to servers Replace session data with user data

  15. Replace feature branches with feature toggles Integrate continuously Decouple deploy from release Ability to disable features that don’t work out

  16. Separate data and static assets Reduce server-side rendering load Leverage client processing power Improve quantity and granularity of caching <html>...</html> { … }

  17. Shard the database Partitioning data to distribute load

  18. Introduce a polyglot datastore Document database for fast reads SQL database for ad hoc reporting and research Miscellaneous special purpose databases

  19. Replace database queue(s) with real queue(s) Don’t implement a queue in a database Guaranteed at least once delivery

  20. Hire more developers

  21. Split the team Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. Melvin Conway

  22. Embrace stack diversity .NET NodeJS Python PHP Ruby

  23. Redundant data centers West East Increase reliability Simplify disaster recovery Reduce response time

  24. Extract bounded context Microservices Microsites Shared datastore Anti-corruption layer

  25. Strangle the monolith Repeat extract context until no more than a single context remains behind

  26. Distributed system of record One bounded context is the system of record Others have local caches of relevant information used to make local decisions

  27. Implement async communication pattern Publish/Subscribe Leverage the queue for reliable delivery

  28. Implement blocking communication pattern Request/Response RESTful APIs Circuit breaker

  29. Orchestration and choreography Conductors direct orchestras Dancers in a ballet act independently

  30. Trade total complexity for local simplicity

  31. How long will it take?

  32. Questions? Dave Adsit Architect @ Pluralsight @davidadsit codeobsession.blogspot.com

Recommend


More recommend