Expert Talk: Scaling Down Complexity in Software • James Lewis & Kevlin Henney

Software design should simplify complexity by embracing fractal patterns, self-similarity, and flexibility, acknowledging change and discarding code to stay innovative and adaptable in an ever-evolving industry.

Key takeaways
  • Software design should be scaled down to be simplistic, easy to understand, and human-readable.
  • Complexity arises from the combination of multiple systems, and therefore, it’s essential to understand the domain and simplify the solution.
  • The author likens software design to fractals, where the same patterns are repeated at different scales and resolutions.
  • The concept of self-similarity is crucial in understanding the fractal nature of software design.
  • Complexity is inevitable, and it’s essential to acknowledge that things are not fixed and that change is a constant in software development.
  • The notion of “discarding” or “throwing away” code is essential, as it allows for the introduction of new ideas, and the disposal of outdated or redundant code.
  • Software architecture is a socio-technical construct, and we must recognize that it involves both technical and human aspects.
  • The author believes that we should strive for “high discardability” in software design, allowing for ease of modification and deletion of code.
  • He argues that many companies are struggling to keep up with the pace of change, and that we need to recognize that organizations move from value creation to innovation to maintenance.
  • The evolution of software design is tied to the evolution of human understanding, and we must acknowledge that our understanding of complexity is still developing.
  • The author emphasizes the importance of simplicity in software design, citing the need for easy-to-understand diagrams and models.
  • The concept of Conway’s Law is crucial in understanding the relationship between software architecture and the structure of the organization.