Language Games • Eli Holderness • GOTO 2024

Explore how language shapes software development through translation layers, domain modeling, and communication principles. Learn to build shared understanding effectively.

Key takeaways
  • Communication is inherently complex due to translation layers between concepts in our heads and the signifiers we use to express them - we can never be certain others interpret things exactly as we intend

  • Context gives language meaning - shared understanding and context between communicating parties is crucial for effective communication

  • Domain-driven design helps bridge the gap between stakeholder concepts and computer implementation by building a shared language and understanding

  • Good communication requires following cooperative principles:

    • Be informative but not excessive (quantity)
    • Be truthful and accurate (truth)
    • Stay relevant (relevance)
    • Be clear and perspicuous (clarity)
  • When building software, multiple communication channels exist:

    • Between stakeholders and developers
    • Between developers and computers
    • Between developers themselves
  • Code is a language game with rules - when we write software, we’re creating new “house rules” on top of base programming language rules

  • Translation layers cause expensive mistakes when stakeholder concepts don’t align with computer implementation - important to identify and resolve these misalignments early

  • Clean, well-documented code matters because it serves as a communication channel between developers

  • Effective communication requires empathy and understanding of your audience’s context and perspective

  • Better communication can be achieved through:

    • Reusing existing context where possible
    • Being explicit about assumptions
    • Building shared language incrementally
    • Focusing on clarity over cleverness
    • Understanding translation layers involved