Reasoning Effort Levels: A Practical Guide to Tuning an LLM's Thinking Budget
Reasoning effort (also called thinking budget) is the knob that controls how much internal deliberation a reasoning model performs before it answers. This guide explains how that setting differs from switching to a stronger model, why the default tier is already sufficient for most everyday development work, and what each of the five typical tiers — low, medium, high, xhigh, and max — is suited for and what it costs. It closes with practical tuning strategies, such as raising effort for a single tricky turn rather than an entire session, and the common misconceptions about assuming higher is always better.
1. A model’s “thinking” can be controlled
Before a modern reasoning model gives its formal answer, it typically performs a stretch of internal reasoning — commonly called thinking or the reasoning process. That output also consumes tokens and produces latency and cost, but it determines the quality of the final answer. The fuller the thinking, the more reliable the result tends to be in scenarios that require multi-step reasoning, logic verification, or code generation.
Reasoning effort — often expressed as reasoning effort or thinking budget, and sometimes called the “thinking tier” or “reasoning tier” — is the knob that controls how much scratch work that thinking phase is allowed to do. Fundamentally it is a budget cap: it tells the model how deep it may reason on this particular turn.
- Low effort: for simple, well-directed questions, the model does almost no extra deliberation and answers directly — fastest response, lowest overhead.
- High effort: for complex, vaguely bounded problems, the model reasons several more steps, actively enumerates possible boundary conditions, and double-checks its own conclusions before answering.
A useful analogy: ask the same engineer which package a utility method lives in, and they answer on the spot; ask them to track down an intermittent production incident, and they will dig through logs, compare code, list several possibilities, and verify each one. Reasoning effort is how you tell the model which working mode to enter this time.
Reasoning effort is not the same as switching models
Beginners often conflate the two. The table below separates them:
| Operation | What changes | Analogy |
|---|---|---|
| Switching to a stronger model | The model’s capability ceiling | Putting a more senior person on the task |
| Adjusting reasoning effort | How much “thinking effort” the same model puts in | The same person working more or less carefully |
In other words, switching models is changing the person; adjusting the effort is the same person deciding whether to be thorough this time. The former raises the capability ceiling, the latter adjusts how much of that capability gets used.
2. What happens if you never adjust it: the default tier is usually enough
The large majority of everyday development tasks don’t need manual adjustment. Mainstream reasoning models generally set a middle tier as the default, aimed at everyday work with a clear scope and a clear goal — implementing a well-specified new endpoint, adding a set of unit tests, explaining a block of existing code, and so on.
The common industry experience is that, as models keep iterating, that same default tier tends to cover a sizable share of day-to-day coding tasks on its own. So there are really only two situations that justify active intervention:
- It’s too slow, or the thinking overhead is too high: the default tier is overkill for this task, so lower it.
- Complex problems keep coming back under-thought: the model isn’t reasoning deeply enough at this tier, missing boundary conditions or key dependencies, so raise it.
Until you have a concrete reason to do otherwise, staying at the default is both the least effort and the safest choice.
3. Choosing among the five tiers: use cases, cost, and examples
Most reasoning models divide the thinking budget into a handful of discrete tiers. Taking five tiers from low to high as an example, here is what each is suited for and what it costs, with backend development scenarios. The criteria in the “when to use” column come from general engineering experience, and the examples are illustrative:
| Tier | When to use | Typical example | Cost |
|---|---|---|---|
| low | Fast back-and-forth where you inspect the result at every step | Renaming a variable, asking how a particular endpoint is used | Fastest and cheapest; complex problems are easy to under-think |
| medium | Everyday development with a clear scope (the common default) | Adding a paginated endpoint, writing a set of unit tests | Balanced quality and cost |
| high | Tasks that need verification and involve many edge cases | Locating and fixing a bug in legacy code | Slower, more thinking tokens |
| xhigh | Tasks that need deeper reasoning | Producing a design before a cross-module refactor | Noticeably slower and more expensive |
| max | The hard problems you’re willing to let it chew on alone | Security auditing, complex concurrency analysis | Slowest and most expensive, prone to “overthinking”; try it on a small scope first |
One point deserves emphasis: a higher tier does not automatically mean a better result. Too large a thinking budget can push the model into “overthinking,” weighing the same simple question back and forth, which stretches latency and raises cost without necessarily buying any extra quality.
4. Practical tuning strategies
Building on the above, here are a few strategies you can apply directly:
- Use the default tier as your baseline. Keep the middle tier as your long-term working tier, and deviate from it only when there is a real reason.
- Add effort per turn, not per session. When you hit a genuinely hard problem, raise the tier only for that turn or two; once it’s solved, go back to the default so the cost of a long-running high-effort session doesn’t accumulate.
- Judge by task characteristics, not by feel:
- Clear boundaries, results verifiable immediately → low to medium.
- Many dependencies involved, many boundary conditions → medium to high.
- Open-ended and exploratory (design work, security review) → high to max, paired with human review.
- Bring thinking cost into observability. Thinking tokens are billed too, so it’s worth tracking the “share of thinking-related tokens” separately in your monitoring and alerting setup, where it can quickly surface cost anomalies.
The pseudocode below illustrates the idea of choosing a tier dynamically based on task difficulty:
def pick_effort(task):if task.is_well_scoped and task.verifiable_immediately:return "low" # fast back-and-forth, results are immediately visibleif task.has_many_edges or task.touches_legacy_code:return "high" # many edge cases, needs verificationif task.is_open_ended: # design work, security auditing, etc.return "max" # let it work alone, then review manuallyreturn "medium" # default: scoped everyday development
5. A few common misconceptions
- Misconception 1: higher is always better. As noted above, an excessively high tier is pure waste on simple tasks.
- Misconception 2: treating tier adjustment as a way to increase capability. It controls whether the same model applies itself; the capability ceiling still depends on which model you chose.
- Misconception 3: leaving a whole session on a high tier. This steadily amplifies latency and cost, so keep the extra effort strictly limited to the turns that actually need it.
Conclusion
Reasoning effort tiers essentially give you an adjustable knob within the triangle of quality, latency, and cost. Understand how the setting works, know where the boundary of each of the five tiers lies, and adopt a “default for daily work, per-turn boost for hard problems” approach, and you can preserve quality across most development scenarios without paying an unnecessary thinking-budget penalty.
