Skip to content
UniKit

OKR planner

Set one objective with 3–5 key results and get each KR’s progress plus the weighted total from start/target/current values, exported as a ready-to-paste Markdown template.

Runs in your browserEvery computation happens in your browser — your data never leaves this device.

Objective setup

Key results (3–5)

Weight sum: 100%

KR 1

KR 2

KR 3

Result

# Objective: Improve week-two retention

| # | Key result description | Start | Target | Current | Weight (%) | Progress |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | Raise week-two retention from 30% to 45% | 30 | 45 | 36 | 40% | 40.0% |
| 2 | Raise onboarding completion from 60% to 80% | 60 | 80 | 70 | 35% | 50.0% |
| 3 | Cut first-week support tickets from 120 to 60 | 120 | 60 | 90 | 25% | 50.0% |

**Weighted total: 46.0%**
KR 1: 40.0%
KR 2: 50.0%
KR 3: 50.0%
Weighted total: 46.0%

Progress = (current − start) ÷ (target − start). Decreasing goals (such as cutting tickets from 120 to 60) are inverted automatically, and the weighted total is Σ(progress × weight) ÷ 100.

What this tool does

  • Draft your quarterly OKRs here and see each key result’s progress and the weighted total immediately, instead of reporting on a hunch.
  • Weekly reviews: change the current value and the total refreshes, which beats recalculating by hand in a spreadsheet.
  • Copy the generated Markdown table into your weekly report, Notion, Feishu or a GitHub issue and it renders as is.
  • Sanity-check your weights: if a KR carries 5% of the weight but most of the work, the table makes that obvious.

Example

Input

Objective “Improve week-two retention”; KR1 start 30 / target 45 / current 36 / weight 40; KR2 start 60 / target 80 / current 70 / weight 35; KR3 start 120 / target 60 / current 90 / weight 25

Output

KR1 40.0%, KR2 50.0%, KR3 50.0%, weighted total 46.0%, plus a three-row Markdown table

KR3 is a decreasing goal (tickets from 120 down to 60), so progress is (120 − 90) ÷ (120 − 60) = 50%.

Frequently asked questions

Why limit the objective to 3–5 key results?

That is the common OKR rule: fewer than three rarely supports an objective, and more than five usually means the objective is too broad to focus on. The tool rejects other counts up front so you find structural problems before writing the whole thing.

Must the weights add up to 100%?

Yes. The weighted total is Σ(progress × weight) ÷ 100, which is meaningless if the weights do not sum to 100, so the tool reports an error. A 0.01 tolerance lets you write 33.33 / 33.33 / 33.34.

How is a goal like “cut tickets from 120 to 60” scored?

The tool detects decreasing goals (target below start) and uses (start − current) ÷ (start − target), so a current value of 90 gives exactly 50%. Overshooting does not produce numbers like 120% either — progress is clamped to 0–100%.

Can progress exceed 100%?

No. Overshoot always shows as 100% because OKR progress measures completion rather than a multiple. If you really need to distinguish 100% from 150%, raise the target and recalculate.

Can I use the generated Markdown directly?

Yes. The output is a standard Markdown table plus one bolded total line; it renders correctly in Notion, Feishu docs, GitHub issues and any Markdown editor with no further editing.

Keywords:okrobjective key resultsgoal settingkpiprogressOKR模板目标管理关键结果进度计算加权进度

Related tools