Software Design Is Knowledge Building
Overall reception
- Many commenters find the piece accurate and resonant with real projects, especially the idea that software design’s main output is shared understanding, not just code.
- Some think the concrete “revive vs rewrite” example is overstated: a competent team could rebuild a modest system in under a year, which is a small cost at company scale.
- Others argue that such “dead systems” are common, and the essay captures why they are so hard to revive.
Design as knowledge / mental models
- Strong agreement that the core asset is the mental model that links domain → system behavior, not the code itself.
- Brook’s Law is cited as a consequence: new people are slow until they internalize that model.
- A system becomes “dead” when no one can meaningfully change it, even if it still runs and makes money.
Simplicity vs documentation
- Several argue that aggressively simple, clear code can enable smooth handoffs with very little documentation.
- A large opposing camp insists documentation is indispensable, especially for “why” decisions, assumptions, and history; “self-documenting code” is seen as a myth.
- Suggested practices: brief module/class headers, architecture decision records, PR/ticket context, tests as behavioral documentation.
- Disagreement over professionalism: some call skipping hard documentation “unprofessional,” others see avoiding unnecessary hard work as pragmatic.
Legacy systems, rewrites, and TCO
- Multiple stories of inheriting opaque systems: teams often wrap or reimplement rather than deeply understand them, leading to layers of indirection and duplication.
- Mixed experiences: in some cases rewrites underperform the original; in others, reviving old code succeeds when driven by strong engineers.
- Many note organizations badly underestimate total cost of ownership and maintenance, especially for non-core internal services and “unwanted children” nobody wants to own.
- Build-vs-buy is revisited: internal clones of SaaS often look cheaper short term but create long-term liabilities.
Requirements and domain knowledge
- Several stress that real engineering starts with requirements and domain understanding; many developers “don’t care until coding,” leading to poor systems.
- Requirements gathering is described as mutual discovery with stakeholders; ignoring it produces shallow or misaligned designs.
Knowledge sharing, tools, and LLMs
- Knowledge hoarding is reported as common; incentives rarely reward documentation or sharing.
- Existing tools (wikis, trackers) are viewed as clumsy; search is poor and content decays.
- Some see LLMs as promising for synthesizing and querying existing knowledge bases; skeptics argue they still lack the deep, contextual understanding the article says is essential and risk generating misleading “fake understanding.”