Free Online Toolbox for developers

Branching strategies that work for small teams shipping weekly

Shipping every single week with a team of four should be simple.

Somehow it never is.

Branches stack up. Merge conflicts emerge mysteriously. Someone force-pushes Friday afternoon and the main branch is red for the weekend.

The problem is: many branching models have been designed around very large organisations releasing quarterly. Teams that are shipping weekly are much lighter.

Get your branching strategy right and you get:

  • Fewer merge conflicts
  • Faster code reviews
  • A main branch that’s always ready to deploy

Get it wrong and you’ll spend more time untangling Git than writing code.

Here’s how to do it properly…

What you’ll walk away with:

  1. Why Heavy Branching Models Break Small Teams
  1. The 3x Branching Strategies That Actually Work
  1. How An Interactive Rebase GUI Keeps History Clean
  1. The Weekly Shipping Rules Worth Stealing

Why heavy branching models break small teams

Git Flow was the industry standard for ages. Develop branch, release branches, hotfix branches, feature branches… it all looks great on a whiteboard.

For a team of 3-8 people shipping weekly? It’s overkill.

Each additional branch is another place for code to become stale. Stale code is what makes merges so painful. When your feature branch sits for three weeks, main has moved on without you. By merge time, nobody is merging code, they’re doing archaeology.

Short-lived branches and readable history are winning strategies for small teams. That requires squashing pointless commits, restructuring work into logical segments and deleting “fix typo” commits before they’re ever reviewed. It can be fiddly doing all that from the terminal. That’s why many developers prefer an interactive rebase gui. The most popular Git GUI tools allow you to drag/reorder, squash and reword commits visually before you ever open a pull request. Same tidy history. Fewer mistakes.

Sounds trivial. But it’s not. Nearly 93% of developers use Git, so the workflow around it is quietly one of the largest leverage points available to a small team.

The 3x branching strategies that actually work

Choose only three. Commit to them for a semester, then re-evaluate.

Trunk-based development

Everyone commits to main. Branches live for hours, not days.

Basically: you take master, make a quick update, create a pull request and merge that day. Incomplete work is behind a feature flag.

Sounds reckless. It’s not. This is how teams who release multiple times per day think about what they do — and they’re still a fairly exclusive club. Only 16.2% of teams deploy on demand, while almost a quarter deploy less than once per month.

Trunk-based works best when you have:

  • Solid automated tests
  • Fast CI (under 10 minutes)
  • Feature flags for anything half-built

Avoid teams with fragile test coverage. Trunk-based development without a safety net is chaos with tooling.

Short-lived feature branches

This is the sweet spot for most weekly shippers.

One branch per task. Named clearly. Merged within two or three days. Then deleted.

The secret sauce is a strict maximum on branch age. Older than 72 hours? Either merge it behind a flag or shatter it into pieces. No exceptions.

Why? Because merge pain scales exponentially. A two-day branch is worth five minutes to merge. A two-week branch is an afternoon.

Rebase onto main every morning so that you get conflicts one at a time rather than all at once on merge day. Interactive rebase gui makes that a two-click process and keeps your final pull request clean enough to actually review.

The release branch (Use it sparingly)

Teams that legitimately require one. Mobile apps pending store approval. Enterprise customers locked into specific upgrade cycles. Any situation involving some form of certification step.

If that’s the case, create a release branch from main on shipping date, fix any bugs on the release branch and merge those bug fixes back into main directly.

Just don’t keep it alive. A release branch that never dies gradually turns into a second main branch – and you now have two truths.

Keeping history clean with an interactive rebase GUI

Clean history isn’t vanity. It’s how a small team debugs fast.

If production breaks on Tuesday, thirty seconds with a readable commit log tells you what changed and why. A log littered with “wip”, “wip 2”, “actually fix it this time” tells you nothing.

Before opening a pull request, run through this:

  • Squash related commits into one logical change
  • Reword messages so they explain the why, not the what
  • Drop debugging commits entirely
  • Reorder commits so the change reads like a story

Rebasing by hand requires remembering rebase commands and hoping you don’t typo the commit order. An interactive rebase gui shows you every commit and allows you to reorder them. Plus it warns you before performing destructive actions.

Handy, when the alternative is a mangled branch at 6pm.

One rule though: Only rebase branches that nobody else is working from. Rewriting history that others depend on is the quickest way to become public enemy number one in the eyes of your teammates.

The weekly shipping rules that keep main green

Strategy is only half of the battle. Habits like these keep a weekly cadence routine.

Require protection on main branch. Passing build + one review. Two approvals with a four member team just makes line.

Limit pull request size. Over ~400 lines, reviews suffer. Skimming occurs. Bugs are missed. Pull requests stagnate for days.

Ship it. On a boring day. Tuesday or Wednesday. Nobody wants to rollback a Friday deploy.

Delete branches once they are merged. When there are 40 dead branches, you can’t see what’s flying.

Tag every release. When things break you want to diff two tags, not two dates.

None of this is complicated. In fact that’s sort of the point — small teams don’t need smart process, they need process that can get through a hectic week.

Locking it all in

Weekly shipping isn’t enabled by some sexy branching model. It’s enabled by smaller branches, quicker merges and a history readable six months down the road.

A quick recap:

  • Keep branches under 72 hours old
  • Use trunk-based or short-lived feature branches — skip Git Flow
  • Rebase onto main daily so conflicts stay small
  • Tidy commits with an interactive rebase gui before review
  • Protect main, cap PR size, delete branches after merge

Firstly, start with branch age limit. This one change eliminates more problems than any other and doesn’t cost anything except discipline.




Suggested Reads

Leave a Reply