Facilitate effective pair and mob programming sessions including role rotation, session structure, and knowledge transfer practices.
"Two minds on one problem beats two people on two problems."
Invoked when facilitating pair programming or mob programming sessions — defining driver/navigator roles, structuring session flow, managing rotations, and ensuring effective knowledge transfer. Applies to both real-time co-located sessions and remote collaboration via shared editors or screen sharing.
Steps:
Steps:
Co-authored-by: Name <email>.Steps:
Steps:
| Parameter | Type | Required | Description |
|---|---|---|---|
task_description | string | yes | The specific task or problem to work on |
participants | string[] | yes | Names/handles of all participants |
pairing_style | string | no | driver-navigator, ping-pong, strong-style, mob |
session_duration | integer | no | Session length in minutes (default: 60) |
| Field | Type | Description |
|---|---|---|
session_summary | string | What was accomplished during the session |
learnings | string[] | Key knowledge transfers and insights |
follow_ups | string[] | Tasks or issues to address after the session |
commits | string[] | Commits made with co-authorship attribution |
code-review)git-workflow)task-decomposition)Co-authored-by trailers for all active participants.| Situation | Action |
|---|---|
| Two participants, similar skill level | Use ping-pong (TDD) style for balanced contribution |
| Significant skill gap (senior + junior) | Use strong-style pairing; senior navigates, junior drives |
| Onboarding a new team member | Senior drives first to demonstrate patterns, then swap to let new member practice |
| 3–5 participants available | Switch to mob programming with 10-minute rotations |
| Complex architectural decision needed | Navigator role focuses on design; driver implements spikes |
| Task is well-understood and routine | Pair may be unnecessary; suggest solo work with async review instead |
| Session exceeds 60 minutes | Enforce a 10-minute break; reassess whether to continue or schedule follow-up |
| Disagreement on approach during session | Timebox 5 minutes to discuss, then try the navigator's approach; revisit if it fails |
| Remote participant has high latency (> 200ms) | Switch to async ping-pong via commits instead of real-time shared editing |
| Failure | Symptom | Mitigation |
|---|---|---|
| Driver-dominance | One person types the entire session; navigator disengages | Enforce rotation timer; facilitator calls role swaps proactively |
| Backseat driving | Navigator takes over the keyboard or dictates keystrokes | Remind navigator to communicate at the highest abstraction the driver can handle |
| Unfocused session | Pair goes down tangents; session ends with no commits | Define a concrete goal upfront; park tangents in a TODO list |
| Tool friction | 15+ minutes spent configuring Live Share or screen sharing | Pre-validate tooling before the session; have a fallback (e.g., screen share if Live Share fails) |
| Skill gap frustration | Junior feels overwhelmed; senior feels slowed down | Switch to strong-style with explicit learning objective; senior demonstrates first |
| Session fatigue | Participants lose focus after 60+ minutes without break | Enforce timeboxes; break at 60 minutes; limit sessions to 90 minutes total |
| Missing attribution | Commits lack co-authorship trailers | Use a commit template or Git hook that prompts for co-authors |
| No debrief | Session ends abruptly; learnings and decisions are lost | Schedule debrief as a fixed 10-minute block at the session end |
[timestamp] session-started: Pair session with <participants> — style: <pairing-style>, goal: <task-description>[timestamp] role-rotated: Driver switched from <previous-driver> to <new-driver> at <interval> minute mark[timestamp] commit-made: Committed <sha-short> with co-authors <co-author-list>[timestamp] tangent-parked: Deferred discussion on <topic> to follow-up task[timestamp] break-taken: 10-minute break after <elapsed> minutes of active pairing[timestamp] session-completed: Duration <total-minutes> min, commits: <commit-count>, effectiveness: <rating>/5[timestamp] debrief-logged: Learnings: <learning-count>, follow-ups: <followup-count>