Every sailing club has a duty roster, and almost every sailing club's duty roster is a mess: a spreadsheet with three tabs, a pinned Facebook post nobody scrolls back to, or a laminated sheet on the clubhouse corkboard that's been wrong since May. The roster isn't a scheduling problem. It's a fairness problem wearing a scheduling costume — and fairness is the thing volunteers actually resent when it breaks.
This guide covers how race committee duty, bosun rotations, and dock-master shifts actually get assigned at clubs that don't fight about it, gives you a free copy-paste template you can use tonight, and is honest about what a tool like Zeil does today versus what's still being built.
Why duty rosters fail
Before fixing the roster, it helps to name the four ways it breaks, because the fix for each is different.
1. Nobody owns it. At most clubs the duty roster is one volunteer's personal project — often the same person who's already running the race committee or the moorings. When that person is out sick, on vacation, or simply burns out, the roster stops updating and word-of-mouth takes over. Word-of-mouth is how people who show up early get stuck doing everyone's job.
2. There's no record of who's already served. Without a running tally, the same six reliable members get tapped for the same six Saturdays every season, while the other eighty members never hear their name. Reliability gets punished with more work.
3. Swaps happen in side channels. Someone can't make their Saturday, texts a friend, the friend says yes — and the roster (paper, spreadsheet, whatever) never finds out. Race day arrives short a scorer or a safety-boat driver, and the club improvises. Improvised race committees miss things: a missing flag, a bad time, a protest nobody logged correctly.
4. There's no eligibility check. Not everyone can run every role. A committee boat operator usually needs a specific certification or a minimum number of hours on that boat; a junior sailing chaperone needs a background check on file. A spreadsheet doesn't know who's qualified — it just has names in cells. The result is either a well-meaning volunteer assigned to a role they're not actually cleared for, or a bottleneck where the same two "qualified" people get called every time because nobody else's status is easy to check.
None of these are solved by a nicer-looking spreadsheet. They're solved by three things: a single source of truth, a visible fairness ledger, and a place where swaps and eligibility live in the same system as the schedule. Below is a template that gets you the first two tonight, by hand, for free — plus notes on where a tool takes over the third.
The free template: a fair duty roster, built by hand
Copy this into a spreadsheet (Google Sheets or Excel both work fine). It's deliberately simple — six columns, one row per duty date.
| Date | Role | Assigned to | Confirmed? | Hours this season | Backup / swap contact |
|------------|-------------------|------------------|------------|--------------------|------------------------|
| 2026-08-02 | Race committee | J. Alvarez | Y | 3 | — |
| 2026-08-02 | Safety boat | R. Chen | Y | 2 | — |
| 2026-08-09 | Race committee | M. Okafor | N | 1 | S. Patel (confirmed backup) |
| 2026-08-09 | Dock/rigging | (open) | — | — | posted to sign-up board |
How to run it as a system, not just a sheet:
- Publish the whole season at once, before it starts. Assign every duty date for the coming season in one sitting, ideally at the spring board meeting, using last year's "Hours this season" column so the load is visibly spread across the roster, not concentrated on whoever answers email fastest.
- Make the hours column public. The single highest-leverage fairness move is letting members see, in one glance, who has served three times and who has served zero — most "why is it always me" conversations start because the load isn't visible, not because it isn't fair.
- Require confirmation, not just assignment. An assigned-but-unconfirmed row is not a covered shift. Chase confirmations two weeks out, one week out, and 48 hours out. Put the chase dates in your own calendar, because this is exactly the job that falls apart when the roster owner is busy.
- Route every swap through the sheet. A text-message swap that never touches the roster is the single most common cause of a no-show. The rule: no swap is real until the backup's name is in the "Assigned to" cell and the original person's row says "swapped out." One rule, no exceptions, and race day surprises mostly disappear.
- Tag roles that need a qualification. Add a note under any role — committee boat driver, junior program chaperone, safety boat operator — that requires a certification or a minimum experience level, and keep a separate short list of who currently holds it. This is the piece a spreadsheet genuinely struggles to enforce, because nothing stops you from typing an unqualified name into a cell.
This template will get a 40-boat club through a season. It will not, by itself, stop an unqualified volunteer from being scheduled, and it won't survive a change of hands cleanly — the fairness ledger lives in one person's file, not in a system every board member can see.
Where duty rosters are headed at Zeil
Here's the honest version of what's live and what isn't, because this is exactly the kind of claim we tag carefully (see our full guide to boat scheduling software for the reservations side of this).
Live today: boat reservations with database-enforced overlap prevention, so two people can't double-book the same boat; eligibility and certification records per member, enforced server-side, so the system already knows who's qualified for what; crew assembly with invite/accept and minimum-crew enforcement; club announcements and a weekly digest instead of a reply-all thread; membership records and renewals; weather forecasts; and the AI Sail Brief, a plain-English pre-sail briefing generated per reservation (always advisory — "AI-generated advisory; verify before sail," skippers make the final call).
[ROADMAP — beta 2026-10-15 → GA 2026-12-01]: an in-product duty roster that reuses the same eligibility and certification data already live in reservations — so a race committee slot can only be assigned to a member who actually holds the right certification, swaps update automatically, and the fairness ledger (hours served, last assignment) is visible to the whole board, not one person's spreadsheet. This ships alongside race series and RRS-compliant scoring as part of the Racing beta. It is not live yet. If you need it before October, the honest path is the Founding Clubs program — committed dates, locked founding pricing, and direct input into how the roster and scoring beta work.
We're saying this plainly because the alternative — implying the roster tool exists today — is exactly the kind of promise gap that burns trust with volunteer boards, and boards talk to each other.
What to do this week
If your roster is currently a spreadsheet or a paper sheet: adopt the six-column template above before your next race weekend. Publish the whole season, make the hours column visible, and enforce the one swap rule. That alone will fix most of the "why is it always me" conversations before any software touches the problem.
If you're already comparing tools for next season — because your board is doing what most boards do, evaluating software in the September–February off-season for the year ahead — the two things worth checking on any platform, including ours, are (1) whether roster assignments actually check certifications and eligibility, or just store names in cells, and (2) whether the vendor is explicit about what's live versus what's still being built. Ask for dates, not "coming soon."
Related reading: Boat scheduling software: end the clipboard and the double-booking · Sailing club membership software: rosters, renewals, and self-service (guide coming Aug 27) · For racing clubs (race scoring beta, October 2026) · Zeil vs. spreadsheets: the true cost of running a club on Excel and email (comparison coming Sep 17)