On November the 17th of 2020, the Overwatch client got an update to its workshop system, that introduced a new feature called "Log To Inspector". Marketed as a way to debug custom games, it allows a custom game to log any value to an internal log collecter, and copy those logs to the clipboard so that they may be pasted to a file and reviewed.
In short, we use this function to log out internal values in a concept we call "events". We then take those events and parse / aggregate them on this site, to derive fight base statistics.
In long, when something occurs within an Overwatch game (a kill, ultimate cast, ability cast), we log that occurrence to the console in a format that is both understood by the user, and understood by a computer. But just raw events overtime doesn't tell us a whole lot about the game- I suppose you could go through and count all the times that Direwolf inted his brains out but that doesn't tell you a whole lot beyond the fact that he's bad, and it's data without context- Data existing for the sake of existing.
See a more useful stat would be, how often Direwolf ints when he's on Lucio on Kings Row. But you can't easily get that from a simple list of events, because events are just moments in time, with no real relation to each other. So we need to build those relationships, and we do so by creating a list of every fight that has occurred within a given round of Overwatch, and sort the events into those fights. Through those now sorted events we can now infer what map is being played, who's playing and what hero they're on. Then we can start to count the number of times that a player on [X] hero has died on [X] map by looking at the death events tied to a specific map.
Which not only allows us to answer the question before, but allows us to dig further into the context of these deaths and begin to create hypotheses as to Direwolf's inting. We could look at who else is dying in the fights, and at what point in time they're dying compared to Direwolf, and find out that he's the last person to die consistently when he's on Lucio on Kings, which may let us know that hey maybe Direwolf isn't actually inting at all.
Which is something you could never conclude sheerly based on the number of death events that the poor sod had on Lucio. So in order to allow you to achieve such understandings, we've created this website, which not only can convert these Event Logs exported from Custom Games to CSV (Allowing you poor spreadsheet jockies to begin analyzing data), but also converts these logs into a fight based context.
In our case, a fight is defined as a period of time where in which two teams invest resources (cool downs is the easiest example) to achieve progress at either defending space, or taking space. But in order to sort our data into a fight based context for better understanding, we have to find out when those fights are occuring... so how do we go about that?
Well we use a DBSCAN Clustering algorithm to determine periods where in which events are clustered together, those periods of time are then marked as fights. At high levels of play, teammates group up and perform solid pushes as a unit, creating space of time where in which large conflicts are occuring, and periods of time where in which no conflict is occuring. This makes this algorithm the most optimal method of finding fights, however as Jack always yells at me about, there are better methods of finding fights, that involve looking at the derivative of global healing done and damage done, but in the Workshop's current state such algorithms are impossible to implement- However changes are on the horizon, and both Leguminote (the author of the fight detection algorithim) and I will pursue those methods of fight detection when we have the capacity to do so (probably 1 - 2 months after Beta release c:)