Pairing & Mob Sessions for Go Teams
Knowledge transfer patterns for idioms and concurrency.
Search across all documentation pages
Knowledge transfer patterns for idioms and concurrency.
Go idioms are learned through feedback loops on real code.
Structured pairing and mobbing compress months of trial-and-error into focused sessions that also spread review culture.
Pairing and mobbing are deliberate formats for sharing toolchain habits, error-handling patterns, and concurrency review judgment.
They complement reading paths and checklists with live explanation of why a reviewer would block a PR.
Short sessions with clear agendas outperform unstructured screen sharing.
Quick-reference recipe card - copy-paste ready.
## 90-minute onboarding pair (template)
1. (15m) Navigator walks module layout + CI README
2. (25m) Driver fixes one golangci-lint issue with navigator coaching
3. (25m) Joint read of one concurrent code path; run go test -race
4. (15m) Debrief: three idioms to apply + one PR to open before next session
5. (10m) Schedule next session + assign pre-read linkWhen to reach for this:
A team runs a weekly concurrency mob on a staging bug: elevated goroutine count after deploy.
// Mob examines this pattern together - driver shares screen
func (s *Service) poll(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-time.After(time.Second):
if err := s.tick(ctx); err != nil {
return err
}
}
}
}// Refactor outcome the mob aims for - ticker with defer Stop
func (s *Service) poll(ctx context.Context) error {
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-ticker.C:
if err := s.tick(ctx); err != nil {
return err
}
}
}
}What this demonstrates:
time.After in loops allocates timers; idiomatic fix uses NewTicker and Stop.go test -race before merging the fix.| Format | Duration | Best for |
|---|---|---|
| Onboarding pair | 60-90 min | Toolchain, first PR, godoc norms |
| Review pair | 30-45 min | Pre-submit review of author's PR |
| Concurrency mob | 60-120 min | Channels, mutex scope, errgroup |
| Incident replay mob | 45-90 min | pprof, logs, deploy correlation |
| API design mob | 60 min | Exported surface before coding |
// Pairing drill: table-driven subtest skeleton reviewers expect
func TestLimiter(t *testing.T) {
cases := []struct {
name string
n int
want int
}{
{"zero", 0, 0},
{"one", 1, 1},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
if got := Limiter(tc.n); got != tc.want {
t.Fatalf("got %d want %d", got, tc.want)
}
})
}
}Use drills like this when review feedback says "add cases" but the author has not seen exemplar tests in your repo.
-race during concurrency pairs - hires think green tests mean safe concurrency. Fix: make race run a session exit criterion.| Alternative | Use When | Don't Use When |
|---|---|---|
| Self-serve reading path | Hire needs quiet focus time | Concurrency or review culture is the gap |
| Formal classroom training | Large cohort onboarding same week | Team-specific repo layout matters |
| Async review only | Distributed time zones | Hire has not yet seen exemplar PR discussion |
| Agent-assisted solo work | Boilerplate tests and docs | Teaching judgment on API shape and safety |
Daily or every other day in weeks 1-2, then twice weekly until day 60. Reduce as review rework rate falls.
Three to five engineers. Above six, airtime per person drops unless you use strict rotation.
No. Pairing is learning; review is accountability. Paired code still goes through normal PR process.
IDE live share, screen share with driver control swap, or tuple-style pairing. Test audio before deep concurrency dives.
Track review rework rounds, time-to-first merge, and hire confidence surveys at 30 and 60 days.
Yes for replay after mitigation. Avoid live production edits during the mob unless incident commander approves.
Link one site page (for example Effective Go Reading Path block) and one exemplar merged PR per session theme.
Overlap 2-4 hours for real-time pairing; otherwise use review-pair async with recorded loom and written questions.
When hire passes items 13-18 on the 30/60/90 checklist with minimal rework, usually around day 45-60.
Optional for API design mobs. Skip routine implementation pairs unless they are contributing acceptance criteria.
Stack versions: This page was written for Go 1.26.x (Green Tea GC default, go fix modernizers - verify patch at build), chi (latest - verify at build), gin (latest - verify at build), echo (latest - verify at build), google.golang.org/grpc (latest - verify at build), sigs.k8s.io/controller-runtime (latest - verify at build), kubebuilder (latest - verify at build), tinygo (latest - verify board targets at build), wazero (latest - verify at build), and golangci-lint (latest - verify linter set at build).
Reviewed by Chris St. John·Last updated Jul 16, 2026