How to make websites that will require lots of your time and energy
Dependencies, Reuse, and “Rolling Your Own”
- Many agree the problem isn’t dependencies themselves but using them indiscriminately for trivial tasks (“is-odd”-style packages).
- Some prefer vendoring tiny libs or reimplementing simple logic rather than pulling in full npm trees.
- Others point out that correctness in JavaScript edge cases and bad inputs can justify even small utilities, depending on how much you care about trash input.
Components, Templating, and PHP
- Simple copy‑paste HTML is defended for tiny sites, but others describe how it quickly becomes unmanageable when shared headers/nav bars change across many files.
- Lightweight templating (custom scripts, includes, nginx/Lua, bash/Python generators) is presented as a middle road between “just HTML” and full frameworks.
- PHP is praised as an underrated HTML preprocessor, but critiqued as becoming unmaintainable once inline logic grows beyond triviality.
Frameworks, Overengineering, and Motivation
- A recurring theme: frameworks and complex stacks often stem from overengineering, boredom, or resume/skill maintenance rather than need.
- Some deliberately avoid frameworks to keep things simple, then end up with small ad‑hoc “frameworks” anyway.
- Others argue frameworks (Astro, Svelte, Django, etc.) can be a huge productivity boost for non‑trivial sites, and that refusing them can be its own kind of dogma.
Build/Compilation Steps and TypeScript
- The article’s jab at “always requiring a compilation step” resonated as a joke about needless complexity.
- Several commenters defend compilation and TypeScript as essentially mandatory for large projects; using TS is framed as a practical, not fashionable, choice.
- Others prefer JSDoc or minimal build steps to avoid long‑term tooling churn and bitrot.
ORMs, SQL, and Performance vs Safety
- ORMs trigger a large, mixed debate: some complain about N+1 queries, bloated joins, and performance mysteries; others report years of success with mature ORMs (Django, EF, Ecto, etc.).
- Pro‑ORM arguments: safer defaults (avoiding SQL injection), easier migrations, schema evolution, type safety, and clearer data‑layer boundaries.
- Anti‑ORM arguments: hidden complexity, custom DSLs to learn, leaky abstractions for complex queries, and teams eventually fighting both ORM and database.
- Multiple people note that teams avoiding ORMs often reinvent worse, homegrown versions—or scatter raw SQL insecurely across the codebase.
Maintenance, Dependency Churn, and Security
- Frontend stacks (React/Next, CRA) are cited as particularly brittle: old projects become hard to update, with time spent fighting the toolchain instead of adding features.
- Some advocate pinning versions and updating cautiously; others highlight that pinned dependencies still become security liabilities and must eventually be replaced or patched.
Organizational and DevOps Complexity
- Commenters joke (and complain) about spinning up CI, platform teams, Terraform, Kubernetes, multi‑AZ clusters, etc. before a single page ships.
- Backend “anti‑patterns” listed include hand‑configured servers, no config management, no backups, unmanaged TLS certs, and noisy monitoring/alerts.
- Several threads suggest that much of modern complexity exists to justify roles or follow cargo‑culted “big company” practices, not actual project needs.