From Zero to Heroes Never Die
22nd July 2018
"Man, you are bad at this game"

In my recent projects I have tried to focus more on presentation and felt that the best way to present much of the data here was in a dashboard format. I sent some early drafts of a dashboard to a friend of mine to see what he thought of the colors, the fonts, the layout etc. He had never played Overwatch and had no idea who or what Moira was. I knew he wouldn’t understand what "coalescence" or "beam kills" meant, I just wanted to check if the dashboard was clear and readable. "Man," he responded "you are bad at this game". The data was clear at least.

Overwatch is a first person shooter played by some 40 million players worldwide. It consists of two teams of six players each picking from an ever growing roster of characters and battling in a short (10ish minutes) match. When some friends convinced me to join them in January I was drawn to one of the newer characters, Moira. In the extensive lore of Overwatch, set in the 2070’s, Moira is a Dublin born geneticist with a very loose interpretation of medical ethics and is also a fluent Irish speaker.

As well as Moira being the patriotic choice I also enjoyed her playstyle. As a character in the support role her job is to heal her teammates and keep them alive so they can deal damage and get the kills. But when called on she also has the ability to be more aggressive than some of the other supports, she is able to defend herself, take out weakened opponents in close combat or at range and fade to safety if things are going bad. Well...she can when being played by someone who knows what they are doing.

Some of my friends had played Overwatch since release in 2016. They had a vastly better understanding of how each of the characters should be played and played against. One criticism was that I was using Moira’s damage dealing Biotic Orb too much instead of the healing version. I started trying to change how I used Biotic Orb and this inspired me to look at ways of gauging and analysing my performance. I wrote a python script and loaded it into a Lambda task on AWS. Starting from the 2nd of February, every morning at 7am the task would run, pull my data down from an unofficial Overwatch API and save it into MongoDB Atlas. Originally I intended to look at my data with all characters but decided eventually to just focus on Moira. The title of this project, a play on Mercy’s catchphrase, is a holdover from that larger project.


There is currently no official API for Overwatch, one exists but it is not open for public consumption. A number of unofficial APIs exist that scrape data from PlayOverwatch, the one I use is currently down. The problem here is that some of the statistics displayed on PlayOverwatch are wrong, in particular the 10 minute averages. These values could be recalculated using the time played figure for each character but this is only an approximate value, rounded down (I think!) to the nearest hour. I have used this time figure to create averages for use below. There is also a difficulty around getting data to compare against. In recent weeks Blizzard has moved to make profiles private by default so they no longer appear on PlayOverwatch. I was able to get a few open profiles by asking on /r/MoiraMains and by looking at the profiles displayed on stats websites like Overbuff and Overwatchtracker. Some histograms I made showed that the profiles I collected appear to be skewed towards lower rank/skilled players then the average in comparison to data on Overbuff.

It is also worth noting that the data is taken from Quickplay. Team compositions are often more...creative in Quickplay (Attack Torb!) and the result is very different stats as to what you would have in Competition.

Click to open in new window.

My initial aim was to make plots showing my progress from day to day. Each morning my careers stats would be saved, showing for example the total amount of healing I had ever done as Moira. By subtracting my career total for the previous day I could get the amount of healing that I had done in that day. I only looked at days on which I have played Overwatch, "Session" maybe a better description than "Time (Days)". I was at level 33 when I started this project and I was 168 by day/session 62.

Of course a "session" could be a few minutes or a few hours and this value on its own is useless. I couldn’t use the averages or divide by time played as I didn’t have accurate values for these so I created a number of different ratios that would, in theory, be unaffected by session time.

"Eliminations to Deaths" or "Kills/Deaths Ratio" is a common known statistic and is a ratio of the amount of opponents you have "killed" to every death that you have suffered. I have used Eliminations instead of Solo Kills or Final Blows in this project. I first wanted to see if I was indeed overusing the damage orb so I plotted my healing total divided by damage, shown in the above diagram. We can see that I was doing 1.25 points of healing for every 1 point of damage and this increased until I hit 1.50. I decided that I wanted to deal double the amount of healing to damage and kept trying to do so but stayed around 1.50 for a period of time.

While the graph above looks consistent we can see a different story by applying a 5 Day Moving Average. Here the ratio fluctuates above 1.6x and below 1.4x. By collecting data on a daily basis and plotting moving averages we can get a deeper look at player improvement over time. We can see if a bad session is a once off or part of a longer trend.

There are a number of other stats analysed, not all of which are shown above. We can see that I am getting more eliminations per death and dealing more healing as well. Overall it looks like my skill level is improving.

Another problem I found in my early games was target selection. Full HP Roadhogs, Reinhardts being pocketed by a Mercy, these were all valid targets for me in the early days. Moira doesn’t have the ability to deal a lot of damage but that didn’t stop me from trying! Until whoever I was trying to kill killed me, which...yah, that did stop me. By plotting damage divided by eliminations I wanted to see if I was making better choices and this is why I used eliminations over the other measures mentioned above. Here I am also using total damage instead of just hero damage. I wanted to see how much damage I was contributing per elimination. If the value was high, as it was in the start, it possibly indicated I was dealing damage that was going to waste. Over time this number has dropped before plateauing at 240 which could mean better target selection and is a good indicator of an improvement in skill alongside increased eliminations per death.

Moira’s ultimate ability, Coalescence, is a large beam (hence its nickname "Beam") which shoots in a straight line from her left hand. It heals teammates it hits and damages enemies. Overwatch doesn’t tell you how much damage you deal with it but it does tell you how many "Beam Kills" you have gotten. I felt that I was using Coalescence too aggressively and so plotted the percentage of total healing that came from Coalescence. It was day 49 when I thought of this and began to focus on hitting my own teammates with the beam instead of enemies which is why you can see a sharp spike. By the end of the project 14.5% of all healing is coming from Coalescence. I still think this is a weak area of mine, using Moira’s ultimate effectively, and is a point of further study for me.

There are a number of other plots that can be made, such as looking at the number of Defensive Assists per Death, and moving averages can be applied to all these plots to get indicators of recent performance. These would be more interesting over longer terms of play. As mentioned the 10 minute averages are not available but I tried recalculating the values by dividing by the number of hours played and then dividing by 6, the number of 10 minute games in an hour. Messy. This is what gives the plot its spiky nature and while it shows an upward trend I didn’t look at any other averages for these plots due to the lack of accurate times.

Comparison to Other Players

If I’ve been showing all this steady improvement why haven’t I been picked up by a major Overwatch League team? Why aren’t I leading Ireland to World Cup glory?

Initially I only planned to look at my own stats and measure performance from one session to another but I quickly hit the problem of trying to figure out what I should be aiming for. More healing per life, of course, increase average healing etc. But how much healing should I be doing to damage? How much healing should come from my ultimate? Was I being too aggressive? What does the "Average Moira" look like?

Click to open in new window.

For this I needed data from other Moira players; this was never too easy to get in the first place and has became harder of recent as profiles are now private by default. /r/MoiraMains on Reddit gave me a bit of a hand and by hunting around some stats sites I was able to scrape together about 240 profiles with more than 4 hours of gameplay as Moira. Now I could see why I wasn’t in the Overwatch League.

I had a number of questions when making these plots. Were there certain types of playstyles or "behaviors"? Was a high damage/low healing Moira viable or did everyone get pulled towards the middle? Was there an average way to use Coalescence or would the data points be all over the place? Could data like this be used to spot potential recruits or identify changes in established players playstyles?

Some of the findings are unsurprising. The more damage you do before you die leads to more kills! But by fitting a line to the plot we can see that as you get more kills per "life" the amount of damage required per kill increases. 400 points of damage will get you 2 kills but 800 will get you just over 3. 1600 points of damage will get you less than 6 kills. I don’t have a lot of data points at these higher skill ranges so I haven’t produced very many plots with lines fitted. With more data the findings on this and other plots could change dramatically but it is still valuable to see how the data can be displayed and analysed.

Some of the plots can be split into 4 regions, such as the Average Healing to Average Damage plot. In the bottom left (where I am) are low healing - low damage Moiras. Top right are the stars, high average healing and high average damage, of which there are few. In the top left though are the Battle Moiras, those averaging high damage but relatively low healing. There is a solid number of players in the bottom right region, those that deal a high amount of healing but hold off on dealing damage. Plots like this can be used to identify a players behavior. Having someone on your team who will play support is one thing but they may be a liability if they are off doing damage when the team needs heals.

I was interested to see that a players average number of kills falls the higher their healing to damage ratio is. Some of these plots may be interesting to look at but of little value while others may give different results depending on how they are looked at: Average healing to average damage, healing per death to damage per death, healing per kill to damage per kill etc.

These are just a handful of the 30 or so plots I generated and all of these can have regression lines fitted to them. Histograms can also be generated, has histograms for the averages and as I have so few data points I didn’t examine making any but many of the ratios above can be used to make histograms, like damage per kill, percentage of total kills from beam etc.


In conclusion there are a number of methods for analysing player data in Overwatch which, as far as I know, are not currently being used. Plots and regression lines aren’t the only tools at the disposal of those trying to improve themselves or coach others but can serve as an important aid. Long term analysis of career stats can show progression and can put a single very good or bad session in context. There are an increasing number of reports of league players suffering burnout; analysis like this could be used to indicate when players are at risk of this.

Overwatch and eSports in general are becoming big business. Overwatch has a major league which is broadcast on Twitch and will soon be shown on ESPN. There are also national teams and in the US colleges have started to recruit and grant scholarships to Overwatch players. Analysis and comparison of player profiles could be used to identify talent or recruit for specific roles/playstyles. Plots fitted with regression lines could help identify areas that a player needs to improve on. Overall these methods provide a new dimension that could be used during broadcasts to compare and contrast players on opposing teams or for improved analytics.

I’ve given up on my dream of becoming a feared, unstoppable, Moira main dominating the Overwatch League but I still get a tremendous amount of enjoyment from playing the game. I have an all-time high competitive SR of 1600 and in quickplay I’m doing as much healing as others are dealing damage. But even in games I lose or feel I was carried in I still enjoy myself if I’m playing well by my standards. Giving players stats that allow them see where they need to focus on so they can play well and enjoy themselves could help with player retention.

These measures of course only look at players individually and don’t take into account the effect team composition or the skill level of their teammates and opponents have on a players performance. But even just from taking a closer look at my own data I feel I have gotten a better idea of what I need to do to improve and what I need to focus on. I’d be interested to hear the opinions of those involved in coaching especially as to what kind of value this type of analysis might have. Now, if you excuse me, I’ve got some training to do!