You can't design software you don't work on
Limits of Generic Design Advice
- Many agree high-level principles and shared terminology are helpful for framing problems, but “the map is not the territory.”
- Several note the article itself becomes the kind of generic advice it criticizes and is tautological.
- Some argue foundational CS concepts (types, invariants, error handling, time/space tradeoffs, concurrency, information theory) change slowly; what churns is surface-level tools and patterns. Others counter that the “body of knowledge” about how to structure systems is huge, evolving, and context-dependent.
Architecture vs Implementation
- Strong support for the claim that you can’t effectively design features for a large, existing system without working in that system: real constraints are buried in code, data, and historical hacks.
- The “Amazon free samples” example is used to show how “simple” requirements explode into many edge cases that are hard to foresee upfront.
- Some push back: with enough prior experience building similar systems, you can design large applications without coding, especially for greenfield projects.
Is Software Engineering or Art?
- One view: because practices and trade-offs shift rapidly, software is more creative art than stable engineering, albeit with engineering-adjacent disciplines.
- Counterview: we do know how to build high-reliability systems (e.g., NASA style), but it’s too slow/expensive for most businesses, which optimize for “good enough” over “good.”
Role and Value of Architects / Analysts
- Many criticize “architects” who don’t code or read the code: they give buzzword-laden, unusable guidance or rubber-stamp designs produced by senior devs.
- Others defend a distinct architecture/analysis role focused on understanding business information flows and big-picture coherence, with programmers handling technical details.
- There’s nostalgia for systems analysts and careful upfront analysis in older industries (e.g., banking); start-up cultures tend to favor rapid experimentation instead.
Consistency vs “Good Design”
- The article’s line “consistency is more important than good design” is heavily debated.
- Pro-consistency camp: heterogeneous stacks and “cowboy” tech choices (e.g., one-off Redux sections, random frameworks) impose cognitive and maintenance costs; consistency improves onboarding, velocity, and allows fixing bug classes once.
- Skeptics argue that rigid consistency can entrench bad patterns, discourage incremental improvement (violating the Boy Scout rule), and push toward risky “boil the ocean” rewrites.
Domain Understanding and User Involvement
- Several stress you can’t design good systems without deep understanding of the business and users.
- Best results reportedly come when engineers are also active users, can directly see user issues, and have freedom to fix small problems opportunistically.
- Discussion touches on XP’s “customer on the team,” with caveats that real customers often don’t want to be involved; effective “customer proxies” are needed.
Organizational and Incentive Problems
- Commenters blame cheap, compliance-obsessed leadership for underinvesting in real architecture and refactoring time, leading to long-lived “Galactus”-style monstrosities.
- Short average tenure (≈2 years) limits developers’ holistic understanding; “architects” often become meeting-bound approvers rather than real designers.
- There’s also criticism of “Real Programmers” who optimize low-level details while resisting necessary business-driven change, creating complex but brittle systems.