Most Discord leagues die the same way. Someone builds a lead in month two that nobody can realistically close. The people below them work out the maths, stop queueing, and by month four the ladder is a museum exhibit with four regulars.
Seasons fix that, and almost every league that survives past a year runs them. But "we'll do seasons" is the easy part. The decision that actually determines whether your season works is a narrower one: how much of last season carries into the next? Wipe everything and your best players have to re-prove themselves from scratch, which some of them will simply not bother doing. Carry everything and you've changed the date on the same stale ladder.
This post is about that decision, plus the mechanics around it — season length, placements, playoffs, and what happens to your history. If you want the broader "how do I start a league at all" version, that's starting a competitive Discord league.
A New Season Should Be a New Leaderboard, Not a Wipe
Worth understanding before anything else, because it changes what a "reset" costs you.
The intuitive way to run a season reset is destructive: zero everyone's rating, clear the standings, start again. It's also how you lose your history, break every old link, and give yourself a genuinely frightening button to press.
Team Up does it the other way round — rolling a season creates a new leaderboard. "Ranked" becomes "Ranked S2", and the old board is untouched. It isn't archived in some special sense; it's just still there, exactly as it was. Its standings, match history, player profiles and public pages all keep working forever.
That has some pleasant consequences that fall out for free:
- Nothing is deleted, so a rollover is not a dangerous operation. If you get the carryover wrong, the source data is still sitting there and you can roll again.
- Last season's final standings stay linkable. "Here's who won S1" is a URL, not a screenshot in a pinned message.
- Ratings reset by construction. A new board has no rating rows, so players start at the default the first time they play — there's no "clear ratings" step that could half-fail.
You can find it on your leaderboard's Danger Zone page, framed as the non-destructive alternative to the buttons around it, or from the "New season" card in the dashboard's create menu. It's a dashboard flow rather than a slash command, because it's a wizard with a preview and you want to see what you're about to do.
The Real Decision: Carryover
Four modes, and this is where the actual judgement lives.
Fresh start
Nobody carries anything. Everyone starts at the default rating on their first match of the new season.
Use it when your league's problem is disengagement — the runaway leader, the bottom half that stopped queueing. A genuine reset is the strongest signal you can send that this season is winnable.
The cost is that you throw away real information. You know who your top ten are; a fresh start pretends you don't, and everyone spends three weeks re-deriving it. Strong players find this tedious, and some of them won't do it more than once.
Carry ratings as-is
Everyone's final Elo becomes their starting Elo.
Use it when the season boundary is administrative rather than competitive — you want a clean set of season records and a new archive point, but the ladder itself is healthy.
The cost is that it doesn't solve any of the problems seasons exist to solve. If your leader was 400 points clear, they still are.
Carry, pulled toward the default
The compromise, and the default at 50%. Everyone keeps their relative position but the spread compresses:
new_elo = default + (old_elo − default) × carry
With a 1200 default and 50% carry, a 1600 player starts at 1400 and an 800 player starts at 1000. The gap between them halves, from 800 points to 400.
The important property is that it pulls in both directions. It isn't a penalty on good players — it's a compression of the whole distribution toward the middle. Someone who had a rough season gets pulled up by exactly the same proportion as the leader gets pulled down.
Use it as your default, because it's the only mode that keeps what you know while restoring the thing seasons are for: a gap that can actually be closed. The slider is live in the wizard with a preview built from your board's real top, median and bottom ratings, so you can see what any percentage does to your actual players before committing.
Rough guidance: 70–80% if the ladder is mostly healthy and you just want to tighten it, 50% as a normal reset, 25–30% if the spread has run away badly.
Seed by role
Starting ratings come from Discord roles instead of a single default — your three ranked roles can start at 900, 1000 and 1100.
Use it when your community already has a rank structure people accept, and you'd rather start the season from that consensus than have the ladder rediscover it. It's fresh-like for the rating maths — no old Elo carries — but players don't all start from the same number.
What Actually Carries Over
Beyond ratings, the new board is a full copy of the old one's configuration: default Elo, K-factor, minimum-rating floors, the Elo curve and precision, stat definitions, choice sets, screenshot instructions. You don't reconfigure a season.
What does not carry, by design:
- Season records. Matches played, wins, losses, streaks, placements and stat aggregates all start at zero, so "this season" means this season. (There's a checkbox if you'd rather carry stats too.)
- Peak and floor ratings reset to the new starting value, so a season-best is a season-best.
- The lock. A new season never starts frozen, even if you'd locked the old board.
The Part People Forget: Retargeting
Here's where season rollovers go wrong in practice. You create the new board, announce it, and then half your Discord is still pointing at last season — the default leaderboard for /record_match, your channel mappings, your command defaults.
The wizard handles the single-target ones automatically: server default leaderboard, channel mappings and command defaults get repointed at the new season as the run finishes. There's a toggle on the review step if you don't want that.
Three things stay manual, because they need re-posting or re-granting rather than a config write:
- Leaderboard messages — the auto-updating standings embeds need re-creating against the new board.
- Tier roles — need re-granting, since everyone's rating just changed.
- Public page configs — the public-facing views are per-board.
Do those in the same sitting as the rollover. A league where /record_match writes to S2 but the pinned leaderboard still shows S1 generates a lot of confused questions.
Placements: The First Two Weeks
The start of a season is the noisiest your ratings will ever be, because everyone is simultaneously re-finding their level. Two settings make that period behave.
Turn on provisional rating so early matches move ratings faster and players converge quickly, then settle to your normal K. This matters most after a fresh start or a heavy compression, where everyone has ground to cover. The K-factor post covers what the multiplier and fade curve actually do.
Hide unplaced players so the first week's standings aren't dominated by whoever happened to play once:
/leaderboard_config ranking set matches_required:10
Together these give you a real placement period: ratings move fast, nobody appears on the board until their number means something, and by week two the standings are worth looking at.
How Long Should a Season Be?
The honest answer is that it depends on match volume rather than the calendar, and the failure modes are asymmetric.
Too short and ratings never converge — you're resetting before the ladder has finished being right, so every season is one long placement period. If your players get 20 matches a season, that's a season of noise.
Too long and you're back to the problem seasons exist to solve.
The rule worth applying: a season should be long enough that a typical regular plays at least 30–40 matches. Work backwards from your actual volume. Two events a week at 3 matches each is ~25 matches a month, so a two-month season clears the bar comfortably. A group that plays once a fortnight needs six months, or needs to accept that its ladder is permanently provisional.
Three months is the most common answer for an active Discord league, and it has a non-mathematical advantage: it's long enough for a story to develop and short enough that a bad start isn't a write-off. (The CS2 pug post makes the same case for high-variance formats, where the reset does double duty.)
Fix the end date at the start and publish it. A season that ends "when it feels right" ends in an argument about whether it should have ended sooner.
Playoffs
A ladder answers "who was most consistent". A bracket answers "who won". Those are different questions and the best seasons ask both — the ladder decides who qualifies, the playoff decides the champion.
The straightforward version: take your top 8 at season close, seed the bracket by final rating, run single or double elimination. Seeding from the ladder is the part that makes it feel earned — the reward for a good season is a favourable path, not just a line in the standings.
Two decisions worth making in advance:
- Do playoff matches count toward ratings? Usually no. The season's ratings are settled; a bracket is a separate event, and rating the final rounds means your champion can finish the year rated lower than the person they beat.
- Who qualifies? Set the cutoff and the minimum matches before the last week, not after. "Top 8 with at least 15 matches played" prevents someone freezing a lucky rating in week three and coasting.
The tournament guide covers running the bracket itself.
A Season Checklist
Pulling it together:
Before the season
- Set the end date and publish it
- Set K-factor and
matches_requiredfor your volume - Enable provisional rating for the placement period
- Publish the playoff qualification rule
During 5. Leave the rating settings alone — changing K mid-season makes early and late matches worth different amounts
At the close 6. Run the playoff, seeded from final standings 7. Roll over: pick a carryover mode, check the preview, run it 8. Re-post leaderboard messages, re-grant tier roles, rebuild public pages 9. Link last season's board somewhere permanent — it's the archive, and it's still live
The one to get right is step 7, and the guidance is short: start at 50% compression unless you have a specific reason not to. It keeps what you've learned about your players and still gives everyone a season worth playing.
Running a league on Discord? Team Up handles Elo, queues, tournaments and season rollovers in one bot — and a new season never deletes the old one. Start with the leaderboard setup guide, or read about tier roles and rank decay for keeping a ladder healthy inside a season.
