You Keep Using That Word • Sam Newman • GOTO 2024

Learn why terms like 'asynchronous' and 'synchronous' cause confusion in system design. Sam Newman explores precise terminology and patterns for better communication.

Key takeaways
  • Words like “asynchronous” and “synchronous” have multiple competing definitions, especially in the context of inter-process communication, leading to confusion and misunderstandings

  • Rather than using ambiguous terms, focus on describing specific behaviors and requirements:

    • Temporal coupling/decoupling
    • Blocking vs non-blocking
    • Latency requirements
    • Response handling needs
  • Brokers and intermediaries enable:

    • Temporal decoupling
    • Guaranteed message delivery
    • Parallel processing
    • Better scalability
    • Improved system robustness
  • Stateless processing is preferable to stateful processing for distributed systems:

    • Easier to scale
    • More resilient
    • Better suited for parallel operations
  • Context is crucial for effective communication about system design:

    • Define terms explicitly within your team
    • Focus on describing desired behaviors and outcomes
    • Use more precise terminology instead of overloaded terms
    • Consider the specific needs of your application
  • Non-blocking operations can improve performance but:

    • May still require waiting for responses
    • Don’t automatically solve all problems
    • Need to consider failure scenarios
    • Should match actual application requirements
  • Event-driven systems tend to be:

    • More loosely coupled
    • Better at handling scale
    • More complex to reason about
    • Harder to debug and maintain
  • When designing system interactions, consider:

    • Required response times
    • Failure scenarios
    • State management
    • Message delivery guarantees
    • User experience needs