good enough architecture
play

Good Enough Architecture Stefan Tilkov stefan.tilkov@innoq.com - PowerPoint PPT Presentation

GOTO Berlin 2019 Good Enough Architecture Stefan Tilkov stefan.tilkov@innoq.com @stilkov "Tegel Airport TXL Berlin May 2012 - 19" by andynash is licensed under CC BY-SA 2.0 (Software) Architecture De f initions Fundamental


  1. GOTO Berlin 2019 “Good Enough” Architecture Stefan Tilkov stefan.tilkov@innoq.com @stilkov "Tegel Airport TXL Berlin May 2012 - 19" by andynash is licensed under CC BY-SA 2.0

  2. (Software) Architecture De f initions Fundamental concepts or properties of a system in its environment embodied in its elements, relationships, and in the Whatever the architect principles of its design and considers important enough evolution (ISO 42010) to merit their attention Architecture represents the signi f icant design decisions that shape a system, where signi f icant is measured by cost of change (Grady Booch) @stilkov

  3. Architecture is not an upfront activity performed by somebody in charge of telling everyone else what to do @stilkov

  4. Architecture is a property of a system, not a description of its intended design @stilkov

  5. Pick the best car:

  6. Quality https:/ /iso25000.com/index.php/en/iso-25000-standards/iso-25010 @stilkov

  7. Scaling Dimensions Facebook half of the Net f lix Amazon planet Twitter Insurance Load Policy Management Random CMS a dozen users written in depends on Logic a day German tax law

  8. There is no “good” or “bad” architecture without context; architecture needs to take speci f ic quality attributes into account @stilkov

  9. Cases

  10. Context: • … Observation(s): • … Lesson(s) learned: • … @stilkov

  11. #1: Non-extensible Extensibility

  12. Context • E-Commerce (retail) provider • Global customer base • Catalog/CMS/Shop/Ful f illment • Multi-tenant • Highly customizable @stilkov

  13. (Acceptable) 
 Cost High Large customers 
 (“strategic”) The Solution Small customers 
 (“long tail”) Low Customization 
 (Need) Specific General @stilkov

  14. If your design attempts to satisfy everyone, you’ll likely end up satisfying no one @stilkov

  15. Highly speci f ic code is often preferable to sophisticated con f iguration @stilkov

  16. #2: Perilously f ine-grained

  17. Context • Large-scale B2B food retailer • New company-wide shop and logistics system • >200 developers @stilkov

  18. Team 2 Team 1 Team 3 @stilkov

  19. Checkout Support Ful f illment Billing Order Service @stilkov

  20. Why would you cut up your system into tiny, distributed, hard-to- manage fragments?

  21. Everybody wants to be Net f lix, but nobody is @stilkov

  22. @stilkov

  23. … @stilkov

  24. Checkout Support Ful f illment Billing Order Service @stilkov

  25. Checkout Support Ful f illment Billing Order Service @stilkov

  26. Lessons learned • Small is not always beautiful • Refactoring within team boundaries much easier than globally • Ignore organizational parameters at your own risk @stilkov

  27. #3: Your system WILL be dynamic

  28. Context • Large-scale insurance system • Model-driven development • > 100 developers • 2 Releases/year @stilkov

  29. 0 1 2 3 4 5 6 Vision Business Concept Technical Concept Modeling Modeling Implementation Module Test What if you Integration Test miss your slot? Rollout @stilkov

  30. Policy - id * - value - dueDate New Name Release Clause Model Name Description * (Meaning) Introduced - text - validity - taxClass taxClass regionCode … 10.3 regionCode Holder - name … - address - status @stilkov

  31. Lessons learned • Centralized responsibility hurts • Faced with too much rigidity, a way around the rules will be found • Just because you’re used to it doesn’t mean it’s acceptable @stilkov

  32. #4: Free-style architecture

  33. Context • E-Commerce/Online shop (Retail) • 100-120 developers • ~10 self-contained teams @stilkov

  34. strength of decoupling systems μ services components modules methods number of developers @stilkov

  35. From a layered system … UI Module Module Module Logic Data System @stilkov

  36. … to a system of systems UI UI UI Logic Logic Logic Data Data Data System System System @stilkov

  37. In-page Cross-page JavaScript method calls Links & redirects Shared abstractions & frameworks Micro-architecture Common language runtime HTTP HTML 5 JS platform Standard Browser @stilkov

  38. But … • Lack of standardization led to inef f icient UI integration at runtime • Vast differences in API style, formats, documentation created needless extra work • Despite no centralised frontend, a central frontend team created a new bottle neck @stilkov

  39. You cannot decide to not have an architecture; if you don’t actively create it, be prepared to deal with the one that emerges @stilkov

  40. There’s a f ine line between diversity (that adds value) and chaos (that doesn’t) @stilkov

  41. Extremely loose coupling requires very few rules, but they need to be enforced strictly @stilkov

  42. #5: Cancerous Growth

  43. Context • Financial services provider with independent brokers as clients • ~30 developers • 20 years of company history @stilkov

  44. Oracle Forms App Oracle DB @stilkov

  45. Java/JSP Web App Lots of PL/SQL Oracle DB @stilkov

  46. .NET Web .NET Web Service .NET Web Java/JSP Service Service Web App .NET Web Service Lots of PL/SQL Oracle DB @stilkov

  47. Company A Company B .NET Web .NET Web .NET Web Service .NET Web .NET Web Java/JSP Service .NET Web Java/JSP Service Service Service .NET Web Web App Service Web App .NET Web Service Service Lots of Lots of PL/SQL PL/SQL Oracle DB Oracle DB @stilkov

  48. Company A Company B .NET Web .NET Web .NET Web Service .NET Web .NET Web Java/JSP Service .NET Web Java/JSP Service Service Service .NET Web Web App Service Web App .NET Web Service Service Lots of Lots of PL/SQL PL/SQL Oracle DB @stilkov

  49. Company A Company B .NET Web .NET Web .NET Web Service .NET Web .NET Web Java/JSP Service .NET Web Java/JSP Service Service Service .NET Web Web App Service Web App .NET Web Service Service Couch/Pouch Mongo Oracle DB Mongo MySQL @stilkov

  50. Company A Company B C++ Encryption Lib .NET Web .NET Web .NET Web Service .NET Web .NET Web Java/JSP Service .NET Web Java/JSP Service Service Service .NET Web Web App Service Web App .NET Web Service Service Couch/Pouch Mongo Oracle DB Mongo MySQL @stilkov

  51. Lessons learned • Successful systems often end up the worst architecture • Unmanaged evolution will lead to complete chaos • Don’t be afraid of some light architectural governance @stilkov

  52. #6: Improve with less intelligence

  53. Context • Bank with multiple CotS systems • Highly proprietary integration solution phased out by vendor • Project launched to replace commercial product with open source solution @stilkov

  54. Other External Group Partner Company Custom Custom App App Magical Integration CotS Custom Broker App DB CotS External Parent Partner Company @stilkov

  55. Other External Group Partner Magical Integration Broker Company Custom Custom Routing App App Conversion Transformation Magical Integration Transcoding CotS Custom Broker Transport App Error handling Business logic DB CotS … External Parent Partner Company @stilkov

  56. Other External Group Partner Company Custom Custom App App Pub/Sub Messaging CotS Custom App DB CotS External Parent Partner Company @stilkov

  57. Other External Group Partner Company Custom Custom App App Pub Sub Messaging Adapter (Docker Container) Pub/Sub routing Pub/Sub Messaging CotS Custom Transport App Conversion Error handling Transformation Transcoding DB CotS Error handling External Parent Business logic Partner Company @stilkov

  58. Lessons learned • Smart endpoints, dumb pipes (cf. Jim Webber) • Value of speci f ic over generic solutions • Micro architecture with blueprints @stilkov

  59. Takeaways

  60. 1. Don’t be afraid of architecture @stilkov

  61. 2. Choose the simplest thing that will work @stilkov

  62. 3. Create evolvable structures @stilkov

  63. 4. Manage your system’s architectural evolution @stilkov

  64. 5. Don’t build road blocks – create value and get out of the way @stilkov

  65. @stilkov That’s all I have. Stefan Tilkov @stilkov Thanks for listening! stefan.tilkov@innoq.com Phone: +49 170 471 2625 innoQ Deutschland GmbH innoQ Schweiz GmbH Krischerstr. 100 Ohlauer Straße 43 Ludwigstr. 180E Kreuzstraße 16 Gewerbestr. 11 40789 Monheim am Rhein 10999 Berlin 63067 Offenbach 80331 München CH-6330 Cham Germany Germany Germany Germany Switzerland www.innoq.com Phone: +49 2173 3366-0 Phone: +49 2173 3366-0 Phone: +49 2173 3366-0 Phone: +49 2173 3366-0 Phone: +41 41 743 0116 @stilkov

Recommend


More recommend