Ask Mr. Robot Game version

Under the Hood

Healing optimization and the meta

Over the last few weeks we rebuilt how AMR scores healers. We covered all seven healing specs, in raid and in Mythic+, and checked them against hundreds of logs from top players plus the talent and gear choices of thousands more. We fixed a lot of bugs and tried a lot of ideas. Some of the ideas worked well and stayed in the model, some did not.

Why now? Our new simulator is fast enough to optimize talents, not just gear, and talent optimization is in development for a future update. A talent optimizer is only as good as the model under it. So before we put talent suggestions in front of anyone, we wanted the healer model to land close to the builds good players actually run, without cheating by copying those builds from their logs. When this article talks about "our best build," it means the build that in-development optimizer found. You won't see talent suggestions on the site yet, but you will in a future update.

After the updates, our model mostly agrees with the players at the top of the logs on hero talents, core spells, and stats (mostly). The talent builds it finds aren't always the exact builds players run. This article explains why. It covers how we score a healer's gear, how we checked that score against the real game, what we tried along the way, and why we don't think any model of healing should land exactly on the meta.

Fair warning: this one is long and technical. Most people don't need to read it. It's here for the few who want to see the work. If you only want the short version, it's this: healing is finite. Once you have enough of it, more doesn't help, and that one fact explains almost everything below.

How we score a healing gear set

Healers run on the same simulator as everyone else. For each gear set the optimizer considers, we simulate your spec playing through a fight and record how much healing and damage it did. What's specific to healers is the fight we put you in, the rules your rotation follows, and the environment around you.

The fight

  • Raid: a 398-second boss, which is the median Mythic kill length across 376 logs. The score is your healing. In raid, nobody is asking their healers for damage.
  • Mythic+: one hard 164-second pull (the median pull length across 940 pulls) against 5 enemies, or 2 for Discipline (5 persistent targets inflated Inescapable Torment). The score is two-thirds healing and one-third damage by default.

The rotation

Your character follows a priority list built from the same decision rules good players use: what to press next, when to hold a cooldown, and when a spare global cooldown should go to a damage spell. Those rules come from guides and from watching what players actually do in logs. The rotation is not a fixed list of how many times to cast each spell. That distinction turns out to matter a lot, and we'll come back to it.

The environment

This is where most of the work went. A healer's output depends heavily on things outside the healer's control: how much damage there is to heal, how often you have to move, and who else is healing. We model these as a handful of settings. Each one is set once per content type from logs, and it's the same for every build of a spec.

Setting What the sim does Where the number comes from
Mana Real mana over the whole fight, starting full. Raid buffs including Mana Spring, a mana potion when you run low, and your spec's own mana returns. No Innervates from other players. Your spec's mechanics, and the buffs most Mythic raids have
Pacing Expensive filler heals only go out while your mana is above a line that runs from full at the pull to some percentage at the kill. In raids the line ends at zero, in M+ it ends with mana left for the next pull. During big cooldowns, mana is spent freely. M+ logs: the mana players have left after their hardest pulls
Overheal Every heal has its own overheal percentage, one for raid and one for M+. Each spell's median overheal in top players' logs
Movement In raid, 20% of the fight is spent moving, in short windows. You can't start a cast while moving unless the game lets you (Spiritwalker's Grace, Hover, spells castable on the move). Raid filler cast rates in the reference logs. M+ pulls are shorter and don't have movement modeled.
Cooldowns Major cooldowns are used as often as players actually use them, not on cooldown from the pull. Cooldown usage in the reference logs
Heal or Damage How often a spare global cooldown goes to a damage spell instead of a heal. Per spec, from the heaviest quarter of M+ pulls (raid is all healing)

A couple of these need some more explanation.

Overheal. Every heal in the sim goes through its own overheal value. Spells that define a build take their overheal from the players who actually play that build. For example, spamming Prayer of Healing overheals more than casting it when it's needed, and it makes your other heals overheal more too. So when you talent into a Prayer of Healing build, your whole kit reads overheal from logs of players who play that way. You can see and change every spell's overheal in the optimizer's healer settings if your group's numbers are different.

Pacing. Players don't burn their mana in the first 90 seconds and then stand around. Spells that are part of the core rotation are never held back. Mana-hungry fillers are controlled by the pacing line, and when the line says no, the global goes to a cheaper heal or, in M+, to damage. Very mana-limited raid sims might wait instead of using a filler if below the pace. Major cooldowns are treated as a window of time in which you won't save mana, like Apotheosis or Ascendance. In M+, the line doesn't end at zero, because nobody empties their mana on one pull: in their hardest pulls, healers end at a median of roughly 30–60% of their mana, depending on spec.

Cooldowns. In raid, players use each major cooldown about (fight length ÷ cooldown) times per fight, and the first use goes out a while after the pull, not on it. Simulating "on cooldown from the pull" gives you roughly one extra use per fight. That inflates the value of every cooldown, and of every talent that shortens one. The sim now uses cooldowns at the rate players do: in raid, after a short delay and at roughly 60–85% of the maximum rate, depending on the kind of cooldown. In M+, buff windows run at about 90% of the maximum rate and direct heals like Divine Hymn or Revival at about 75%. Because cooldowns are now modeled from what players actually do, the healing cooldown slider in the optimizer settings is gone.

Two dials, not one

The damage/healing slider in the optimizer settings used to do two jobs. It decided how much your damage was worth in the score, and it decided how often your rotation pressed a damage spell instead of a heal. Those aren't the same thing. How much your damage is worth is a value judgment, and it's yours to make. How often players press damage is behavior, which we can measure. With both on one slider, fixing one broke the other: an example is setting Holy Paladin's M+ slider so it spent the logs' share of Holy Power on Shield of the Righteous also scored Holy Paladin with only 50% weight on healing.

So we split them. The slider is now only the score blend: all healing in raid, two-thirds healing in M+, the same for every healer. How often each spec presses damage is a separate number per spec, measured from the hardest M+ pulls in the logs. For example, Preservation spends about 60% of its Essence on heals and the rest on Disintegrate, and Discipline about half of its spare filler globals to heals instead of damage.

Logs are not an input

The obvious way to make a healer model agree with the logs is to feed it the logs. Take the top players' healing breakdown (Chain Heal 30%, Riptide 15%, and so on) and build a rotation that reproduces it. You'll match the meta perfectly.

But you'll have built a mirror, not a model. A breakdown from logs is the right answer for the players who produced it, with their haste, their talents, and their set bonus. Change any of those and the breakdown should change too. A model pegged to the logs can't do that. It will tell you every build plays like the meta build, which makes it useless for comparing builds, and comparing builds is exactly what a talent optimizer does. It also can't value haste properly, because haste changes the spell breakdown a player would use.

So we settled on a rule for our model: The logs never decide what the sim casts. We used the logs for two things: calibrating the environment settings above, and checking the result.

The log checks

We made a table with 14 rows: seven healers, raid and M+. For each row we pull top logs and compare:

Check What we compare Pass if
Hero tree Our best build in each hero tree vs the tree most players pick The players' tree is within 3% of our best
Build Our best build vs the most common build in the logs Ours is at most 3% higher
Stats Gear that favors each pair of secondary stats vs the players' actual stat split The players' top two stats are our top two
Breakdown Each heal's share of total healing, on the meta build, vs the logs The top six or so heals within 3 points
Filler Casts per minute of your lowest-priority heal vs the logs Within about 20%

Why 3%? The talent optimizer's search has a few points of noise on its own, and as we'll get to below, healing logs can't resolve differences that small anyway.

What we tried

Our starting point was deliberately simple: always casting, unlimited mana, every heal counted at full value. There's history behind that choice. Years ago we created a full healing simulator, with incoming damage, other healers, overheal, the works. We thought it gave good advice. But its answers didn't look like what the rest of the community recommended, and for most players, disagreeing with the guides is the same as being wrong. So in recent years we moved to raw throughput, which looked more like the meta.

But, now that method isn't landing on the meta in many cases. When we started this project, three healers rated an off-meta choice 10–16% ahead of the meta: Farseer Restoration Shamans, Chronowarden Preservation Evokers, and a Prayer of Healing Holy Priest build. Meanwhile we found logs that showed players using these off-meta builds doing the same healing at the same item level as the meta.

So, we started digging into these findings. Our goal was to update our model to prefer the meta builds. If players and theorycrafters think they are the best builds, that must be true, right? Here's what we tried, roughly in order:

Idea What happened Verdict
Realistic overheal for every spell Scores fell 13–33%, but the relative value of spells barely moved. Flat-value effects like absorbs, Leech, and direct heal trinkets gained ground, as they should. Kept
Time spent moving At 20% of a raid fight, filler cast rates converged on the logs. In M+, no amount of movement explained the gaps. Kept for raid
A mana budget on a 2.5-minute slice of the fight The theory was that our sim is the hard part of a fight and you bank mana in the quiet parts. But the logs say Mythic raids don't have quiet parts: healers spend above their base regen in 69–100% of 10-second windows. We stuck to simulating the entire fight
Real mana over the whole fight, spending freely Some builds ran dry and then sat idle, which no player does. Replaced by mana pacing
Mana pacing This helped on some specs. For example, Holy Priest's Prayer of Healing build went from 14% over the raid meta to 0%. Holy Priest raid now matches the players on hero tree, build, and stats. Kept
Casts must finish before you move Barely changed anything. Dropped
Low-haste healers get "sniped" more We checked about 54 Mythic logs per healer to see whether slower healers overheal more. Two specs did, one did the opposite, and the rest showed nothing. Dropped
Healing saturation See below. Not adopted
M+ should optimize for hard pulls only A dungeon log averages in a lot of easy pulls. Our model looks at one hard pull to pick gear. We now compare against the heaviest quarter of pulls. Fixed the log checks
Major cooldowns on cooldown from the pull That's roughly one use per fight too many in raid. Replaced by usage from logs
Innervates from other players With an Innervate on cooldown, our Resto Shaman's Chain Heal rate matches the top raid logs. But most groups can't count on getting one. Not in the default
Separate the slider for damage value and damage behavior Using the same setting for both made it harder to get on-meta optimization, so we tried separating the settings. Only the dps/hps slider value is user-facing and the behavior is now log-calibrated. Kept

Saturation, an idea we thought could work

Saturation gets its own section because it's an idea we thought had promise, but still didn't ship. The idea is that the more raw healing you do, the less each additional point is worth, because the group is already topped off. Mathematically, the score's credit for healing diminishes as it grows. And it worked: every build gap in the table shrank by 30–55%.

The problem is the reference point. To diminish the curve, you have to decide where "enough" is, and "enough" depends on your raid, your boss, your key level, and your co-healers. We would have had to pick one value per spec, it would go stale every time the game changed, and it would shrink every upgrade on the site. At the meta builds, a 1% gain in healing would have shown up as somewhere between 0.36% and 0.84%. We didn't want the most important number in the model to rest on a guess about your group.

What the meta is really good for

The most valuable thing the meta did for us was point at problems. Every time our best build disagreed with what players run, we went looking for the reason. Sometimes the reason was a real difference in how the model and the players value things, and that's what the rest of this article is about. But often it was something in the model that wasn't quite right: a talent interaction, a proc, or a detail of how the game applies an effect. Every gap was a lead, and we followed each one until it ended in a fix or an explanation.

That's how we think the meta should be used: as a question, not an answer. The Farseer lead from the start of this section is a good example. Once the fixes it led us to were in, the lead went from 13% to a few percent, and Totemic now comes out on top in raid. We've now been through every healer this way, against hundreds of logs, and we're very confident in the model.

Where we landed

As of this writing, across the 14 rows:

  • Hero talents: in 13 of 14 rows, the tree most players pick is either our best or within 3% of it.
  • Stats: our top two secondary stats match the players' in about half the rows. In nearly all of the rest, the players' pair is within 1–3% of ours.
  • What gets cast: in most rows, the spells cast and the share of healing each one does look like the logs.
  • Builds: this is where we differ most. In raid, the build our talent optimizer picks usually scores a few percent above the most popular one. In M+ the gaps are larger, into the teens for a couple of specs.

Where we still differ, and why

We've looked at every remaining gap, and we can explain each one mechanic by mechanic. A few examples:

  • Resto Shaman in raid wants versatility a little more than haste. Top players run haste. The difference is mostly Innervates: top Mythic guilds send their druids' Innervates to their shamans. With that extra mana, our shaman's cast rates match the logs. We leave it out because most players can't count on it, and without it, faster casting is worth a bit less.
  • Holy Paladin in raid is scored over a 3-minute window instead of a full kill. Over a full 6.5-minute fight with real mana, Holy Paladin runs out of mana, and once you're mana-bound, casting faster doesn't buy much, so the optimizer traded haste away. Players and guides stack haste. Over about 3 minutes, crit and haste come out close, which matches the guides. This was a judgment call, and we want to be upfront about it. There is no way to approach the meta stats if we use the actual average fight length.
  • Utility talents. Our best builds would happily swap Guardian Spirit, Leap of Faith, or Spirit Link Totem for a few percent of throughput. Players don't, and they're right not to (more on that below). So the talent optimizer locks in the utility that nearly every player takes instead of pretending it's worth nothing. When it ships, you'll see which talents are locked.
  • Raw throughput talents the logs don't reward. Our best M+ Mistweaver builds like Resplendent Mist and Amplified Rush. Players who take them heal 0.987 and 1.004 times as much as same-item-level players who don't. The talents do add theoretical healing output, but the logs show these don't translate to effective healing, for the reason in the next section.

Of course, these specific examples will not be relevant if you are reading this in some later season or expansion, but the logic holds.

Why no model lands exactly on the meta

Here's the core problem: A DPS log shows how much damage you can do. With the exception of very low health adds, there isn't over-damaging like there is over-healing. A healing log shows how much healing the fight needed, split among the healers. Effective healing can't exceed damage taken. Once you can keep up, the rest of your output becomes overheal.

We saw the consequence over and over. When we compare players who take an off-meta talent or hero tree with players at the same item level who don't, they heal the same amount:

Off-meta choice Healing vs same-item-level players without it
Lightweaver Holy Priests in M+ (18 players vs 3,829) 1.006×
Farseer vs Totemic Resto Shamans about even
Keeper of the Grove vs Wildstalker Resto Druids 0.98×
Mistweavers with Resplendent Mist 0.987×
Mistweavers with Amplified Rush 1.004×

Everyone looks the same because the encounter sets the ceiling, not the healer. Logs can tell you a build is enough. They can't tell you which build has more in the tank. That's not a gap in our analysis that more logs would fill. It's what a healing log measures.

There are other reasons, and they all push in the same direction:

  • The meta isn't computed. It's assembled from guides, from copying top players, from feel, and from reading your own log breakdown backwards, which, as above, mostly measures the encounter. Some metas are overwhelming: 799 of 800 Mythic Resto Druids play Wildstalker. Some barely exist: the most common exact Preservation M+ build is played by 22 of 753 players, and those 753 players use 430 different builds.
  • Utility doesn't show up in a healing score. Players take Guardian Spirit, a stun, or a movement talent because it prevents deaths and wipes, and that's worth more than 2% HPS. No throughput score can price "your tank didn't die."
  • Healers trade healing for damage when healing isn't needed. This is especially true in M+, where most pulls don't stress the healer. In the heaviest quarter of pulls, healers cast 15–55% more filler heals than their dungeon average.
  • Players hold back. Even in their hardest M+ pulls, healers finish with roughly 30–60% of their mana. They're saving it for the next pull or for a spike they know is coming. Talents that make mana more comfortable have value that a "maximize healing" score doesn't see.
  • Your group isn't the median group. Every environment setting is one number for everyone. Your raid's overheal, how much your fights make you move, and whether a druid sends you an Innervate aren't things we can know.

Why we think that's OK

When our model says build A heals 5% more than build B, it means that under these conditions, A has 5% more healing capacity. Whether that 5% matters depends on whether there's 5% more healing to do.

Here's what our recommendations do promise: The gear and talents we suggest will get you to the healing an encounter needs, with as much margin as we can find, under realistic conditions: real mana, real movement, real overheal, and cooldowns used the way people use them. You might get there just as well with a different setup. That isn't a flaw in the model. It's the nature of healing: there's a finite amount of it to do.

The idea that there's one best healing build is borrowed from DPS, where it mostly makes sense. More damage is always better, so the builds can be ranked and one comes out on top. For healers, there's a set of builds that are enough for the content you do. Choosing among them comes down to comfort, mana, utility, and how much damage you want to contribute in the downtime. Pick the one you like. The gear optimizer works with whatever talents you're running. When talent optimization arrives, read the build it suggests as the one with the most healing capacity - whether you actually do more healing depends on if there is more healing to do.

This is especially true in M+. A dungeon's healing demand is spiky: a few pulls need everything you have, and most don't. In the ones that don't, the right play is to help kill things. If anything, the honest M+ question isn't "how much can I heal?" but "how much damage can I do while still healing the hard pulls?"

Raid is a little different. In principle, more healing capacity lets your group drop a healer and bring another DPS, and then your extra capacity turns directly into a faster kill. If your group does that, a higher-capacity build is a real gain, and our numbers are exactly the right ones to look at. If you can't reach the threshold to drop a healer or your group brings a fixed number of healers, the group is limited by the damage it takes, not by how much any one healer could heal. Your extra capacity becomes overheal, or a smaller slice of the same pie.

A short rant

One last thing, and this part is opinion: healing in WoW has an inverted incentive structure, and we think that part of healing is not fun game design.

A DPS player's upgrade loop never ends. Every piece of gear makes the number go up: bigger hits, faster kills, higher parses, indefinitely. The only limits are your gear and your skill, and both can always get better. That's a satisfying loop. You put in the work and you see the reward.

A healer's upgrade loop has a finish line, and the finish line is where the fun stops. Gear helps right up until you can keep up with the encounter. After that, every upgrade is superfluous. Your healing doesn't go up, because the boss doesn't do more damage just because you got a new trinket. Your parse doesn't go up either, because it's split with the other healers and capped by the damage taken. What does change is that healing gets easier. Then easier again. Then it's boring.

The reward for gearing up as a healer is having less to do. The most engaging healing in the game happens on progression, when everyone's gear is bad and every global cooldown matters. On farm, the healers are the ones watching health bars sit at 100%. It's more fun to heal when everyone has bad gear, and that's backwards.

M+ key levels are the closest the game comes to fixing this: push a higher key and the damage rises to meet your gear. Raid has nothing like that. Once a raid tier is on farm, healers gear their way into boredom.

We don't have a neat fix to offer. But it's worth saying out loud, because it's the same reason this article exists. When the thing you're optimizing has a ceiling, "best" stops meaning much once you reach it.

The short version, again

Healing is finite. We'll keep checking our model against the best players in the game and keep fixing what we find. When we disagree with the meta, we'll be able to tell you exactly why.

We will always do the math, so you don't have to, even when the math says "this is enough."


— Swol and Yellowfive