Cameron Hotchkies


  • Coding


  • apps
  • appstore
  • market-research
  • planuplanu
  • python
  • target-markets

As both readers of this blog know, I’ve been working on an OS X client for Planets Nu (A web-based version of the old play-by-email game VGA Planets). The idea was to make something like EchoView for my own use, brush up on technologies I had been putting off and potentially have an app in the Mac App Store that pays for the Mac Developer Program registration fee.

When I started working on it, I knew that it was always destined to be a niche project with limited utility, and as such it made sense to open source the API parsing code to help other developers working on other platforms that I had no intention of porting to (iPhone/iPad). I had originally intended to distribute via the App Store for a nominal amount ($1.99).

As I was waiting on graphics for v1.0, more out of curiosity than anything, I decided to run the numbers to get an idea of what my target customer base could be.

Once this thing starts selling…

As mentioned earlier, this is a niche product. Even still there are people playing the game. For the game there are 11 playable races, and a quick glance at the leaderboard for the Solar Federation (race #1) shows over 890 players.

11 Races * 890 players = 9790 possible users

9790 users * $1.99 = $19,482.10

Almost twenty thousand dollars! That’s a chunk of change for even a $1.99 price point. The first thing to keep in mind is that for an App Store product, there’s always a 30% cut to Apple. I’m not going to cry about the fees, but it does change the fact that for a $1.99 sticker price, the developer gets roughly $1.39.

9790 possible users * $1.39 = $13,608.10

No Feng Shui Cube for me! That’s ok, I can still take that money and buy 283 cases of Rockstar XDurance and fuel my next adventure.

But wait, a user on Planets Nu can play multiple races with the same account,  but how many people actually do that? Well, it’s simple enough to write a python script to scrape the website for each leaderboard and remove any duplicates.

Race 1 has 893 players
Race 2 has 738 players
Race 3 has 659 players
Race 4 has 667 players
Race 5 has 694 players
Race 6 has 753 players
Race 7 has 637 players
Race 8 has 773 players
Race 9 has 667 players
Race 10 has 644 players
Race 11 has 681 players
Total unique players: 2712

Oh shit! That’s a huge difference between 9790. All of a sudden the potential revenue is roughly 1/4 of what it seemed like it was going to be a few moments ago. Wait! There’s more! Not everyone uses a Mac, most people don’t. So going with a rough estimate of 5% market share:

Total estimated mac players: 135

Ruh roh.. then when I account for the fact that I’m using features specific to OS X Lion (10.7), that 5% really becomes

16% of 5%: Estimated mac players with Lion installed: 21 Best case scenario: $29.19

Then I account for the fact that I am one of those 21 people, and one of the players on the site has been beta testing, so we each get a free copy from my pool of promotional codes, that 21 is really 19. Multiply that by the $1.39:

Income excluding developers:                $26.41

And that is assuming that everyone who can buy a copy actually wants to buy a copy.

What about the long tail?

Apple App Store Registration Fee:           $99.00/year

Oh right, there’s that little fact as well. To publish apps on the store it costs $99/year to register as a developer. I would need to sell 72 copies a year just to cover that cost.  Which this won’t.

It’s shocking that some people refuse to generate harsh numbers when looking at the pool of potential customers for an app they want built. These were even pretty optimistic, checking for inactive users was unnecessary at this point. Frequently you only hear about the slightly believable best case scenarios. And here’s the rub, knowing that PlanuPlanu has a zero percent chance of making me any money, I’d still rather work on it than half the crap people are going to suggest I help them with during SXSW the second they hear I’ve written an iPhone app before.

Is all that effort wasted?

Of course now I have an app that is 99% complete, that scratches a personal itch I had and that I have used as tool to expand my technical capabilities (for that day I need to write a shitty lightning bolt generator using CoreGraphics). This is where it makes sense to open source the whole thing and let BitBucket host the binaries. At this point it becomes a portfolio piece for my résumé and allows other people to use my code as a reference (for the day they need to write a shitty lightning bolt generator using CoreGraphics).

Here’s the python code to get an up to date estimate of how poorly this would sell:


import urllib2
import re from StringIO
import StringIO
import gzip
import math 

all_players = set([]) 

for i in range(1,12): 
    leader_board_page = '' 
    request = urllib2.Request(leader_board_page % (i)) 
    request.add_header('Accept-encoding', 'gzip') 
    response = urllib2.urlopen(request) 
    if'Content-Encoding') == 'gzip': 
        buf = StringIO( 
        f = gzip.GzipFile(fileobj=buf) 
        page = 
        # find all links to a user profile page 
        user_pg_pattern = '<a href="/user/([^"]*)">' 
        players = re.findall(user_pg_pattern, page); 
        print "Race %d has %d players" % (i, len(players)) 
        all_players = all_players.union(set(players)) 
# Display the final number of unique players 
print "Total unique players: %d" % (len(all_players)) 

# Assuming 5% market share for mac users: 
mac_players = math.floor(.05 * len(all_players)) 
print "Total estimated mac players: %d" % (mac_players) 

# Assuming Lion accounts for 16% of all mac users 
lion_users = math.floor(.16 * mac_players) 
print "Estimated mac players with Lion installed: %d" % (lion_users) 
price_point = 1.99 

# Floor is required because I doubt the fractional cents come back 
profit = round(.7 * price_point,2) 
best_case_income = profit * (lion_users) 
income_minus_devs = profit * (lion_users - 2) 

print "Best case scenario: \t\t\t$%.2f" % ( best_case_income ) 
print "Income excluding developers: \t\t$%.2f" % ( income_minus_devs ) 
print "Apple App Store Registration Fee: \t$99.00"