What can we learn from "Flappy Bird"?

My first encounter with Flappy Bird was checking the App Store's top free games list one morning then promptly wonder what on earth was going on. I could not understand how this game was top of the charts and why his other mini-games and rival games with "Flappy" in the title were not far behind.

The following controversies were also incredibly baffling, everyone loved this challenging yet very simple game, I could not work out why and for the most part, neither could anyone else. The creator himself also seemed very shocked by his instant fame and fortune, I really have to give kudos to the guy for how he has taken it all. He really is a nice bloke who quite simply wasn't in it for the money, just making fun games.

So what can we learn from the whole Saga?

  • The nature of the App Store can be unpredictable, the precise events which have lead to the explosion of this game are untraceable. It went viral so quickly and so strongly I don't think anyone could have predicted it.
  • Time != Sales, this point scares me. Flappy Bird was created in just a couple of days (hell, I made a version of Fish Slapped which emulated Flappy Bird and the total conversion took less than 4 hours). Sometimes these mini-game experiments can yield good results, even if the game is quite difficult.
  • Be prepared for success. Someone has to get lucky and have their product go viral some times. Be prepared for potential success by keeping your business in order and being in control of your social media.
  • Advertising is a great business model for mini-games. The developer was making 50k a day in google ads, that is incredible!

Most importantly, there really isn't anything we can learn from this experience. Just need to take it for what it is and keep working on making great games wether they be large scale or as small as flappy bird.

Peer review and beta testing is essential to all software businesses

I'm an indie developer in every aspect of the term 'indie', I'm not against working in a team, I love it in my day job but unfortunately there aren't many software developers in this town and even less available to sit down with me and let me bounce ideas off of them.

Sometimes being clever isn't enough, software is a marketplace where perspectives matter and getting as many perspectives on your product before dropping your MVP (minimum viable product) on the public is what can make or break your product releases.

So what can you do if you are like me and don't have people who can sit down and talk about your products readily available?

Beta testing!

It's not uncommon to perform beta tests within your small development group and yourself following good TDR (Test Driven Development) but there is so much more to a good product release than finding bugs, you need to find issues with your UX (User Experience).

How do I do a closed / public beta?

  1. Pick a distribution platform - iOS has limited ways to you can beta test but if you have a way to collect UDIDs from potential participants then adhoc distributions are not that difficult and don't put too much stress on the participant. You can give them this website to make instructions easier. Look at other options as well, Test Flight has received good praise.
  2. Get analytics - You can't rely on your beta testers to give you feedback, especially if you have never met them. Use a service like parse to feed back useful data such as how many levels were completed in your game, how many retries, how many error screens were presented, etc. 
  3. Add a dummy payment system - In-app purchases need to be tested too, when designing your store kit classes be sure to implement a way to set a boolean switch for test mode where it can allow purchases separate to the actual store kit. Use compiler #if statements to make sure the code can't be manipulated in release.
  4. Let the participants give you feedback - What I like to do is set up a form in google documents stored on my google drive. You can make fairly detailed forms, make them public and then see all the background data collected in a nice neat spreadsheet without spending a cent. Then pick a logical point in your game (such as at the end of the final level or after 20 attempts to then ask them if they would like to provide feedback and send them to the form. This is important as you are narrowing down the feedback to people who actually played the game to a specific point.
  5. Ask for more feedback - In addition to the above, have a separate form for bad experiences. Measure the number of memory warnings, error screens, crashes, levels failed and then ask them if they would like to submit a bug / issue report. You will see this data in your analytics but its important to get the direct opinion of the user as well.

Hope you find this useful and is enough to get you started. Don't fall in to the "I know everything" trap.

5 things Apple could do to make Game Centre better.

Apple are known for their ability to look at something and see why it is good, not just from a technology perspective but the user experience and joy of each individual tiny action. One area I feel they have struggled though is Game Centre, here are a few ways I think they could improve it:

  1. Cumulative Gamer Score  - Each game centre game has achievements but there is actually very little incentive to go out and grab a heap of games in order to boost your cumulative total of gamer points. It's gotten better in iOS7 but still a long way off being perfect. The Gamer Score needs to be a bigger feature and everywhere.
  2. Better Friend Management - Why not integrate with Facebook, twitter, contacts, etc to build up a large friends list of gamers who you can invite and challenge to games? Then take it a step further to show their gamer score and some other details on their contact page and integrate game invites and special sharing of custom game events via iMessage.
  3. Allow Developers to Share certain Content in GameCentre App - We all have the little game centre app on our phones but it is rarely visited. Apple need to find a way to boost it's usefulness by allowing for news, deals, content offers to appear on a "wall" like feed. This feed can also show significant game events like someone getting an achievement or sharing a high score / screenshot.
  4. Party Functionality - Now that MFI controllers are coming it is fair to say iOS is stepping up it's game. Wouldn't it be great if you could have something like a group FaceTime call with 3 or 4 friends then, switch to a match of a FPS game with all of them in the same group and continue talking maybe even with a PiP.
  5. Allow Developers to Be Your Advertisers - This really isn't hard, if games were able to integrate more fluently with game centre and show players their cumulative gamerscore, what friends they have online, what their friends are playing, do they have room in party, etc. There are so many ways developers can promote services of game centre and it will only encourage more people to use it.

While I understand a lot of these features have probably been denied in the past because it would take away from their overall goal of having a phone or tablet for all purposes, not a heavily game orientated platform, these changes might help people discover portable gaming and how great it can be.

I'm sure they are watching what Microsoft and Sony have been doing with their latest consoles and I hope they plan to learn from their trials.

Handling SpriteKit node positions

When SpriteKit was announced one of the features which really got my excited was the high compatibility between iOS and OSX. The demo project displayed at WWDC and then made available from the dev centre later even had a project which contained both iOS and Mac OSX versions.

One thing that SpriteKit seems to be lacking though is a universal control for positioning assets. While this isn't exactly hard to create there are an awful lot of ways to go about creating it and exploring which is the best is a long process.

Things to consider:

  • You will need to predicate a lot of the code to check if the compiler is compiling in OSX or iOS.
  • For the tool to be useful you will need to to be able to scale up and down screen co-ordinates and / or screen percentages, take in to account landscape / portrait orientation AND allow for fine tuning with offsets.
  • Don't forget to allow offsets for 4 inch screens.
  • Handle scaling, shuffling, etc on Mac OSX.
  • Do you want objects that are resized to keep their aspect ratio.
  • Varying anchor points.
  • Need to account for the future, such as error handling for unknown screen sizes, allowing room for changes and improvements in SpriteKit.

These are all very important and intertwined, so why even make a helper class to handle them? Well, there would be an awful lot of space taken up in our app by code if we re-wrote or copied and pasted every time we wanted to position or size an object.

It's also handy to be able to update these methods from the one place should code change in the future rather than digging through every single point you positioned an object.

The helper class I've been working on returns a CGPoint or CGSize depending on the parameters you pass in to the method. The co-ordinates you pass in are based on 3.5 inch iPhone screens and they are scaled based on the current screen size and fine tuning offsets.

The class isn't perfect and needs a lot of refinement and testing but I plan to release it on GitHUB after my first app using it is released in January. Any advice or points I may have missed would be most appreciated while I test this helper class out.

Merry Christmas!

I just wanted to take a moment to extend a very merry christmas to all customers and associates. It has been a fantastic year and I'm really looking forward to next year with my impending 12 month challenge.

What have I been doing so far?

A challenge like this needs a lot of prep work, while I haven't started making any games I have been jotting down a lot of ideas and working on a menu template I can use on all games and also give away as part of the finished bundle.

The menu template will save heaps of time in the process by having game centre, analytics and store kit fully implemented with warning directives to remind me what needs to be done to have it ready to roll out.

I think this will be a good foundation and lets me concentrate on the 12 games rather than the fiddly detail.

I hope to have this menu template complete by the 1st of January so that I can start work straight away in the new year.