







This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then d...
Software Design is Knowledge Building
The product of software development is not code but a mental model, a theory: a specific way of explaining the world.

You can't design software you don't work on
Only the engineers who work on a large software system can meaningfully participate in the design process. That’s because you cannot do good software design without an intimate understanding of the concrete details of the system. In other words, generic software design advice is typically useless for most practical software design problems.

Convivial design heuristics for software systems
The theme of this workshop is the proliferation of ideas about calling into question the cultural roots of our current programming languages, and the search for alternative paradigms with other cultural bases.
Technical dimensions of programming systems
Framework that captures the characteristics of programming systems, makes it possible to compare and better understand them and find interesting new points in their design space.

Laws of Software Engineering
A collection of principles and patterns that shape software systems, teams, and decisions.

Domain-Driven Design: Tackling Complexity in the Heart of Software
Domain-Driven Design fills that need. This is not a book about specific technologies. It offers readers a systematic approach to domain-driven design, presenting an extensive set of design best ...

Convivial Computing Salon #6: Convivial design heuristics for software systems
The mythical matched modules | Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications
Certified compilers are complex software systems. Like other large systems, they demand modular, extensible designs. While there has been progress in extensible metatheory mechanization, scaling extensibility and reuse to meet the demands of full ...


Principles for crafting software
My principles for deciding what to work on and how to build it.

Designing Systems | Atomic Design by Brad Frost
Learn how to create and maintain digital design systems, allowing your team to roll out higher quality, more consistent UIs faster than ever before.

Conway's Law | Laws of Software Engineering
Organizations design systems that mirror their own communication structure.

Exotic Programming Ideas, Part 1 (Module Systems) - Stephen Diehl
Personal blog of Stephen Diehl - Software engineer writing about technology, programming, and the future

Why design systems are a single point of failure
Tools and techniques to prevent design system collapse

Why embracing complexity is the real challenge in software today
In the midst of industry discussions about productivity and automation, it’s all too easy to overlook the importance of properly reckoning with complexity.
