Category Archives: Advice

Test driven development has become the status quo for any hot start-up.  It has become part of University Computer Science curriculum and become a fairly significant movement (religion) among Software Developers.

However, in my various jobs, and through several personal projects I have found that unit testing is often more trouble than it’s worth.

What brought me to this conclusion?

First, writing tests takes time – usually far too much in my opinion.  Tests should be simple and obvious to write, but somehow they almost never are.  In my experience tests feel like the worst kind of hacked code.  You often have to get down and dirty with low level knowledge of the language in order to fake things so that they appear to be working for the method you are testing.  This could be by injecting fake implementations of classes or doing run-time modification to replace functions or methods.  It’s stuff that I find counter intuitive and far more complex than simply finding ways to make user testing easier.  Making the code so that it is easily testable I have found results in added complexity with logic spread all over the place.  It makes it difficult to follow simple processes when everything is pulled together at run-time.

Second, tests can take a while to run.  In the time it takes to run tests even if it’s just 1 minute I often find myself distracted.  As a result my ability to focus on the code at hand is greatly reduced as my brain context switches between writing code, starting the test-suite, getting distracted and reading something on and then remembering tests were running and finally getting back to the code.  It’s said that the brain takes about 15 minutes to regain focus after a disruption.  Test driven development rarely allows for 15 minutes of focused coding before switching to running tests.

Finally, in a productive work environment using high level languages, with knowledgeable people, good logging and notification systems, and systems in place for quick and easy deployments to production any bugs that do happen to make it into the wild should be quickly reported and usually simple to fix.  This is generally the case when changes are small.  Bigger changes should be user tested – even if there is a solid set of automated tests in place.

There are cases where I do find tests to be useful.  Generally it’s when I find myself accidentally breaking things more than once.  Usually though these tests are just superficial – do all the URLs in my web app resolve correctly? will a function run?  But other cases for automated testing is usually called for when sensitive money handling code is being developed, or public APIs need to be security hardened.

Having worked with teams on big projects that relied only on user testing and ones that relied heavily on automated testing the productivity was much higher on the user tested code, while the code quality (in terms of bugs – not code organization/structure) was close to the same.  But of course your mileage may vary.

After the initial release of UFO Invader there was one thing that I found extremely frustrating.  Lack of information about how many people were using the game, how often they were playing, and what areas of the menus were being accessed.  I was left to guess based on download numbers, ad impressions and the number and quality of reviews how it was doing.

Real data on app usage allows you to make design decisions based on what people are actually doing rather than what a few loud people say they want.

Doing a bit of digging yesterday I found out that there is a Google Analytics SDK for iPhone apps.  It allows you to track exactly what users are doing when they’re in your app and then you can easily comb through the data in Google Analytics.

Google Analytics gives you tons of ways to slice and dice the information.  But there’s a catch.

Analytics is designed for websites. Within a native application some of the concepts need to be twisted a bit to make sense, others won’t work.  It’s also a bit different in that you have to manually trigger all events in the code it’s not as simple as adding a bit of javascript to a WordPress theme.

However, it only takes an hour or so to get everything set up in your app to use Google Analytics.  The insight it gives into how people are using your apps and what they do with them could easily be worth 10x the effort.

Update: After playing with a bunch of different analytics options,  Google Analytics seems like the worst of the options (the library takes up a massive 1MB in your app, and it is kind of awkward to code)  I have opted to switch over to using Localytics

In my last post I wrote about some strange numbers that I was seeing in my app that I just had to investigate.

But first just some background information. My first iPhone Game (UFO Invader) was released just one week ago as a  $0.99 paid app.  It’s also a bit of an experiment so I included an ad at the bottom of the the menu screens as an extra way to make some money.  With the App I can see the sales in my reports from Apple and I can see my ad impressions and clicks in reports from AdMob.

On Tuesday, things started to get a bit wacky.

I noticed my ad impressions (and clicks) spiking massively.  However there wasn’t a corresponding increase in sales to account for it.  Either something was not counting properly or I was missing something.  This was a big discrepancy on the order of 1000x what I would have been expecting for the day.

After looking at the numbers it became obvious that more people were playing the game than had bought it. A lot more.

At this point with limited publicity and 4 days after launching the game I had registered 30 sales.  But there were over 200 ad clicks and over 1200 ad impressions (1000 in one day).  There were 400+ different users with top scores registered in Game Center.

A Google search revealed what I suspected.  A handful of forums and automated blogs were linking to cracked versions of my game.  (I won’t link to them because I don’t want to give them any SEO Juice)

I wasn’t sure how to feel about this.  On the one hand as a small one man developer shop getting my game into the hands of 1000 kids is awesome exposure and it might help drive sales.  The other hand I’ll explain in a bit.

First, here’s a couple of graphs showing my sales and ad revenue for the first week on the App Store.

You’ll notice there were negligible ad impressions until the 9th.  The 30 people who bought the game at that point were registering 5-10 ad impressions per day.  It very quickly spiked up to 1000 per day.  This correlated with an increase in ad revenue.  Unfortunately there has not been any positive effect on sales (yet) as a result of being pirated.

There were some other numbers that caught my attention as someone who is familiar with both side of the advertising fence – advertiser and publisher.  I had run a test ad campaign to see if I could profitably make sales by advertising my game.  Unfortunately only 1% of clicks converted into buyers, and even at a very cheap $0.03/click it wasn’t possible to run advertisements at a profit.  That sucks.  If it were possible to profitably advertise then my money worries would be over.  Alas.

The advertising that I did run on AdMob reported about a 0.5% CTR.  The ads that my game was serving was reporting a 18% CTR.

To me, 18% CTR is clearly evidence of click fraud.  Nobody clicks ads that much.

What was going on?  Well it seems that people who download cracked copies of the game are clicking ads in order to “help” me, the developer, make some money.  Unfortunately click fraud has the opposite effect.  It reduces the value of those clicks below the minimum bid allowed for everybody.  Meaning that I and every other indie game developer cannot effectively use mobile advertising to find customers.

Here’s a concrete example with my numbers:

$10 in advertising buys 334 clicks at $0.03/click.  My cut on a $0.99 game is $0.70 which means I need to make 10/0.7 = 14.3 sales on average for every $10 worth of ads or a 4.3% conversion on clicks in order to break even on the advertising.

4.3% for a $0.99 impulse purchase should be EASY.  Without knowing any better I would expect to see closer to 10-20% for something like this.

Unfortunately it is impossible to know what percentage of the ads I paid for were actually fraudulent but based on experience running ad campaigns for the last 4 years on the web it seems like mobile ads are terrible and my best guess is that AT LEAST 75% of clicks were fraudulent.

I was seeing a 1% conversion, but removing the fraudulent clicks might have bumped it up into the realm of profitability.

This level of fraud creates a huge problem for developers.

  1. The value of a click is so low that using ads to make money doesn’t work. (My stats show a click pays just 2.8 cents)
  2. All the Advertisers who have good things to sell won’t buy ads because they’re paying too much for fraudulent clicks.
  3. Developers can’t profitably advertise their Apps with mobile advertising
  4. The high volume of clicks that I saw with my Game could potentially get it flagged, accounts locked, money taken back, and prevent any money being made now or in the future from advertising.

To those people who download cracked iPhone apps and want to help the developer here’s the best thing to do:

  1. Don’t click any ads unless you are actually interested in what they’re advertising. Ever.
  2. Tell your friends to check out any cools apps you find.

You know I’m cool with people pirating my game.  They wouldn’t have bought it anyway.  And with the right bits of marketing in place I could still communicate with them, promote future apps, sell in-app-purchases to them and ask them to tell their friends about my games.  But destroying the advertising ecosystem makes my job more difficult.  It eliminates what would be the simplest way for me to promote my game to people who might actually buy it.

What are my options as a game developer to deal with this?

  1. Release free to play games and be more creative about monetizing them.
  2. Ignore pirates and forget about trying mobile advertising to advertise.
  3. Ensure you have ways to communicate with users through push notifications, email, or in-game messages.

Unfortunately, There’s pretty much nothing that can be done to thwart hackers.  If they want to crack software bad enough there’s always a way to do it.  What sucks most of all is that the click fraud puts me at risk of losing a lot of money if my account gets flagged.

But this is also very early on and it will be interesting to see how things change over the next few months.

Waiting seems to be something that you have to get used to when dealing with Apple.  Granted, the whole process is vastly more efficient than waitingit was back in the days of physical distribution.  And I’m thankful that that I don’t have to hire a publisher and deal with box designs, CD duplication and the massive up front costs they would have incurred.

In fact the 1 to 2 week waiting time I expect for my first game to be approved is hardly enough time to get my marketing plan up and going.  There’s videos to create, stuff to write, lists to build and people to contact.  It’s all work that takes time.

However, it’s also frustrating when people who are anxious to play it can’t and have to wait weeks before they can – even though the development is finished.

These next few weeks are also a time to start looking forward to my next app.  The first one isn’t yet out the door and the next one is already getting sketched out on the whiteboard.  Getting the jump on development is going to be key to keeping the flow going.

So yes, there is some waiting involved, but it’s actually a welcome break to focus on next steps.

ios developer logoIt took much longer than I expected to actually sign up for the Apple iOS Developer Program.  Two weeks ago after starting the process I found myself searching on Google for “How long does the Apple Developer Signup Take?”  And much to my disappointment it seemed to take anywhere from 10 minutes to a month.

It took me over 2 weeks to get through the process.  Though that was partially my fault.

Signing up as a company requires faxing (Who uses fax machines anymore?) corporate documents to prove the address and ownership of the business back to Apple.  Unfortunately I missed this part in the email Apple sent (my friend got the same email and also missed it) so I sat waiting for an email that I had already received for a few days.

One of the problems I ran into was that the Apple fax line is busy pretty much all day.  Even with the fax machine auto re-dialing and multiple attempts to transmit I ultimately had to wait until the weekend to get through.

After sending the first fax which was a copy of my certificate of incorporation, I got a reply back to confirm they received it.  Several days later and I hadn’t heard anything else from them.

So I decided to use the contact us form to try and nudge the process.  Early the following day I got a call from Apple – I sent the wrong documents!

Now I had to send another fax, and again I had trouble getting through on the weekdays.  Finally got the documents faxed on Saturday.  Monday and Tuesday passed without even getting confirmation that they received the fax so I got back onto the contact us form to prod the application along.

9am Wednesday morning I got the call, they got the fax, everything looked good, and they were finally ready to take my money for the Developer program.

Now fully paid for there’s still more process to go through.  The application gets passed up through various groups within Apple who check and setup the Account and it takes up to another 24 hours before I get access to iTunes connect.

There is a stark contrast between the consumer facing side of Apple and it’s backend business processes. Apple stores are known for being simple, sparse, clean and new.  For a company that is trying to obsolete the cdrom to be still only accepting faxed documents, and having a signup process that seems to be highly manual with lots of people on the phones and can take weeks feels like a bit of a disconnect.

The takeaway here is that if you’re applying to Apple’s developer program:

  1. Carefully read all the emails they send you
  2. Use the contact us form to push your application to the top of the stack.

pareto's law, 80-20 ruleThere’s a principal called the Pareto principle or the 80/20 rule that says roughly 80% of the effects come from 20% of the efforts. This ratio seems to pop up everywhere.

In the case of software development what I have experienced in just about every project I have ever worked on is that it also relates to the amount of time it takes to get something done.

As you get to the last few features of a particular product there somehow becomes more things to work on and finish that get added on. For my iPhone game that I’m currently developing it has been functionally complete for several weeks now. A big part of the work was getting the game engine working, getting a collision detection function that worked well, adding all the menus, graphics, and music. All the major components are in place and it comes down to game play tweaks and subtle improvements.

Somehow there is never an end to the amount of things that can be improved. And so it starts taking up more and more time. the last 20% of a project takes roughly 80% of the development time. It’s something to expect, plan for, and in my opinion try to cut in half.

The ethos of the lean start up is to fail fast by testing early and often. When it comes to this last 20% of the work I’m attempting to cut it in half. There may come a time when I have all the time in the world to work on something until it is perfect. I’m not there yet. So corners have to be cut and the first and easiest thing to cut out is the least valuable stuff that takes the most time, energy and effort.

Shipping something is the most important part of the whole endeavor. Take a look at your last 20% of work and decide what’s really necessary and what is just a nice to have enhancement. Cut out the nice to haves and ship sooner. Then gauge the next steps from customer feedback. With the App Store, it’s always possible to publish an update.

Well I’ve had so much fun writing my first iPhone game that I’m starting to think more about what to do next.  So I have put together a bit of a business strategy to help grow into a successful mobile game/app business.

While still in the early days of the mobile app marketplace (the App Store was opened just 3 years ago) the growth has been astonishing.  We’re already seeing some consolidation of the developers as larger development studios are figuring out the marketing processes that work best and the quality of software being published goes up and gets to a point beyond where a single developer can compete.

This consolidation is a natural part of any new technology.  It always starts out as the wild west and eventually the big guys come in with some acquisitions and start to dominate.

However, though it is getting tough to crack into the top 100 apps for any category in the App Store, there are still some ways for small shops to get there and do well.

The biggest lever that big development studios have to help get them to the top spots on the App Store is that they have a lot of apps.  This network of apps is a platform upon which they can get free advertising to promote their latest and greatest program.  It means that on day one of launching something they can quickly get 10’s of thousands of downloads.  The cost of acquisition for those customers is nearly nothing which makes it hard to compete if you have to promote your apps through paid ads.

That fact massively effects what works as a good iPhone business strategy.  Launching your first product as an awesome fully featured app is going to lead to disappointment.  Listening to the hype that similar games might have gotten with massive install rates and then looking at your own stats may be disheartening.

So a good strategy would be to start ramping up with a slew of apps.  Get as many things into the store that are “Good Enough” that you can start to build your own app network.  This can be iteratively used to help promote each additional app and make each launch bigger than the previous one.

The strategy I have developed maps out the next 5 Games that will sequentially build out the software components required to ultimately build my dream game.  Along the way I’ll have easier games to develop and release and the opportunity to re-skin those games for even more apps in the network.  This way by the time my 5th game is ready to go I’ll have a significant number of customers out there to advertise it to.

It’s going to be a fun ride to get all these things done and out there.

I have been working on my first simple iPhone game for the last couple of weeks and now that it is getting close to finished I thought it was a good time to sign up for the Apple Developer Program.

Lesson Learned: Should have started this process earlier.

I had heard the horror stories of apps taking time to be approved or going through plenty of rejections but I expected the Developer signup to be relatively straight forward… Just like any other online signup process.  But apparently it can take anywhere from a few minutes to a month or more to get approved.

The problem is that they need to confirm that the business is registered and collect copies of articles of incorporation and tax numbers.  It means that at some point they’ll have to call to confirm that I am legally in control of the HalOtis Inc Corporation.

Seems like a bit of overkill, but I guess they are processing payments on behalf of the company so I’m sure there are some KYC (Know Your Customer) concerns as well as helping prevent spam and  fraud.

Hopefully it won’t take a month to finish this.  Was planning to submit my first app into the store next week.

The Apple iTunes App Store search engine is a bit of a black box. Unlike Google which has some transparency (though they keep a lot of things close to the chest). With Google you have the opportunity to find trends through Google Trends, or see competition and search volumes by keyword within the Adwords Keyword Tool. Through Google Analytics you have the ability to track back to find out what keywords provide your website with traffic in great detail.

With Apple you get none of that.

When publishing an iPhone App there are two fields that appear to provide some impact on how your app will rank which you have control over.

  1. the keywords field.  You can only update this field when you publish your app or an update and only get 100 characters to work with.  Max it out with as many of the  best keywords as you can.
  2. the title. Don’t be afraid to put something long in here or to embed a subtitle.  Make sure it is something unique enough that if a friend told you about the app you would be able to find it easily.
Other than these traditional SEO techniques for improving your ranking within the app store there’s one non-traditional SEO trick to getting ranked higher in the the results.  That is the number of downloads your app gets.  there are a number of ways your can influence this from outside the app store.
  • Create some youtube videos
  • Give away free download codes to review sites.
  • Create a webpage for the app
  • Create a Facebook Fan page
  • Tweet about it or create a twitter account
  • blog about your app
  • Send out email
  • Do a “Launch”
Besides these more traditional Internet Marketing approaches to drive traffic you also have several new abilities on the iPhone to market and drive traffic to the store.
  • Cross promote with your other apps.  Use things like house ads, a “More” screen with links to your other stuff, menu items, and pop ups.  Use your existing apps as a platform to advertise your newest apps.
  • Push notifications to your users so that they get notified of your latest promotions.  Directly communicating to your customers where ever they are at any time is HUGE.
  • Mobile advertising through places like AdMob allows you to target by region and device type.  If you want to get your App in front of people it’s always possible to pay to get it there.
There you have it.  There are three main factors you can influence to improve your ranking in the iPhone App Store.  Remember that getting your app published is really just the start of what needs to be done for a successful App business.  A great marketing strategy is key to get your stuff to stand out amongst the 285,000 apps in the App Store.


Outsourcing is something that I have found difficult to do.  I am the type of person that likes to know and do everything myself.  It is actually something I take a lot of pride in having the expertise and experience to do everything from software programming to marketing to construction, car maintenance or electronics.

Learning when is best to leave the work to someone else is not easy and the skills for finding, managing and communicating with the people you hire don’t come naturally to me.

However, recently I found a website that makes some simple jobs incredibly easy to outsource. is a service where everything is priced at $5.  So many of the things that people offer to be done on the site are things that would easily take me an hour or more to finish – if I could do them at all.

I recently used the service to get a logo designed.  It turned out great!  Getting a logo from 99designs might have cost multiple hundreds of dollars! At $5 it was worth taking a chance.

But there are a number of things offered on the site that I may get done in the future.

It’s easy to get this kind of stuff done:

  • video intros
  • voice overs
  • promotional videos
  • simple graphic work
  • transcription services
  • SEO backlinking
  • Social media help
  • articles written

There are lots of people on the site offering their services and at $5 it’s usually a very good deal.

It’s not the place to get big projects done.  But there are always small things that take me more time than someone who is perhaps more experienced or already has a template ready to go.  I’ll be getting stuff done there in the future for sure.

Paying $5 for a rendered video introduction for a video podcast adds a significant amount of professionalism and polish.  Getting a professional voice artist to record an introduction at just $5 is a no-brainer.

Something to consider for your projects or marketing materials.  Check out