We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Embracing Complexity Entropy in Software Design Shivam Acharya and Peter Chai
Learn how to manage software complexity and entropy through better interfaces, architecture, and design patterns. Explore practical strategies for building maintainable systems at scale.
-
Entropy in software systems tends to increase over time through complexity, uncertainty and disorder, similar to thermodynamic systems
-
High entropy interfaces have more uncertainty and room for errors, while low entropy interfaces provide clear, controlled usage patterns and better safety
-
Moving complexity into the domain/implementation layer while maintaining simple interfaces helps manage entropy effectively
-
Feature flags and service-based architectures allow for better control over changes and reduce risk compared to library dependencies
-
Concrete types provide more safety and predictability than generic interfaces, though at the cost of some flexibility
-
Important to consider both visible complexity and “hidden” complexity when designing systems
-
Breaking changes into small, individually testable and deployable units helps manage complexity
-
Go’s simplicity, performance and developer ergonomics make it well-suited for managing complex systems
-
Validation should be enforced systematically rather than leaving it optional for consumers
-
Documentation and knowledge sharing become increasingly critical as systems grow in complexity and team size increases