How Scoring Works

A plain-language guide to how we rank climbers at Dogpatch Boulders. No math degree required.

TL;DR

  1. Every climb starts with a base score from its V-grade (V0 = 1000, V6 = 1600, V10 = 2000)
  2. Climbs get adjusted up or down based on who actually sends them
  3. Your score is almost entirely your single hardest send, with tiny bonuses for additional climbs
  4. Only the last 30 days count — you're only as strong as your last month

🎯 The Big Idea

The leaderboard answers one question: "Who is the strongest climber at Dogpatch right now?"

To answer that fairly, we can't just look at the grade printed on the wall. Everyone knows some V6s are sandbagged and others are soft. So we let the community define how hard each climb really is, then score you based on that.

Climbers define
climb difficulty
Climb difficulty defines
climber scores
Repeat until
scores stabilize

Strong climbers sending a climb pushes its difficulty rating up. Weaker climbers sending it pulls it down. Your score then reflects the actual difficulty of what you've sent, not just what the setter wrote on the tag.

💪 Your Score = Your Hardest Sends

Your score is a weighted sum of your climbs, sorted hardest-first. But the weights drop off extremely fast — your second-best climb is only worth 10% of your best, your third is worth 1%, and so on.

#1
Hardest send
100%
#2
10%
#3
1%
#4
0.1%
#5+
~0%

In practice, your score is almost entirely determined by your single hardest send. Additional climbs act as tiebreakers — they nudge your score up slightly, but they can never drag it down.

Why? We want the leaderboard to reflect peak ability, not gym attendance. Logging your warmups will never hurt you, but it won't significantly help either. This is similar to how competition redpoint rounds work, but with steeper decay.

🏋 Volume Can't Beat Difficulty

Here's the key design choice: no amount of easier climbs can overtake a harder one. Let's see this in action:

Winner
Climber A
Sent 1 V6
1,600
Loses
Climber B
Sent 40 V4s
~1,555

Why? Because of the steep 10% decay, Climber B's 40 V4s form a geometric series that converges — it has a mathematical ceiling it can never cross:

1 V6
1,600
1 V4
1,400
5 V4s
1,555
40 V4s
~1,555
Infinite V4s
1,555
The math ceiling: With a 10% decay factor, your maximum possible score from infinite sends of the same grade is capped at ~1.11x the value of a single send at that grade. 40 V4s and infinite V4s produce nearly identical scores.

⚖️ Not All V6s Are Equal

You already know this intuitively: that one black V6 in the corner feels way harder than the popular pink V6 everyone warms up on. Our system captures this.

Each climb's rating starts at its posted grade, then gets adjusted based on who sends it and how many people send it.

How a "popular" V6 loses points

If a V6 is getting sent by lots of V4 and V5 climbers, the system recognizes it's probably softer than a true V6. The climb's effective rating gets pulled down toward the average strength of its senders.

1,600 V6 base
+
−50 Weak senders pull it down
+
−5 Low scarcity (many sends)
=
~1,545 Effective rating

How a "hard" V6 gains points

If a V6 is only being sent by V7+ climbers, and very few people have sent it, the system recognizes it's probably harder than average. The climb's rating rises.

1,600 V6 base
+
+50 Strong senders push it up
+
+33 High scarcity (few sends)
=
~1,683 Effective rating

So if you send that "hard" V6 instead of the "popular" V6, you'll earn ~138 more points — roughly the same as the difference between an entire V-grade.

The elasticity knob: We use a 50/50 blend between the posted grade and what the community says. This means the setter's grade still matters — a V6 can't suddenly become a V10 — but it can float up or down within a reasonable range.

💎 Rare Climbs Are Worth More

Climbs that fewer people have sent receive a small bonus. This rewards climbers who go after the less-traveled problems instead of just doing the popular circuit.

1 sender
+33 pts
+33
3 senders
+18 pts
+18
5 senders
+14 pts
+14
10 senders
+10 pts
+10
50 senders
+3

The bonus follows a logarithmic curve — the difference between 1 and 2 senders is significant, but the difference between 50 and 51 is negligible. This matches how rarity feels in practice.

🧩 Putting It All Together

Let's walk through a full example with three climbers to see how everything combines.

Climber Sends (last 30 days) Hardest
The Crusher 1 hard V8, 2 V5s V8
The All-Rounder 1 hard V6, 3 V5s, 5 V4s V6
The Volume Machine 40 V4s, 1 popular V6 V6

Step 1: Start with base grades (V4 = 1400, V5 = 1500, V6 = 1600, V8 = 1800).

Step 2: Adjust climb ratings based on senders. The "hard" V8 stays near 1800+. The "popular" V6 drops because weaker climbers also sent it. The "hard" V6 stays high.

Step 3: Calculate each climber's score using the weighted sum:

The Crusher
1 hard V8 + 2 V5s
~1,850
The All-Rounder
1 hard V6 + pyramid
~1,665
The Volume Machine
40 V4s + 1 soft V6
~1,590

Notice how The All-Rounder beats The Volume Machine even though The Volume Machine logged way more climbs. The All-Rounder's "hard" V6 is worth more than the "popular" V6 that everyone sends.

🔄 The Chicken-and-Egg Problem

You might have noticed a circular dependency: we need to know how strong climbers are to rate climbs, but we need to know how hard climbs are to rate climbers.

We solve this by iterating. Start with a rough guess (everyone's rating = their max grade), then alternate between updating climb ratings and climber ratings, 5 times. By the 3rd or 4th pass, scores have usually stabilized.

Pass What happens
Start Everyone's rating = their max V-grade in points
Pass 1 Climbs adjust based on initial climber ratings. Climbers re-scored.
Pass 2 Climbs adjust again with updated climber ratings. Scores refine further.
Pass 3-5 Fine-tuning. Scores converge to stable values.
What this catches: Sandbagged grades (labeled easy but actually hard) get corrected upward because strong climbers send them. Soft grades (labeled hard but widely sent) get corrected downward because weaker climbers complete them. The system is self-correcting.

📅 The 30-Day Window

Only sends from the last 30 days count toward your score. Climbed a V10 two months ago? Great, but it won't show up on the leaderboard. This keeps the ranking fresh and rewards current form over historical achievements.

Think of it as a rolling monthly competition. Everyone starts from scratch each month.

📈 Movement Tracking

Each daily update compares your current rank to your previous rank:

Symbol Meaning
▲ 3 You moved up 3 spots since last update
▼ 2 You dropped 2 spots since last update
- No change
NEW First time appearing on the leaderboard

Design Principles

Three principles guided every decision:

Peak performance matters most. Your hardest send should be what defines your ranking. Volume is a tiebreaker, not a replacement for difficulty.
Grades are imperfect — the community corrects them. Posted grades are a starting point. The iterative solver uses the community's sending patterns to surface the actual difficulty of each climb.
Recency keeps it fair. A 30-day rolling window ensures the leaderboard reflects current form. Everyone gets a fresh start each month.

⚙️ Technical Details

For those who want the exact formulas and parameters.

Parameters

Parameter Value What it does
Base Points 1000 + (grade × 100) V0 = 1000, V6 = 1600, V10 = 2000
Elasticity 0.5 50/50 blend of posted grade vs. community signal
Scarcity Weight 50 Max bonus points for rarely-sent climbs
Volume Decay 0.1 Each subsequent send is worth 10% of the previous
Iterations 5 Number of refinement passes
Window 30 days Rolling time period for eligible sends

Climb Rating Formula

For each climb, the effective rating is recalculated each pass:

climb_rating = base_points + 0.5 × (avg_sender_rating − base_points) + scarcity_bonus
scarcity_bonus = 50 × (1 / ln(num_senders + 1.1))

Climber Score Formula

Sends are sorted by climb rating (highest first), then summed with geometric decay:

score = climb_1 × 1.0 + climb_2 × 0.1 + climb_3 × 0.01 + climb_4 × 0.001 + ...
weight for send #i = 0.1(i−1), capped at top 11 sends