Fear makes you a worse programmer (2014)

Org culture, fear, and incentives

  • One org with “meritocracy” and harsh performance reviews created pervasive fear: people avoided risky projects, gamed status reports, and big initiatives quietly failed.
  • Wrong metrics and compensation led to defensive behavior and “metrics gamification,” not better outcomes.
  • Some describe abusive managers / environments where fear and information gatekeeping caused burnout and self‑blame.

Tests, coverage, and fear of refactoring

  • Multiple commenters agree: good tests can make refactoring and big changes feel safe; bad tests make things brittle.
  • High coverage (95–99%) is not sufficient and can coexist with fragile systems.
  • Coverage mandates from management are widely criticized for incentivizing useless tests and “busy work.”

Integration vs unit tests; what to test

  • Strong consensus that high‑value tests are at stable boundaries: public APIs, CLIs, RPCs, microservice contracts, DB behavior.
  • Many criticize fine‑grained unit tests with heavy mocking as brittle, low‑value, and obstructive to refactoring.
  • Several advocate:
    • Real DBs / external services in tests (often via containers or test harnesses).
    • Property‑based testing and fuzzing for robustness.
    • Fewer but higher‑level tests that let internals change freely.

Fear, risk, and responsibility

  • One side: fear of breaking prod, losing data, or harming users is healthy; it drives careful thinking, testing, and logging.
  • Others stress distinction between “caution” and “paralyzing fear”; fear that blocks change causes code rot.
  • Some argue engineers today lean too cavalierly on rollbacks, tests, and “move fast,” underestimating real user harm.

Being set up to fail and vague projects

  • Several recount projects with unclear goals, inadequate support, or impossible tasks (legacy hell, unmaintainable code, huge ports).
  • These experiences created dread, burnout, and a sense of failure, especially early in careers.
  • Senior engineers sometimes enjoy rescuing such projects by reframing the problem and talking directly to stakeholders—when the environment allows it.

Languages, types, and reducing fear

  • Strong typing and modern languages (Haskell, Rust, Kotlin, etc.) are praised for removing classes of bugs and making changes more fearless with fewer tests.
  • Some suggest “confident programming”: fail fast and loudly (e.g., panics on impossible states) instead of elaborate, fearful error‑handling paths.