The Software Crisis
Existence and nature of a “software crisis”
- Some see no crisis: software is everywhere, mostly works, and it has never been easier to build powerful systems on rich APIs and tools. We’re in a “golden era”; constant over‑budget/late projects are just normal for many human endeavours.
- Others argue there is a crisis: pervasive low quality, bloat, brittleness, and user-hostile behavior. Problems are often hidden until users hit edge cases; “turn it off and on again” is viewed as symptomatic.
- A third group reframes it as primarily a project-management or economic crisis (feature factories, short-term incentives, lack of accountability), not a purely technical one.
Abstractions: necessity, overuse, and failure modes
- Broad agreement that abstraction is essential; without it, we’d still be bit‑twiddling.
- Disagreement over degree and kind:
- Critics argue we’ve stacked too many deep, leaky layers; imperfect abstractions force people to reason about multiple layers at once.
- Others counter that detail-eliding abstractions massively increase productivity; the problem is bad or mismatched abstractions, not abstraction itself.
- Debate over “perfect” abstractions: some say a perfect abstraction should never require dropping down a layer; others call that unrealistic and emphasize understanding implementation limits (SQL
EXPLAIN, sorting algorithms, etc.).
Complexity, human limits, and mental models
- Many see complexity as the true enemy. Even solo hobby projects become hard to hold in one head; modeling the whole system is often beyond human cognitive limits.
- There’s tension between:
- Building abstractions around users’ inaccurate but useful mental models to reduce friction.
- Insisting abstractions should closely reflect underlying reality; otherwise they are “lies” that break badly when users inevitably hit internals.
Economics, incentives, and organization
- Several comments blame incentives: cheap, fast, and “good enough” beats careful, durable software; costs are externalized to users and the future.
- Agile/Scrum is criticized for fragmenting work into tickets, discouraging holistic thinking, and pushing non-technical managers above technical staff. Others report positive agile experiences focused on trust and removing process.
- Comparisons are made to other engineering disciplines where physical constraints impose a hard minimum quality bar; software’s lack of such constraints allows fragile systems to ship and persist.
Alternatives, movements, and tools
- Handmade/permacomputing/retro movements are cited as countercultural responses, emphasizing shallow, composable abstractions (e.g., Unix-style pipelines).
- Some warn these can fetishize minimalism and neglect rich, integrated tools users actually want.
- There’s exploratory discussion of composable GUIs and shell/GUI hybrids as ways to regain Unix-like composability at higher layers.
Author participation and reception
- The author clarifies they’re not anti-abstraction, not advocating “more technical users,” but concerned about divergence between platform mastery and release cadence, and wants constraints on layering.
- Some readers are excited for follow-ups; others criticize the tone as overconfident and the essay’s structure as muddled.