Why do we keep gravitating toward complexity?
Motivations for Complexity
- Status, ego, and identity: complex systems can signal intelligence, pad CVs, and create job security (“only I understand this”).
- Dopamine and boredom: solving intricate problems feels good; bored developers add complexity to make work interesting.
- Enjoyment of “well‑arranged complexity”: some people derive the same pleasure from intricate systems that others get from art or comfort.
- Resume and fashion: teams copy big-company stacks (React, Kubernetes, etc.) to feel modern and employable, even when overkill.
Accidental and Structural Sources
- Prototypes shipped as products: early “just make it work” code is never redesigned; layers of patches accumulate.
- Local fixes vs redesign: it’s cheaper to “add one more check” than to revisit top-level abstractions; entropy wins.
- Conway’s Law and org design: arbitrary team boundaries and business constraints produce fractured, complex architectures.
- Lack of visibility and pricing: software complexity is invisible and often doesn’t show up as clear per-unit cost, unlike in hardware.
Simplicity Is Hard Work
- Many argue simplicity is more difficult: it requires deep domain understanding, iterative exploration, refactoring, and saying “no” to features and tools.
- Good design often looks trivial from the outside, so its value is under-rewarded compared to visibly complex work.
- True skill is matching solution complexity to problem complexity (e.g., identity systems legitimately need messy logic; many CRUD apps don’t).
React vs “Sprinkled JavaScript”
- One camp agrees with the article: React-style stacks introduce unnecessary concepts (state soup, build pipelines) for simple pages; modern browser APIs and “just HTML+JS” are often enough.
- The opposing camp counters:
- Frameworks reduce developer complexity for nontrivial, changing apps (state, routing, CI/CD, modularity, large teams).
- Ad‑hoc “sprinkles” tend to devolve into unstructured, harder-to-maintain code; you end up reinventing a worse React.
- Tool internals may be complex, but usage can be simple—like vending machines or power tools.
- Some criticize the article for lacking concrete misuse examples and for underestimating current browser/JS realities; others think it rightly calls out using React for static sites.
Pyramids and Inevitability
- Pyramids analogy sparks debate:
- Supporters: they had a single, immutable purpose; software changes constantly, so complexity is inevitable.
- Others focus on purpose: pyramids show that large “complex” undertakings can be justified if the goal is clear, unlike purposeless architectural pyramids in code.
- Several point out that long-lived systems will accrete complexity; the key is stewardship, not fantasy about a forever-simple codebase.