Thoughtworks advice on Enterprise Software and Monoliths

Zhamak from Thoughtworks covers the latest thoughts on pluses and minuses of today's software infrastructure and also discusses the monolith.

Main Themes

  1. Decentralization
  2. Really understand your business needs (models)

Highlights

  • Bringing about change
    • Grassroots with support from exec level
    • Really understand the upcoming business needs
  • Drawbacks of centralized infrastructure (CD, Stage environments, etc)
    • Teams should own their own build pipeline and infrastructure 
    • Teams fork their own image of production
    • Kafka can become a bottleneck
      • Leave control of events to the individual domains/services
    • Same with API gateway
  • Testing
    • Decentralize: do NOT rely on integration tests (they become a bottleneck)
    • Use consumer-driven contract based testing instead
    • Focus on recovery (MTTR) instead of prevention
  • Security
    • Need to consider security earlier in the process rather than late rejections
    • Can no longer rely on a central security perimeter
    • Each microservice - validates and cannot trust
  • Monolith
    • High entropy
    • Start where it matters
      • Business needs - What is coming down the pipeline?
      • Social code analysis - what changes very often?
    • Evolutionary changes, not revolutionary
      • What is the smallest unit of change to get us closer to the goal
      • Don't leave multiple implementations: old and new 
    • Options
      • Rewriting selectively is many times the right approach
      • Break out what's most important
      • Facade with APIs/GraphQL (good start, but..)
        • Unfortunately, core functionality is still locked into the monolith
  • Data pipeline
  • Experimentation
    • Important when production costs are high
  • Consume first, build next
  • Observability (logging/tracing/etc) should be included from the start
    • Developers as the primary producers and consumers of Splunk, etc.