Gamifying Game Development: The Making of App Achievement Unlocked
Hello developers! I’m here to talk about some neat stuff about my newest app, App Achievement Unlocked! The philosophy behind the game, giving back the community, and some behind the scenes work. App Achievement Unlocked is unlike my other apps that are geared towards kids, this app is geared towards app developers like you and me. I wanted to make something a little different from my usual releases. It was fun to tackle entirely different challenges than the same old set of issues, and interesting to think about new ways of creating a game.
There was a fascinating talk on Gamification a few years ago, put on by Pratt’s Free School series of lectures. It was a short talk, but it gave me a lot of new insights into recognizing the game systems that are built into the world around us. Obviously board and video games are gamified, but once you start looking for the pattern of creating a situation where the user has a choice of actions and can accumulate rewards and/or avoid penalties you see it all over.
A simple example, grocery store loyalty cards- sign up to get special deals, and around Thanksgiving if you spend enough dollars there, you’re rewarded with a free turkey. Students gather up enough credits to be awarded degrees. Accumulate enough points for bad driving on your driver’s license and you get penalties and fines. Get a credit card and get 2x points at certain retailers, and 4x points at certain times of the year. You’ll even get a nifty rewards catalog in the mail if you want to cash in your points. Spend enough annually on the card and advance to the next level of elite credit cards!
I’m not endorsing these things (although free turkeys and education are important), just showing examples of integrated gamification systems. They’re all around us!
Developing the Concept
As I’ve moved through the game development community, met more developers and got to know more about the process and people’s game career trajectories, these thoughts of gamification stayed in mind. Many of the developers were working towards common goals- become successful app developers, of course, but also we were all working towards the same specific milestones. Even though experienced developers are further into their app-making careers than those just starting out, we’re all aiming for the same targets. We all want increased the downloads, revenue, recognition and experience that will enable us to continue and expand on our work. We all get excited when we hit a certain milestone- when our first app is published, or when we hit our first thousand downloads, or when the media takes notice of something we’ve created.
App Achievement Unlocked was created to gamify the game-making experience by rewarding trophies to help developers get excited about these milestones that help propel us though our careers. Not only can you keep track of milestones for your different apps in a cool little trophy case, you can also spread the good news to social media with cool little award badges. I tried to list as many achievements as I could think of for a development project, big or small- so you can celebrate your 100th download or being the top app on the app store (Niantic, this trophy is waiting for you!). It’s also meant to provide ideas on more ways to grow and expand an app’s presence. Maybe you hadn’t considered localizing, working with another person or advocating to get your app featured in your local newspaper, but there’s trophies for all these and more.
It’s my belief that you have to fail before you succeed- or at least fail at some point. It’s part of the game and if you work on this for long enough, you’re bound to hit road blocks. The app has sad-face trophies for your first return (how could someone not love your app?? Impossible!) and for your first negative review (now you’ve really made it in the biz! Random people are taking the time to leave you feedback, not just your closest family and friends). Both cases are annoying but hopefully these silly trophies will lessen the sting, knowing it’s a common enough occurrence that there’s an achievement for it.
Giving Back to the Community
Working in independent development can be a rocky and isolating path. It can be rewarding and fulfilling, but the guideposts and steps to success are not always clear for developers working on their own. Thankfully many many local and online communities have sprung up all over the place to help guide you on your game-making quest. I’ve been lucky enough to be a part of several communities over the years and would not have been able to do everything I did without the help of so many developers willing to lend their time and advice. I’m very grateful for all of their help, so I try and give back to the community where I can- time, feedback and advice to other developers, and now App Achievement Unlocked. My hope is that it can be a fun, easy to use resource and that the game development community can use to get inspired by their own work.
So that’s the philosophy behind App Achievement Unlocked. There was a lot of time to think about all of the above, as the project ended up taking much longer than anticipated. I consistently estimated “about 2 weeks” before finishing… for about 8-12 weeks. Ha! I should have included a “Vastly underestimated the time it takes to make an app” trophy.
The Making of “App Achievement Unlocked”
In addition to why the app was made, here’s some information on how it was made. There are new features for this app that haven’t been included in my previous apps (or that exist in different forms in different apps). Of course there were new and interesting bugs as well.
Corona SDK was used to create this app (and all my apps)- if you’re looking to work with an app-making software that gets you up and running quickly, check it out!
Databases, User Inputs and Dynamic Layouts
First up was to design a database system on paper, get all the fields and keys and whatnot sorted out, then implemented it with sqlite. The database keeps track of the user settings (standard across all my apps- number of games played, if it’s unlocked, scores, etc), the trophies accumulated, and all of the apps that the player has created so they can easily add multiple awards for the same app. I used a similar system for App for Dog to keep track of the user’s dog’s paintings (it’s a painting game for dogs), although obviously I had to change up the databases to reflect app achievement data instead of dog painting data. I have a homemade sqlite library created for App for Dog with custom functions that allow me to quickly and easily manipulate the data, so that was modified and included as well.
When a user “applies” for a trophy, they’re presented with a little form. I used native text input boxes and little picker wheels reminiscent of HTML forms (remember the 90’s? Good times). Different fields appear based on the data that’s already entered. To prevent the user from submitting an incomplete “application”, a function checks for all the data and prompts the user to fill in any missing data.
Later when the user is browsing their trophy case, they can tap on any trophy for more information. Because not every achievement has the same data (some include app titles, some have sub categories, etc), the page detects the appropriate app data from the database and dynamically displays it in one of several pre-determined layouts. It does the same for the trophy badges that you can share. Tweaking the formatting so each block of text looked nice in every format took a little longer than expected, especially since it appeared slightly different on Android and each possible layout had to be adjusted.
One of the other major challenges I faced was creating the dynamic pagination. It looked easy at first glance. The first page is displayed, users can click forward through the pages, or backwards, until the end of the pages. That worked fine, but once unlockable pages were added, (the first 3 pages/trophy cases are free, it’s $0.99 to unlock unlimited trophy space) the trouble started.
Then the app had to detect how many trophies existed, how many pages it would need, how many trophies go on which pages, how to detect when to activate the navigation arrows, flipping to the most recent page when the user adds a new trophy, and moving back one page if they remove the first trophy on a new page.
It went from a quick looking process to a nightmare very quickly! Probably more time was spent debugging the page flipping mechanisms than anything else. My other apps have similar features, but those navigate through a static number of pages. Since this app can have a variable number of pages, it was a whole new ball game.
I know this seems like a lot of extra stuff to think about, and I agree. It was frustrating that it wasn’t a smoother process, and this navigation code definitely won’t be packed up for future use (it’s a bit… patched together in spots. Like a pile of spaghetti with some band-aids.)
Graphics and Audio
The graphics for the app- the user interface and the trophies themselves- were all created in Illustrator. Normally I use Photoshop, but after going through some previous app art, the vector really stood out strongly. So even though vector art takes me longer to create than bitmap art, I went for it. Lots of trial and error and so much clicking through art groups. The finished art looked nice enough but once it was dropped into the app, it read flat- very disappointing, all that hard work and it still looked bad!
I also wanted desperately to include this super charming music from a stock music site. It has multiple loops with different variations on the theme. The app’s background music system is set up to keep on tempo but switch out the music for a different loop when you move through the different sections- so beat of the music stays steady, but you hear variances in the tune as you use the app’s different features. I am delighted it worked. I’m also delighted to use this music- this song has been bookmarked for months and was really cool to finally be able to use it in a project.
The big lesson from this app was that simple-seeming app ideas might be more complex than they appear. This idea had been jotted in my notebook for years and I figured it would be simple- write up a small database, flip through the user’s trophies, make some trophy art, done. It ended up taking many months to create debug just about everything, follow intricate steps to reproduce rare edge case crashes and bang my head on the wall.
Finally, one of the developers in a Facebook developer group asked about the iTunes Connect annual shutdown. I panicked, I’d been working on this app forever with no end in sight but was hoping to have it out by the end of the year. Development tasks had to be moved up a few weeks and it turned into a real crunch time to be able to submit before the shutdown.
I was ruthless, I went through my features list and slashed everything that wasn’t essential- my goal was to launch a MVP (minimum viable product) by the shutdown, no matter what. A lot of fun features were removed, including particle effects and localization (maybe version 2?). I went through the bugs list and hacked my way through them. My weekends were spent working on metadata, writing descriptions, gathering keywords, and making screenshots. The promo video was skipped for time but is still on the drawing board, as is the Android version of the app (it’s so close!).
So I didn’t get every little last thing I wanted for this project, but I got a complete, well-functioning, and fun little app out on the app store in time for the shutdown. I’m still hoping to work on version 2 features at some point in the future. I really enjoyed working on this niche app, but I’m excited to get back to my regular work- apps for kids!
I hope you’ve found this writeup useful- whether it’s to compare this app’s development process to your own or just to learn more about gamification and App Achievement Unlocked. It’s one of my favorite projects so far, so if you’re an app/game developer, please check it out! It’s free to download and fun to use (and it’s fun to brag about your accomplishments too!)
App Achievement Unlocked
Free on iOS