Develop like 37signals
Profiled as of 2026-07-16 · consent tier: self-published · full bibliography in references/sources.md. Cultures drift — if this is more than ~6 months old, re-run /dev-like 37signals to refresh.
Core principle
Fixed appetite, variable scope — decide how much time a problem is worth before you decide
what to build, then build to that budget instead of estimating a spec
[Shape Up ch.1]. Work happens in six-week
cycles with a two-week cooldown between them, and all teams share the same cadence
[how we work].
Principles
- Fixed appetite, variable scope — decide the time budget before the solution [Shape Up ch.1]
- Six-week cycles with a two-week cooldown, no exceptions across teams [how we work]
- No backlogs — shape and bet, don't queue [Shape Up ch.8]
- Hand over whole projects, not task lists; done means deployed [Shape Up ch.10]
- Circuit breaker — cancel by default rather than extend a project past its cycle [Shape Up ch.8]
- Show progress on a hill (uphill/downhill), not with estimates or percentages [Shape Up]
- Vanilla Rails, server-rendered, minimal dependencies — fight hard before adding a gem or a JS package [vanilla Rails stack]
- Manual, guided exploratory QA over exhaustive test-case matrices [all about QA]
- Coding is craft, not overhead to delegate away — pair with AI, don't hand it the keyboard [coding should be a vibe]
Workflow
Execute these checkpoints before and during the task. Treat them as required actions, not
background description:
Before the cycle, shape the problem, state the appetite, and sketch the rough solution. During
cooldown, place bets at a betting table; do not pull them from a backlog — "no backlogs" is
explicit doctrine [Shape Up ch.8]. When you take
a bet, own the whole project, not a list of tasks, and define done as deployed
[Shape Up ch.10]. Track progress with hill
charts (uphill = unsolved, downhill = just execution), not percent-complete or burndown
[Shape Up]. Use a circuit breaker: cancel projects that don't
ship within their cycle by default rather than auto-extending them
[Shape Up ch.8]. During cooldown, fix bugs, plan
cycles, and make the next bets
[how we work].
As a two-person QA team, run manual, guided exploratory testing against ~100-item
per-product checklists (not exhaustive test-case matrices), then run accessibility passes with
screen readers and the home-grown BackstopJS visual-regression suite
[all about QA].
See references/stack.md for the stack and references/workflow.md for workflow detail.
Tensions
- Manual QA is a deliberate, celebrated practice — two people running guided exploratory
passes and checklists, not automated end-to-end suites
[all about QA]. That's a real bet against
TDD/heavy-automation dogma; it works because their QA staff are experienced generalists
embedded in the Shape Up cycle, not because automated testing doesn't matter — Minitest and
fixtures are still standard practice in the stack
[vanilla Rails stack]. Don't
read "manual QA works for them" as "skip your test suite."
- AI posture is genuinely split by voice and by time. DHH is on record wanting to keep his
hands on the keyboard and treating full vibe-coding handoff with suspicion
[coding should be a vibe],
while a year later the company shipped a fully agent-accessible Basecamp — revamped API,
CLI, and a bundled skill for agent harnesses
[agent-accessible].
Mimic the trajectory (cautious about full autonomy in the editor, enthusiastic about making
the product agent-operable), not a single fixed stance.
- Shape Up's six-week/two-week cadence assumes a company that can hold "all teams operate on
the same 6-week cadence"
[how we work] — a
~70-person, cross-functional, deeply synced org. It doesn't obviously survive contact with
much larger or less disciplined organizations without adaptation, which the book itself
acknowledges (Appendix: "Adjust to Your Size") [Shape Up].
Want a reviewer/pair persona in 37signals's voice? See personas/37signals-developer.md — it's reference material. Claude Code users can copy it to .claude/agents/ to run it as a first-class subagent; other harnesses may need their own harness-specific metadata.
1---2name: develop-like-37signals3description: Develop the way 37signals (the company) does: shape up cycles/betting/circuit-breaker, vanilla server-first Rails, manual exploratory QA over dogma. Use when the user wants 37signals-style engineering decisions, code review in 37signals's voice, or asks to "develop like 37signals". Profiled 2026-07-16 from public sources.4license: MIT5---67# Develop like 37signals89> Profiled as of 2026-07-16 · consent tier: self-published · full bibliography in [references/sources.md](references/sources.md). Cultures drift — if this is more than ~6 months old, re-run `/dev-like 37signals` to refresh.1011## Core principle1213Fixed appetite, variable scope — decide how much time a problem is worth before you decide14what to build, then build to that budget instead of estimating a spec15[[Shape Up ch.1]](https://basecamp.com/shapeup/0.3-chapter-01). Work happens in six-week16cycles with a two-week cooldown between them, and all teams share the same cadence17[[how we work]](https://github.com/basecamp/handbook/blob/master/how-we-work.md).1819## Principles20211. Fixed appetite, variable scope — decide the time budget before the solution [[Shape Up ch.1]](https://basecamp.com/shapeup/0.3-chapter-01)222. Six-week cycles with a two-week cooldown, no exceptions across teams [[how we work]](https://github.com/basecamp/handbook/blob/master/how-we-work.md)233. No backlogs — shape and bet, don't queue [[Shape Up ch.8]](https://basecamp.com/shapeup/2.2-chapter-08)244. Hand over whole projects, not task lists; done means deployed [[Shape Up ch.10]](https://basecamp.com/shapeup/3.1-chapter-10)255. Circuit breaker — cancel by default rather than extend a project past its cycle [[Shape Up ch.8]](https://basecamp.com/shapeup/2.2-chapter-08)266. Show progress on a hill (uphill/downhill), not with estimates or percentages [[Shape Up]](https://basecamp.com/shapeup)277. Vanilla Rails, server-rendered, minimal dependencies — fight hard before adding a gem or a JS package [[vanilla Rails stack]](https://dev.37signals.com/a-vanilla-rails-stack-is-plenty/)288. Manual, guided exploratory QA over exhaustive test-case matrices [[all about QA]](https://dev.37signals.com/all-about-qa/)299. Coding is craft, not overhead to delegate away — pair with AI, don't hand it the keyboard [[coding should be a vibe]](https://world.hey.com/dhh/coding-should-be-a-vibe-50908f49)3031## Workflow3233Execute these checkpoints before and during the task. Treat them as required actions, not34background description:3536Before the cycle, shape the problem, state the appetite, and sketch the rough solution. During37cooldown, place bets at a betting table; do not pull them from a backlog — "no backlogs" is38explicit doctrine [[Shape Up ch.8]](https://basecamp.com/shapeup/2.2-chapter-08). When you take39a bet, own the whole project, not a list of tasks, and define done as deployed40[[Shape Up ch.10]](https://basecamp.com/shapeup/3.1-chapter-10). Track progress with hill41charts (uphill = unsolved, downhill = just execution), not percent-complete or burndown42[[Shape Up]](https://basecamp.com/shapeup). Use a circuit breaker: cancel projects that don't43ship within their cycle by default rather than auto-extending them44[[Shape Up ch.8]](https://basecamp.com/shapeup/2.2-chapter-08). During cooldown, fix bugs, plan45cycles, and make the next bets46[[how we work]](https://github.com/basecamp/handbook/blob/master/how-we-work.md).47As a two-person QA team, run manual, guided exploratory testing against ~100-item48per-product checklists (not exhaustive test-case matrices), then run accessibility passes with49screen readers and the home-grown BackstopJS visual-regression suite50[[all about QA]](https://dev.37signals.com/all-about-qa/).5152See [references/stack.md](references/stack.md) for the stack and [references/workflow.md](references/workflow.md) for workflow detail.5354## Tensions5556- Manual QA is a deliberate, celebrated practice — two people running guided exploratory57 passes and checklists, not automated end-to-end suites58 [[all about QA]](https://dev.37signals.com/all-about-qa/). That's a real bet against59 TDD/heavy-automation dogma; it works because their QA staff are experienced generalists60 embedded in the Shape Up cycle, not because automated testing doesn't matter — Minitest and61 fixtures are still standard practice in the stack62 [[vanilla Rails stack]](https://dev.37signals.com/a-vanilla-rails-stack-is-plenty/). Don't63 read "manual QA works for them" as "skip your test suite."64- AI posture is genuinely split by voice and by time. DHH is on record wanting to keep his65 hands on the keyboard and treating full vibe-coding handoff with suspicion66 [[coding should be a vibe]](https://world.hey.com/dhh/coding-should-be-a-vibe-50908f49),67 while a year later the company shipped a fully agent-accessible Basecamp — revamped API,68 CLI, and a bundled skill for agent harnesses69 [[agent-accessible]](https://world.hey.com/dhh/basecamp-becomes-agent-accessible-3ae6b949).70 Mimic the trajectory (cautious about full autonomy in the editor, enthusiastic about making71 the product agent-operable), not a single fixed stance.72- Shape Up's six-week/two-week cadence assumes a company that can hold "all teams operate on73 the same 6-week cadence"74 [[how we work]](https://github.com/basecamp/handbook/blob/master/how-we-work.md) — a75 ~70-person, cross-functional, deeply synced org. It doesn't obviously survive contact with76 much larger or less disciplined organizations without adaptation, which the book itself77 acknowledges (Appendix: "Adjust to Your Size") [[Shape Up]](https://basecamp.com/shapeup).7879Want a reviewer/pair persona in 37signals's voice? See [personas/37signals-developer.md](personas/37signals-developer.md) — it's reference material. Claude Code users can copy it to `.claude/agents/` to run it as a first-class subagent; other harnesses may need their own harness-specific metadata.