diff --git a/README.md b/README.md index d16f20d..9d7a3cb 100644 --- a/README.md +++ b/README.md @@ -101,17 +101,17 @@ All major workflows converge on the same architectural pattern: **Research → P - [Ralph Wiggum Loop](https://www.youtube.com/watch?v=eAtvoGlpeRU) [![Implemented](!/tags/implemented.svg)](https://github.com/shanraisshan/novel-llm-26) - [Andrej Karpathy (Founding Member, OpenAI) Workflow](https://x.com/karpathy/status/2015883857489522876) - [Peter Steinberger (Creator of OpenClaw) Workflow](https://youtu.be/8lF7HmQ_RgY?t=2582) -- Boris Cherny (Creator of Claude Code) Workflow — [13 Tips](tips/claude-boris-13-tips-03-jan-26.md) · [10 Tips](tips/claude-boris-10-tips-01-feb-26.md) · [12 Tips](tips/claude-boris-12-tips-12-feb-26.md) [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny) +- Boris Cherny (Creator of Claude Code) Workflow — [13 Tips](tips/claude-boris-13-tips-03-jan-26.md) · [10 Tips](tips/claude-boris-10-tips-01-feb-26.md) · [12 Tips](tips/claude-boris-12-tips-12-feb-26.md) · [2 Tips](tips/claude-boris-2-tips-25-mar-26.md) [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny)

section divider

-## 💡 TIPS AND TRICKS (84) +## 💡 TIPS AND TRICKS (86) 🚫👶 = do not babysit -[Prompting](#tips-prompting) · [Planning](#tips-planning) · [CLAUDE.md](#tips-claudemd) · [Agents](#tips-agents) · [Commands](#tips-commands) · [Skills](#tips-skills) · [Hooks](#tips-hooks) · [Workflows](#tips-workflows) · [Advanced](#tips-workflows-advanced) · [Debugging](#tips-debugging) · [Utilities](#tips-utilities) · [Daily](#tips-daily) +[Prompting](#tips-prompting) · [Planning](#tips-planning) · [CLAUDE.md](#tips-claudemd) · [Agents](#tips-agents) · [Commands](#tips-commands) · [Skills](#tips-skills) · [Hooks](#tips-hooks) · [Workflows](#tips-workflows) · [Advanced](#tips-workflows-advanced) · [Git / PR](#tips-git-pr) · [Debugging](#tips-debugging) · [Utilities](#tips-utilities) · [Daily](#tips-daily) ![Community](!/tags/community.svg) @@ -188,7 +188,7 @@ All major workflows converge on the same architectural pattern: **Research → P | route [permission requests](https://code.claude.com/docs/en/hooks) to Opus via a hook — let it scan for attacks and auto-approve safe ones 🚫👶 | [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny/status/2017742755737555434) | | use a [Stop hook](https://code.claude.com/docs/en/hooks) to nudge Claude to keep going or verify its work at the end of a turn | [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny/status/2021701059253874861) | -■ **Workflows (8)** +■ **Workflows (7)** | Tip | Source | |-----|--------| @@ -199,9 +199,8 @@ All major workflows converge on the same architectural pattern: **Research → P | use ultrathink keyword in prompts for [high effort reasoning](https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking#tips-and-best-practices) | | | [/rename](https://code.claude.com/docs/en/cli-reference) important sessions (e.g. [TODO - refactor task]) and [/resume](https://code.claude.com/docs/en/cli-reference) them later — label each instance when running multiple Claudes simultaneously | [![Cat](!/tags/cat-wu.svg)](https://every.to/podcast/how-to-use-claude-code-like-the-people-who-built-it) | | use [Esc Esc or /rewind](https://code.claude.com/docs/en/checkpointing) to undo when Claude goes off-track instead of trying to fix it in the same context | | -| commit often — try to commit at least once per hour, as soon as task is completed, commit | | -■ **Workflows Advanced (7)** +■ **Workflows Advanced (6)** | Tip | Source | |-----|--------| @@ -210,9 +209,18 @@ All major workflows converge on the same architectural pattern: **Research → P | use [Ralph Wiggum plugin](https://github.com/shanraisshan/novel-llm-26) for long-running autonomous tasks | [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny/status/2007179858435281082) | | [/permissions](https://code.claude.com/docs/en/permissions) with wildcard syntax (Bash(npm run *), Edit(/docs/**)) instead of dangerously-skip-permissions | [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny/status/2007179854077407667) | | [/sandbox](https://code.claude.com/docs/en/sandboxing) to reduce permission prompts with file and network isolation — 84% reduction internally | [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny/status/2021700506465579443) [![Cat](!/tags/cat-wu.svg)](https://creatoreconomy.so/p/inside-claude-code-how-an-ai-native-actually-works-cat-wu) | -| tag [@claude](https://github.com/apps/claude) on a coworker's PR to auto-generate lint rules for recurring review feedback — automate yourself out of code review 🚫👶 | [![Boris](!/tags/boris-cherny.svg)](https://youtu.be/julbw1JuAz0?t=2715) [![Video](!/tags/video.svg)](https://youtu.be/julbw1JuAz0?t=2715) | | invest in [product verification](https://code.claude.com/docs/en/skills) skills (signup-flow-driver, checkout-verifier) — worth spending a week to perfect | [![Thariq](!/tags/thariq.svg)](https://x.com/trq212/status/2033949937936085378) | +■ **Git / PR (5)** + +| Tip | Source | +|-----|--------| +| keep PRs small and focused — [p50 of 118 lines](tips/claude-boris-2-tips-25-mar-26.md) (141 PRs, 45K lines changed in a day), one feature per PR, easier to review and revert | [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny/status/2038552880018538749) | +| always [squash merge](tips/claude-boris-2-tips-25-mar-26.md) PRs — clean linear history, one commit per feature, easy git revert and git bisect | [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny/status/2038552880018538749) | +| commit often — try to commit at least once per hour, as soon as task is completed, commit | | +| tag [@claude](https://github.com/apps/claude) on a coworker's PR to auto-generate lint rules for recurring review feedback — automate yourself out of code review 🚫👶 | [![Boris](!/tags/boris-cherny.svg)](https://youtu.be/julbw1JuAz0?t=2715) [![Video](!/tags/video.svg)](https://youtu.be/julbw1JuAz0?t=2715) | +| use [/code-review](https://code.claude.com/docs/en/code-review) for multi-agent PR analysis — catches bugs, security vulnerabilities, and regressions before merge | [![Boris](!/tags/boris-cherny.svg)](https://x.com/bcherny/status/2031089411820228645) | + ■ **Debugging (7)** | Tip | Source | @@ -247,6 +255,7 @@ All major workflows converge on the same architectural pattern: **Research → P | Article / Tweet | Source | |-----------------|--------| +| [Squash Merging & PR Size Distribution (Boris) \| 25/Mar/26](tips/claude-boris-2-tips-25-mar-26.md) | [Tweet](https://x.com/bcherny/status/2038552880018538749) | | [Lessons from Building Claude Code: How We Use Skills (Thariq) \| 17/Mar/26](tips/claude-thariq-tips-17-mar-26.md) | [Article](https://x.com/trq212/status/2033949937936085378) | | [Code Review & Test Time Compute (Boris) \| 10/Mar/26](tips/claude-boris-2-tips-10-mar-26.md) | [Tweet](https://x.com/bcherny/status/2031089411820228645) | | /loop — schedule recurring tasks for up to 3 days (Boris) \| 07 Mar 2026 | [Tweet](https://x.com/bcherny/status/2030193932404150413) | diff --git a/tips/assets/boris-25-mar-26/1.png b/tips/assets/boris-25-mar-26/1.png new file mode 100644 index 0000000..bd2a5f4 Binary files /dev/null and b/tips/assets/boris-25-mar-26/1.png differ diff --git a/tips/assets/boris-25-mar-26/2.png b/tips/assets/boris-25-mar-26/2.png new file mode 100644 index 0000000..b586480 Binary files /dev/null and b/tips/assets/boris-25-mar-26/2.png differ diff --git a/tips/claude-boris-2-tips-25-mar-26.md b/tips/claude-boris-2-tips-25-mar-26.md new file mode 100644 index 0000000..44dee32 --- /dev/null +++ b/tips/claude-boris-2-tips-25-mar-26.md @@ -0,0 +1,48 @@ +# Squash Merging & PR Size Distribution — Tips from Boris Cherny + +A summary of insights shared by Boris Cherny ([@bcherny](https://x.com/bcherny)), creator of Claude Code, on March 25, 2026. + + + + + + +
← Back to Claude Code Best PracticeClaude
+ +--- + +## 1/ 266 Contributions in a Single Day — Always Squash + +Boris shared his GitHub contribution graph showing **266 contributions on March 24th** — from **141 PRs, always squashed** with a median of **118 lines** per PR. + +- Squash merging combines all branch commits into a single commit on the target branch — keeping history clean and linear +- Each PR = one commit makes it easy to revert entire features and simplifies `git bisect` +- At high-velocity AI-assisted workflows (141 PRs/day), squash is the pragmatic choice — individual "fix lint", "try this" commits within a branch are noise + +Boris Cherny — 266 contributions, always squashed + +--- + +## 2/ PR Size Distribution — Keep PRs Small + +Boris shared the size distribution across those 141 PRs, totaling **45,032 lines changed** (additions + deletions): + +| Metric | Lines (add+del) | Meaning | +|--------|---------------:|---------| +| **p50** | **118** | Median PR size — half of all PRs were 118 lines or fewer | +| p90 | 498 | 90% of PRs were under 500 lines | +| **p99** | **2,978** | Only ~1 PR exceeded ~3K lines | +| min | 2 | Smallest PR — a quick 2-line fix | +| max | 10,459 | Largest single PR — likely a migration or generated code | + +- A **median of 118 lines** means most PRs are focused and reviewable, even at 141 PRs/day +- The distribution is heavily right-skewed — the occasional large PR is inevitable (bulk renames, migrations), but the norm is tight +- Small PRs reduce merge conflict risk, are easier to review, and pair perfectly with squash merging for clean reverts + +Boris Cherny — PR size distribution table + +--- + +## Sources + +- [Boris Cherny (@bcherny) on X — March 25, 2026](https://x.com/bcherny)