Our quest to make bug reporting easy
Published 3 years ago
In-game bug reporting made easy with a simple Unity prefab
Being a game developer for ten years taught me one thing about game architecture: it is made out of living bugs. They are hiding everywhere in every corners. Some are weapons of massive destruction easily spotted, some others have just the potential of being big bad bugs, waiting for the right unexpected set of conditions to declare themselves and crash everything on the way. The “fun” fact with bugs is that the more you create patches to eradicate them, the more you create new bugs you won’t be able to fix before the game releases.
The first people to suffer from bugged games are the players. Twenty years ago when a player found a bug in a beloved game she had no ways to tell the developers about her findings. This incapacity to make the game better quickly changed into frustration. As you might know, frustration leads to anger, and anger leads to the dark side of the Force. Fortunately for developers, back then, players had almost no means to communicate their frustration to the World.
Things are so different now. YouTube, Twitch, blogs, forums, Twitter, Facebook… They are just a few of the several means players have to scream their frustration about a game. The word can be spread so quickly that even a nice, gentle, and easy to fix bug can put in danger the whole game and developer reputation, and change forever the way the game will sell. Crazy right?

The problem with games and bug tracking solutions

What’s really crazy is that even if tons of bug tracking solutions exist since decades, it’s still hell when you want to report a game issue.
Here is a classic scenario: You’re alone in your garage developing the GOTY 2020, and because you are a smart game developer you use a solution to track issues (let's say Trello), and you often test your game to be sure that the bugs are not too visible. You start the game, play for two minutes, and a weird thing happens. When you press Y and B buttons at the same time the tint color of the main character’s head changes just a little bit. It’s very subtle but it’s here! Let’s capture it in a screenshot! You are now full of good will, and ready to fill a new ticket.
Since your bug tracker is web based you have to leave the game and start your favorite web browser. You type in the URL. Oh yes, you have to log in… let’s type in your username and password. Ok logged in! Oh you have to select the right project board for your game. Hmmm you browse among your twenty boards… Ah! There it is! Ok, now you have a dozen lists to browse in order to create your issue at the right place. Found it! Sweet! Let’s add a new ticket now. Oh what was the bug again? After all this browsing, clicking, selections and navigation you need few minutes to remember the bug. Ah yes the thing with the head color change… You spend two minutes writing a detailed and very useful bug description. And then you remember that you have taken a screenshot of it… But where the hell was it saved?! After a few minutes navigating through your filesystem you find it, and attach it to your bug description. After the end of the upload, you can proudly click on the “send” button. Congratulations, a new bug is online and you made it without realizing that the only important part of the whole process was the two minutes spent describing the issue. The rest was just noise and waste of time.
The situation described above will be repeated hundreds, sometimes thousands, of time during the game production. Imagine how much time is wasted doing something else than just describing a bug as clearly as possible. Worse, the situation above is the best case scenario. Imagine now that you have to do the same thing on your smartphone. Good luck with switching between apps and finding your screenshot on your device.
Add the fact that some bug tracking solutions are very VERY powerful but clearly designed for QA specialists with Stephen Hawking’s brain capacities and having “astronaut” mentioned as a hobby in their resume. These systems are so complex that lambda developers will sometimes be scared of them and prefer not filling an issue instead of engaging themselves in a black magic fight with a dark and clearly vicious system made out of voodoo.
So many buttons to click on. So many ways to screw everything. Brrrr... Scary.
Whatever the reason why you waste your time, even if the reason is to give your game a chance to be better, the time is wasted forever. It would be better spent working on the game, adding new features, or fixing bugs. But you will waste it because there are no other solutions out there. Wait…
Oh… yes… Gustave.


I have not introduced myself yet, how rude[1]! Remember the story of that dude working on the GOTY 2020 wasting his time instead of doing awesome thing for his game? Name him Laurent and it will be me. I banged my head on the table thousands of times because of this process, or because of screenshot-less silly bug descriptions made by players. So when my friend Geoffrey, fantastic web developer, told me the problems with bug tracking were almost the same in his field and pitched me a solution we immediately thought it could be even better applied to game development. This solution is named Gustave.
Gustave is your personal butler in charge of dealing with the complex bug related things for you, allowing you to focus on what’s important: making a great game.
Gustave has been designed to act like a link between your game and your bug tracker and aims to drastically reduce the time spent filling issues.
Taking the shape of a Unity prefab, the configuration process is easy. You go to Gustave's website, allow it to have access to your bug tracker, and it gives you a Gustave project ID. Paste it into the Unity prefab, et voila. You’re ready to discover the joy of having a personal bug butler… a bugtler[2].
Let’s replay our scenario but using Gustave this time:
When you start your game for testing purpose a small Gustave icon appears in a corner. The wild tint color bug appears again so you click on the icon. Gustave automatically takes a screenshot for you and asks you to fill in a title and a body describing the issue. Once done, you can proudly click on the “send” button.  Extra data like random seed, player position, duration of the game session… are gathered and automatically added to your issue. Your ticket is then created on your bug tracker.
Easy right? It will work whatever the solution you’re using[3].
Also, as everything has been done from INSIDE your game, you can then continue playing and testing it right after your issue has been sent.
Of course you can add as many screenshots as you want, or even don’t add screenshot at all. You can also “annotate” them: draw on the screenshots to highlight important parts of the image. It’s then easier to detect a tiny visual bug like a very subtle tint color change on main character’s head.
Oh… one more thing. Gustave is a link between your game and your bug tracker, and because it’s very easy to use, you can even let your beta testers use it without having to give them the keys of your actual bug tracker! Just let them play with a game build containing Gustave and they will track and find bugs for you. Even the rare ones you can’t detect by yourself because you don’t fulfill the proper conditions. Remember the story of the frustrated player who couldn’t help her beloved game to be better? Well, you can forget it know.

Why Unity?

We decided to develop Gustave as a Unity prefab simply because I’m a Unity developer myself. I know the engine capacities, philosophy and how easy it can be to add extra features to a game thanks to Unity's package system. Bug tracking is a tough and complex subject that every game developer has to deal with at some point, me included. As the engine doesn’t provide any built-in solution (yet) for this need, and as I clearly needed something like this one, we thought it would be interesting for my games, but also for every other Unity developer’s game, to create Gustave.

What's next

Gustave is still in its early stage but we already have tons of awesomeness planned in our TODO lists. Among those that I can reveal you can find:
  • GIF creation
  • Last minutes of gameplay recorded as video
  • Custom log files chosen by the developer to be added automatically with every issues
Already running with pre-alpha testers, you can register to to register and use Gustave as it’ll be in alpha.
[1]: Well... I'm French...
[2]: This is not a sex-toy
[3]: Gustave can be used with systems like Jira, Trello, Redmine, Zen Desk… and if you don’t use any it will send you e-mails
Laurent Victorino
Game Programmer / Teacher