Everything from

martinfowler.com

9 resources from martinfowler.com we point founders to, and the questions each answers.

📄 Article
✓ Link checked Free Intermediate

Why we picked it If Spolsky tells you not to rewrite from scratch, this gives you the alternative: replace the old thing piece by piece while it keeps running, so you never take a big-bang risk. Fowler's strangler fig metaphor (a new system grows around the old one until it can stand alone) is the practical middle path between suffering the MVP and blowing it all up. A good next read once you have decided some part genuinely needs replacing.

Strangler Fig Application

From martinfowler.com by Martin Fowler ~8 min read

  • You can modernize a system incrementally by building new features alongside the legacy code and gradually routing traffic away from the old path, instead of a risky all-at-once cutover.
  • Investment and returns arrive gradually and visibly, so you can stop, ship, or change course at any point rather than betting everything on one launch.
  • A facade or proxy in front of old and new lets you shift functionality over piece by piece while the product stays live for users.
Open martinfowler.com
✍️ Essay
✓ Link checked Free Intermediate

Why we picked it This is the canonical explanation of what a reviewer actually means when they flag your inherited code as risky. Fowler frames messy code as debt you pay interest on: every future feature gets slower, which is the real cost you inherit from a rushed agency build. Read it to understand why a reviewer separates crufty-but-stable code (leave it) from cruft in code you touch often (fix it), so you can read a review report with judgment instead of panic.

Technical Debt

From martinfowler.com by Martin Fowler About a 10 minute read

  • Technical debt is not about ugly code, it is about the extra time every future change costs you.
  • A reviewer prioritizes cruft in frequently changed areas, and often leaves stable messy code alone.
  • The deliberate versus reckless, prudent versus inadvertent quadrant helps you judge how worried to actually be.
Open martinfowler.com
✍️ Essay
✓ Link checked Free Beginner

Why we picked it This is the canonical framing for exactly your question: not all messy code is the same. Fowler splits debt on two axes, whether you took it on deliberately or by accident, and whether the call was prudent or reckless. For a two-person team shipping fast, the useful cell is deliberate and prudent: you know you cut a corner, you thought about the payoff, and you plan to come back. That is a healthy place to be, and this piece gives you the language to tell it apart from the reckless kind that actually hurts.

Technical Debt Quadrant

From martinfowler.com by Martin Fowler About a 5 minute read

  • Debt taken on deliberately and prudently (a conscious shortcut with a payoff in mind) is fine, and often smart, when you are racing to ship.
  • The debt to fear is the reckless kind: messy code from not knowing better, or knowingly cutting corners you cannot afford. That is the interest that compounds.
  • Some debt is inadvertent and prudent, you only learn the right design after building it. That is unavoidable and not a failure, so do not beat yourselves up over it.
Open martinfowler.com
📄 Article
✓ Link checked Free Intermediate

Why we picked it For the refactoring half of your question, Fowler explains why building for imagined future needs usually costs more than it saves. He carefully separates real over-engineering from healthy refactoring, so you can tell craft from gold-plating in your own codebase. A precise, engineer-to-engineer read.

Yagni (You Aren't Gonna Need It)

From martinfowler.com by Martin Fowler 10 min read

  • Do not build capability for a future you have not validated.
  • Presumptive features carry build, carry, and repair costs.
  • Refactoring for changeability is fine, speculative features are not.
Open martinfowler.com
📖 Book
✓ Link checked Paid Intermediate

Why we picked it The canonical case that you can reshape a system in safe, small steps rather than one dramatic rewrite. Fowler shows how to change structure without changing behavior, backed by tests, so quality improves while the product keeps shipping. This is the discipline that makes the incremental path actually work in practice.

Refactoring: Improving the Design of Existing Code (2nd Edition)

From martinfowler.com by Martin Fowler 448 pages

  • Improve design in small behavior-preserving steps
  • Tests are what make continuous refactoring safe
  • You can keep shipping while the codebase gets healthier
Open martinfowler.com
📄 Article
✓ Link checked Free Advanced

Why we picked it This lays out when accumulated shortcuts actually start slowing a growing company down, versus when they are just cosmetic. It gives you language to tell your co-founder the difference between debt that is costing you real velocity and debt that is only annoying. Use it to pressure test whether your no-code setup is genuinely blocking growth.

Bottlenecks of Scaleups: Tech Debt

From martinfowler.com by Tim Cochran and Carl Nygard 20 min read

  • Measure tech debt by the velocity it costs, not by how ugly it looks
  • Debt only matters once it blocks a thing you are trying to do now
  • Address the specific bottleneck rather than rebuilding everything
Open martinfowler.com
📄 Article
✓ Link checked Free Intermediate

Why we picked it This answers the exact fear behind your question: does keeping code clean slow you down? Fowler separates internal quality (architecture users never see) from external quality, and argues that good internal quality pays for itself within weeks, not years. It is the economic case for keeping the parts you touch weekly clean.

Is High Quality Software Worth the Cost?

From martinfowler.com by Martin Fowler

  • Users cannot see internal quality, but it decides your future speed
  • Low internal quality feels faster at first, then flattens fast
  • Clean code you touch often pays back in weeks, not years
Open martinfowler.com
📄 Article
✓ Link checked Free Intermediate

Why we picked it Flags let you merge and deploy unfinished or risky work while keeping it switched off, so you avoid long lived branches and can turn a bad feature off without a redeploy. That is a cheap safety net that fits two people and removes a lot of the fear that pushes founders toward heavy process. This piece covers the useful patterns and the ones that create mess later.

Feature Toggles (aka Feature Flags)

From martinfowler.com by Pete Hodgson 30 min read

  • A flag decouples deploying code from releasing a feature
  • A kill switch is a rollback you can flip in seconds
  • Remove stale flags so they do not become permanent debt
Open martinfowler.com
📄 Article
✓ Link checked Free Intermediate

Why we picked it Once a second person is committing, the first real risk is two branches drifting apart, and this essay explains the one habit that prevents it: integrate to a shared main every day with automated checks. It is arguably the single highest value practice to adopt at the first hire. Read it to understand why short lived branches and a green build matter more than elaborate approval flows.

Continuous Integration

From martinfowler.com by Martin Fowler 30 min read

  • Merge to a shared main at least daily to avoid painful integrations
  • Every integration should trigger an automated build and tests
  • Keep the build green so main is always safe to ship
Open martinfowler.com
eChai Partner Brands