Income Report for December 2016

I’m making my income reports, including traffic numbers, public. That way, anyone thinking of starting something similar can see real world numbers. There are a lot of other sites sharing their income, so why does the world need another one?

I’m sharing the figures from month 1, which isn’t that common. Also, I can’t see many income reports from mobile app developers. So I’m hoping that this is something unique.

My hope is that these reports will inspire someone else to try something themselves. Please let me know if you think I can improve them. I’m always looking for ways to improve.

Current Status

December was a major month for me. On a personal note, I’ve been taking the opportunity to relax now I don’t have a full-time job. It was a lot weirder than I thought, but I’m very glad I did. December was the one and only month I’m going to do that though, so January will be full speed on this and job hunting.

The biggest thing was the release of my first ever app. Basic Pairs is never going to be a £10k/day earner, but it’s a major psychological event. I sat on releasing it for weeks, mainly through fear. Fear of what, I don’t really know. But I know that clicking the “release” button and getting the confirmation that it was accepted felt like a load was lifted off my shoulders.

I’ll be trying hard to not let fear control me again.

Hours this month

As always, I track the hours I’m spending on this project. It helps me track “return on investment” and highlights how much effort is required for something like this.

Topic Hours
Income Report for November 2016 2
Sharing Code between React.js and React Native 3
First Game Post Mortem 2
Dev Diary – Hangman in React Native – Part 1 6
Polish and publish Basic Pairs 6

Total Hours this month – 19

Traffic for December 2016

Audience Overview - December 2016

Audience Overview – December 2016

Only a very slight change this month. I think this site is currently consistently worth about 1000 sessions a month.

Audience Stats - December 2016

Audience Stats – December 2016

As analytics was broken for a third of last month, this isn’t that great to look at.

Acquisition Overview - December 2016

Acquisition Overview – December 2016

My new post on sharing code between React and React Native went straight to the top. It’s interesting that previous big pages are nowhere to be seen.

Page Views Top 10 - December 2016

Page Views Top 10 – December 2016

A nice increase in organic search.

Monthly Income

Description Value
AdSense £0.97
Chitika Ads £0.19
Chitika Referal £0
TsoHost Referal £0
Amazon Associates £0

Total Income £1.14

Monthly Expenses

Description Value
Site Hosting £1.25 (£14.99 a year)
Play Developer Licence £20.24

Total Expenses £21.49

Profit over time

Total Profit £1.14 – £21.49 = £-20.35

Income Over Time - December 2016

Income Over Time – December 2016

Analysis

Best month yet income wise. If I didn’t pay for the Google developer account, I was only 11p down! I’m going to be trying hard to focus and produce more stuff in 2017. Hopefully my December 2017 income report will be vastly different!

Lessons learned this month

Releasing an app is trivial

The process to get an app on the Google Play Store is very simple.

Progress this month

Like every month, I set myself some targets in my previous income report.

  1. Update Basic Pairs so it’s out of the “functional but ugly” category – Success
  2. Try to get Basic Pairs on the play store – Success Basic Pairs
  3. Make a chrome extension for Meeting SuiteFail

I made a chrome extension, but it was nothing to get excited about.

Other things I achieved or I think are worth celebrating are:

  1. Added a “Games” and “Tutorials” page to the site so it’s easier to get to them.

Target for the next month

  1. Create a Hangman game for the web and android
  2. Join CodeCanyon and make BasicPairs available
  3. Investigate 3 open source React Native apps

Dev Diary – Hangman in React Native – Part 1

Welcome to part 1 of my first ever dev diary. In this part, I’m writing about the plan and what I hope to achieve. In future installments, I’ll provide details of progress, problems and any new techniques. I’ll even provide download numbers, income and anything else that’s interesting. Join me while I create Hangman in React Native.

Sign-Up To Get the Code

As with all of my games, I’m planning to release the source code. Only those who sign-up to my Game Development mailing list will get the code. You’ll also get access to any updates I make when I add new features.

The source code is then yours to do with whatever you like. Want to re-skin the app and publish it in the app store feel free. I’d love to hear how you use my stuff.

Sign-Up To Get the Code

* indicates required


Why Hangman?

I’ve only just started making games. I’m not confident enough to tackle something ambitious. Basic Pairs went well, but there wasn’t much too it.

I want something that just stretches my skillset. Hangman seems like a nice little progression. The rules of the game are simple and all the events seem to map to a state machine.

Finally, there are also a lot of existing apps out there to draw inspiration from. So that’s what I did first, checking out the competition.

Analysis of “Competition”

I’ve looked at a lot of hangman games. The “best”, something I won’t be recreating anytime soon, was definitely http://html5games.com/Game/Sweet-Hangman/aa85b89b-8a1a-4af2-9f1d-774821215eb4. Maybe in a few years’ time I create something as impressive, but for now, I’ll stick with the basics.

Common Features

I noticed the following common parts when looking at the existing games:

  • The letter keys are show. So no need for device keyboard
  • Most of them write to <canvas> although some don’t
  • Lives counter
  • Category Description
  • Hint system

No So Common Features

Among the more complex games, I noticed the following features:

  • Using local storage to remember won and lost count
  • Multi-Player
  • Category Selection
  • Progression via coins to unlock more categories
  • Level complete ratings
  • Music
  • Leaderboards
  • Async play over a network

Some of these I would never have thought of, so I’m glad I checked out the others. Maybe one day I’ll add them, but for the moment I’ll aim to match the common features.

Prototype

I wrote about why you should create a prototype so I have.

Hangman Prototype

Hangman Prototype

Conclusion

That’s the plan. I’m going to track the number of hours I spend writing the game so we can see my ROI. If you have any questions or comments, please let me know.

If you’d like access to the final code, sign up below.

Sign-Up To Get the Code

* indicates required



First Game Post Mortem

After putting it off again and again, I’ve finally published my first Android app. Basic Pairs is live in the Google Play Store. This post is my first game post mortem where I point out some of the things I’ve learned. Hopefully my future game post mortem posts won’t contain the same mistakes.

What Went Well

Starting Very Simple

I’m fairly sure I could’ve made a more complex game, but I’m glad that I didn’t. Why?

  • This was my first game.
  • It was the first time I used React Native.
  • I have never published an app before.

That meant I didn’t need to put too much thought into the game side of things. Figuring out how to structure my codebase, http://myappincome.co.uk/sharing-code-react-js-react-native/, was hard enough. I might have given up if the game was hard too.

It’s not to say it was an easy game to write. I think it was just far enough out of my comfort zone that it could be classed as deliberate practice.

React Native

I really enjoy working with React Native. The developer experience is excellent. Hitting save in your editor and then seeing the emulator refresh due to hot reloading is awesome.

Christoph Michel has recently released a much more complex app and blogged about his experience at http://cmichel.io/lessons-from-building-first-react-native-app/. So I’m not expected plain sailing in the future, but so far I’m sold. BTW, Christoph is churning out some fantastic stuff, so I highly recommend you check his blog out.

Making the game “pretty”

It’s nothing to be too excited about, but I’m glad I managed to turn the app from this:

React Pairs After 1 Week

React Pairs After 1 Week

To this

Basic Pairs After 2 Weeks

Basic Pairs After 2 Weeks

Credit goes to http://opengameart.org/content/country-field and http://opengameart.org/content/monsters-2d-pack-no-2 for the images. Apparently I don’t need to do that, but credit where it’s due.

What Went Wrong

setInterval hits performance badly

I wanted to display a timer of how long each level was taking. I made it work with a setInterval of 300 milliseconds. That ran fine in the emulator, but when I put it on my phone, especially on the level with 8 pairs, it ground to a halt. The interface was unusable.

I couldn’t get to the bottom of that, so took the feature out.

Not porting features instantly

The android version looks a lot nicer than the web app. Instead of ploughing on with the android app, I should’ve ported each feature to the other version as soon as it was finished. If I ever get a Mac and have three versions to maintain, I’m going to struggle to keep them in sync without more discipline.

Updating Versions Mid Project

I updated react native as soon as a new version came out. Rather than falling backwards when it failed, I ploughed on and ended up losing too many hours.

There was no need for me to upgrade, so I won’t be doing that again in a hurry.

Fear and Procrastination

I had built-up the process of releasing the app so much, I was virtually terrified to do it. The game was in a releasable state for at least 2 weeks before I finally hit “published”. I was working on virtually anything else to avoid hitting publish.

Now it’s done, off course a massive weight is off my mind and it’s incredibly painless.

I think it boils down to the fact that I was scared Google were going to reject it. Fear of failure 🙁

Conclusion

My first ever app, which happens to be a game is released. I’ll be looking back at this first game post mortem and reminding myself not to be scared.

If there’s any other information you would like to know, please leave a comment. Or, catch me on on twitter.