The GitHub repository "zakirullin/cognitive-load" focuses on the concept of cognitive load in software development. The README highlights that cognitive load is a fundamental human constraint referring to how much a developer needs to think to complete a task. Since developers spend more time reading and understanding code than writing it, it's critical to minimize cognitive load embedded in code. Key points covered: - Cognitive Load: The mental effort needed to understand code, with an average of about four chunks held in working memory simultaneously. - Types of Cognitive Load: - Intrinsic: inherent difficulty of the task, unavoidable. - Extraneous: caused by how information is presented, can be greatly reduced by design choices. - Principles to Reduce Cognitive Load: - Use meaningful intermediate variables to simplify complex conditions. - Prefer early returns over deeply nested conditionals for clear "happy path" logic. - Favor composition over deep inheritance hierarchies to avoid complexity explosions. - Avoid too many small, shallow modules; better to create fewer, deeper modules with simple interfaces (based on John K. Ousterhout’s philosophy). - Favor self-describing codes or error messages rather than numeric codes to lessen the need for memorization. - Avoid overusing DRY principle to prevent tight coupling and unnecessary abstractions. - Minimize tight coupling to frameworks to reduce onboarding effort and framework-related complexities. - Beware of layered architecture that induces indirection and cognitive overhead without practical payoff. Stick to simple architectures guided by dependency inversion and single source of truth principles. - Domain-driven design often misinterpreted; emphasizes problem space, not solution space, and can lead to subjective complexity. Team Topologies may provide clearer cognitive boundaries for teams. - Familiar Codebases: Familiarity doesn’t imply simplicity. Clever or non-idiomatic code imposes a learning penalty and raises cognitive load for new developers. Simplification requires deliberate effort. - The README includes references to concepts like Team Topologies, critiques of microservices, and real-world experiences emphasizing the importance of managing cognitive load over chasing trendy architectures or patterns. - Supported by endorsements and reflections from industry experts like Rob Pike, Andrej Karpathy, Elon Musk, and others, emphasizing cognitive load as a crucial, yet often neglected dimension in software engineering. Resources include links to translations and external articles. The repository also notes its license (CC-BY-4.0) and provides historical commit information. In summary, the repository advocates for simplicity in software design focused on reducing extraneous cognitive load to improve maintainability, knowledge transfer, and developer productivity. It provides practical examples, recommended principles, and insights into the detrimental effects of common an