More than ever, the aphorism on sharpening your axe[1] is true for Software Engineering. In my posts on working towards 100 PRs a day and my current AI workflow I touched on "Axe Sharpening" but wanted to dig into what that actually means.
This short is about an Axe Branch.
Given the amount of WIP I have, I use git worktrees (we have a custom tool, Slalom, to manage them automatically). The main root of the worktrees is my "Axe Branch". Over the day I tweak prompts, refine skills, and try them out on my worktree branches directly. When something works, I push it out to the other worktrees.
Every time I review a PR and notice the AI made a mistake I've seen before, I update the Axe branch and test it out. Sometimes via a merge, sometimes explicitly, sometimes by cherry-picking where it's needed.
Some things that belong on the axe:
-
Slalom. This is our custom tool that manages worktrees, gathers state (GitHub, Buildkite, etc.), provides managed previews, and deep links directly to VSCode/Zed. With a proliferation of AI threads, managing context is the hardest part, and Slalom does that for us.
-
CLAUDE.mdand context files. I treat these like living documentation that gets updated multiple times a day. -
Skills. Each time you find yourself doing a multi-step process repeatedly, wrap it in a skill. Look for skills you can combine. A deploy skill that also posts to Slack and runs smoke tests is worth more than three separate skills.
-
Guardrails. Pre-commit hooks, linting, local test runs. Anything that catches mistakes before they become a PR review cycle.
The greatest leverage is skills. You can tell Claude a thousand times to use your wrapped CLI command cli tsc and it'll revert to npm exec repeatedly. Instead, push this into a skill and build out skill-specific scripts. Layer up from there. The goal is skills that cover as much ground as possible. Sounds easy, but it's tricky in practice. I've hit a wall with reliable rebasing and that really makes compound skills difficult[2].
At Pyn we have an "Engineering Sync" each afternoon. This used to be for technical topics and blockers. Now it's pivoted to discussing Axe branch changes and sharing best practices.
Ideally the Axe Branch is my only "driving branch" where I'm actively coding and chatting interactively with Claude. I try to put half (!) my "active" coding into the Axe Branch and Slalom. I'll write about that in a future post.