Friday, April 28, 2017

The Feedback Button

We want to be able to collect feedback from players, and team members. So I made a tool to make it easy for anyone to send feedback from anywhere in the game:


When the player presses F11 we immediately take a screenshot and make a copy of the log file, and place both in a new, numbered folder.

Then, we show this dialog, and let the player enter some information, including steps to reproduce, if it was a bug, things like that, and an email address in case they want to hear back about the issue.

Then all of that is zipped up and posted to a little server app, which forwards it as an email to me.

Now I... I am not what you might call a web developer, or even really a back-end guy at all. I found this (extremely simple) little app to be a minefield full of potholes.

I'm using Google App Engine to host the server-side code, because I wanted to be able to deploy java without paying anyone a monthly fee. (And well, I didn't think I should run it on the same VM as our perforce server in AWS.) Setting up GAE was interesting. Their tools seem quite good but they offer a dizzying array of products and services and most of their material is oriented towards selling you on particular flavors of compute, storage, etc..

great work team.

In the end I was able to create a little app using the IntelliJ plugin. Once I got it installed correctly, this was a really great way to work. I can iterate locally, run the app on a test server, make rest calls to it from a command line (after I installed curl, which, ok, I am on windows...) and eventually from my game as well.

The first hurdle was to get all the data from the game zipped up, posted, and unzipped. This proved to be surprisingly easy. It really just worked the way it oughtta using the vanilla java api. Nice.

The next hurdle was to put that information into an email, with attachments, so that I could act on the feedback. I at first, very naively, thought this would be easy. Email seems like a cornerstone of the internet, built before the social networks, laid down before the dawn of the search engines. Surely sending an email could be no challenge.



But it turns out, google really doesn't want you to send emails from their servers. And there is a great reason for this, it's a four letter word and when the internet was young, wars were fought over it.

SPAM

It turns out that in the modern era, email is assumed to be spam until proven otherwise, and there are things like "ip reputation" that go into proving otherwise. So yeah, you can pay a third party like mailgun or someone a monthly fee in order to be able to send your emails thankyouverymuch.



After doing some more research, it turns out that if you are sending a small number of emails, and you are willing to send them "from" a restricted set of email addresses that are definitely not official-sounding, then google will let you send 100 emails per day for free.

100 emails. per day.

Whatever good enough for now. (Also the mail api is horrible. Like abysmally bad. A better api would have been a huge benefit of going with someone like mailgun honestly.) So anyway once I got that sorted, getting the app running in the cloud was super easy. The intelliJ plugin took care of it for me. <3

In the end, I got my emails.



I am really excited about being able to take direct feedback like this. I have big plans for this little system. In particular, I get logs and screenshots with no extra effort on the part of the player. Keeping this friction as low as possible is important, if you actually want to get feedback.

Also, since it's coming directly from the game code, I can add all sorts of metadata, like what event the player saw most recently, their game settings, other things like that. In a world where we get many bug reports a day, that kind of structured data can be hugely impactful.

Here are some ideas.

Task Integration

We use trello for backlog and bug tracking. Trello has an api. Each time someone presses the feedback button, we could create a card in trello, in the right board depending on the category, complete with attachments, and assign it to a team member for triage. Hot sauce.

Game Integration
  • Crash reporting: automatically send logs when the game crashes?
  • Event feedback: when you're playing and an event choice comes up, sometimes none of the choices represents what you want. What if you could push a button to suggest a new choice at that point?
  • Upload save games: when reporting a bug, you could choose to upload your save game state so that the developer (me) can see exactly what you're seeing.

Data Analysis

Eventually (when we have y'know, players) we can run the feedback into a database instead of just reporting it to the devs, and then we can start to analyze it. This is far out, but it's a cool possibility.

Thanks for reading, send us your feedback!

No comments:

Post a Comment