Category Archives: Advice

Lack of time has become my biggest issue.

A full work day followed by working on several other projects at once including (currently) two iOS games, two web apps, a couple of blogs, an entry for the MintChip Challenge, starting a garden, and training for a half-marathon. It’s no surprise that I have little time to relax and that progress is slow on all my projects.

Perhaps the most important wall to climb over to take my ambitions to the next level is to outsource and hire people to take on some of the work so that I can focus on just the things I can make a difference with. That’s easier said than done.

One of the major reasons why small businesses fail is that they are started by technicians who become disillusioned day in and day out watching other people make “bad decisions” and they decide they can do a better job on their own. The problem arises when they realize all the other things that they never had to deal with which suck up time. Things like accounting, marketing, networking, sales, websites, legal consultation etc. Without the experience to hire and fire people for these roles it’s easy to find yourself in that “bad boss” situation. A good technical person is rarely good at all the skills necessary for success.

Having spent a few years trying to grow a business organically and doing everything myself I have learned a lot about a lot of different things, but growth has been slow. Too slow.

So I’m preparing to take the plunge to look for opportunities to hire and outsource work. It’s a scary prospect for me to give up some control of the quality of my work. But hopefully it will pay off with big rewards, and more time to relax.

Fabric is a pretty awesome tool for deploying projects. But it turns out that it’s also pretty awesome for lots of other stuff.

At PyCon 2012 there was a talk given by Ricardo Kirkner (which you can watch here) that inspired me to play around with fabric in some new ways.

It’s possible to use fabric as a wrapper around the standard django ./ script, to help setting up virtualenvs and install packages. Using fabric to script around these things means that there are fewer tools that new developers will need to get set up and know how to use. Scripts that normally might have been loose bash files can now be collected, organized and documented.

I’m currently working on a large django project with 4 other developers who are new to python and django. Getting everyone’s development environment working was a big pain since there were multiple platforms (Mac and Linux) and different configurations for base packages. If I had thought of this sooner I might have been able to create a reliable fabric script so that “easy_install fabric; fab init_project” got them from zero to running django app.

There’s also several oneliners that I run fairly regularly which can be saved in and called much easier. For example:

def clean():
    local('find . -name "*\.pyc" -exec rm -r {} \;')


$ fab clean

will clear out any .pyc files in the project.

It’s also possible to manage the virtualenv environment through fabric:

VIRTUALENV = '.virtualenv/'
def setup_virtualenv():
    created = False
    virtual_env = os.environ.get('VIRTUAL_ENV', None)
    if virtual_env is None:
        if not os.path.exists(VIRTUALENV):
            created = True
        virtual_env = VIRTUALENV
    env.virtualenv = os.path.abspath(virtual_env)
    return created
def _activate_virtualenv():
    activate_this = os.path.abspath("%s/bin/" % env.virtualenv)
    execfile(activate_this, dict(__file__=activate_this))
def _create_virtualenv(clear=False):
    if not os.path.exists(VIRTUALENV) or clear:
        args = '--no-site-packages --distribute --clear'
        local("%s /usr/local/bin/virtualenv %s %s" % (sys.executable, args, VIRTUALENV), capture=False)
def virtualenv_local(command, capture=True):
    prefix = ''
    virtual_env = env.get('virtualenv', None)
    if virtual_env:
        prefix = ". %s/bin/activate && " % virtual_env
    command = prefix + command
    return local(command, capture=capture)
def manage(command, *args):
    virtualenv_local("python {0} {1}".format(command, ' '.join(args)), capture=False,)
def runserver(*args):
    manage('runserver', *args)

These functions let you create the virtualenv and run commands in the virtualenv (without having manually activated it). virtualenv_local wraps the call to fabric’s “local” function and sources the activate script before launching the command specified. the manage function provides a way to call django’s script, and the runserver function gives a way to use fabric to launch the server (in the virtualenv). So now the fab command can be used to consolidate both virtualenv tools and script into one document-able with a consistent command-line interface.

Over the past few months I have released a number of apps to the Apple iTunes Store.  It’s been interesting to go though the submitting process so often and YES I have had some apps be rejected.

In most cases rejections are legitimate omissions on my part.  Missing a support link, not setting up game center correctly and things like that.  Apple does a good job of combing through apps for problems.  And I’m thankful for that because when it gets approved I’m more confident that I didn’t screw things up too badly for people that download my apps.

But on two occasions now I have had apps rejected because of the core content of the game itself.  This is really frustrating.  In one case we were able to rename and tweak the graphics to make it less offensive but it took away most of the fun as well.  The second app may not be salvageable.  It’s a couple weeks worth of work lost.

What options do I have for those rejected apps?  not too much.  I could release them to the jailbroken App Store with an ad supported version.  It would be an interested experiment to see how that would play out.

Having an app rejected sucks, there’s no denying that.  But to put things in perspective, if the iTunes store was a giant supermarket and you went in there some Saturday morning, walked up to the service checkout, put a tray of your home made peanut butter and jam sandwiches on the counter and asked them to stock your sandwiches in the store would you be shocked when they said no?

My suggestion?  Read the guidelines and if your app could be on the edge of one of them, submit it early to get feedback from the Apple gatekeepers.  You don’t even have to publish it – Leave it for developer release.


Having developed a few iPhone/iPad apps now there has been a few things that have tripped me up and created more work than necessary.

One of those is that small bugs in the program such as a bad link, misspelled words or game play tweaks like speeds and frequencies that you want to change after the app has been submitted usually require fixing the code and re-submitting the new binary which takes another week to get reviewed.  Depending on the error it could delay the marketing push on the app and cost you a week of lost revenue.

The week long delay in fixing what can be trivial typo errors can be frustrating.

To counteract that it can be useful to move some of these settings to a plist file and update the values from a website.  It can be as simple as putting a json/xml file on a web server somewhere and loading/parsing that file every time the app comes into the foreground.

This feature has become central to a few of my apps.  allowing me to update the content of the app with fresh information, it has also allowed me to test various minor changes in some games in production, and allowed me to fix a link to include an iTunes affiliate link after it was published without one.

This merging of what makes native apps so great (speed, better controls etc) with what makes web apps great (always up to date, easy to deploy fixes, and tracking) is what I find most interesting about mobile apps.

The last few months have been absolutely mad and it all comes down to one difficult change that I have made to the way I do things.

Always be Shipping is a mantra I have started to follow.  It means that I’m focused on finishing things and putting them into the market as quickly as possible – even if it’s not perfect or has  features missing.  Test the market with a real product or service and then revisit and improve the experience later.  The benefits have been shocking.

Over the last couple of months I have started and finished roughly 8 different software products.  They are all now in production and the ones that are for sale have been selling.  The more I do the easier and more comfortable the process becomes.  Each product is a chance to test a bunch of new ideas and evolve the code to include new features.

There are many skills that go into releasing a software product.  There’s the programming stuff,  server stuff, then there’s websites, graphics, and perhaps video or sound recordings.  If you get all that done there’s still the other half of the work involved in finding a marketplace to put it in and arranging for payment methods, and all the marketing and promotion to make sure people can find out about it.  Each task poses a risk that it could de-rail a project.

Shipping is the inflection point where you can take a break from product creation and start to find ways to bring money in from all that work.

There are two things to be aware of that can prevent shipping a product

  1. Focus reducing the scope and limiting feature creep.  There are so many great ideas to implement but being able to cut back on things so that there are a manageable number of difficult technical objectives before it’s ready to sell it critical.
  2. Being familiar with the process of shipping so that you know what needs to be done and how to do it efficiently enough that it’s not so tedious you avoid the work.  Ship your products regularly enough that it becomes routine.

It is a real rush to have something for sale that you can check the stats on every morning.  Read the reviews, test ideas, run sales, and compare revenue models.  It is exciting and as addictive as gambling.

For those that haven’t heard the term before freemium is a business model becoming popular in mobile apps, though it is also used extensively in web services.  The idea is that you give away the product or service for free and then charge for the extra things.  Dropbox is an example, you can sign up for free but if you want more space and a few extra features you can pay to upgrade your account.  I think it is a superior business model.

For UFO Invader I started the game as a paid app for $0.99.  With that low price I was only making one sale every other day.  Over the course of that first month it made just 32 sales, including sales to friends and family.  That simply wasn’t good enough for me so I decided to test a freemium model.

I added a few things to the game that could be bought in the game through in app purchases at various price points and released the update, while dropping the price to free.  The change to the number of installs was dramatic (5 paid apps one week up to 3500 free apps installed the next) and it wasn’t long before some of these new players were buying things in the game.  The same week I switched to freemium I made roughly 5x the revenue from the previous week.

Enough time has passed now that I can start to compare numbers:

  • During 8 weeks as a paid app it made 50 sales @ $0.99 price tier
  • During 8 weeks as a freemium app there has been 43 transactions at various price points
    • 27 @ $0.99 price tier
    • 14 @ $3.99 price tier
    • 2 @ $39.99 price tier
  • 50 paid installs vs. 5200 free installs in 8 weeks
  • Ignoring currency differences, roughly $50 in revenue as a paid app, vs $163 as a freemium app

Even for a game like UFO Invader that was my first attempt at an iPhone game and which has never made it up into the top 100 freemium has proven to be significantly better way to get paid for the weeks of work that went into it. Going freemium more than tripled my revenue directly, and increased my installed base by 100x.  The value of that installed base cannot be underestimated since several thousand players opted in for push notifications which I will use to help launch my next game.

My advice to App developers is to try freemium if it can work with your app.  It’s a bit more work to add IAP, but in my case it proved to be worthwhile for me, and beneficial to the thousands of people who got to play for free and otherwise never would have bought it.  Obviously this is just one case study, different things may happen in other apps, but I think it’s worth testing.

For a long time I was firmly on the side of quantity when it came to business products.  Get as much stuff out there as quickly as possible to test different ideas and markets.  The more stuff I could get out there the less risk there was that I would be devastated if one of them didn’t work out.

But it doesn’t work.  Most people are pretty good at identifying cheap crappy products and they won’t buy them no matter how inexpensive they are.  If products are below a certain quality threshold they simply don’t sell, and the market testing will produce no results.

Since the beginning of this year I have changed my goals.  The focus has changed to creating only great products.  As good as I can possibly make them.  And it has completely changed the way I feel about my business.

Until I have the financial security to run my business the way Apple Inc. does where they only take on new products if they know for sure that they can do it significantly better than anyone else.  I will instead be focusing on releasing products that are as good as I can possibly accomplish and learning how to do them better each time around.  Building just a handful of the best programs I can craft, and putting significant effort into those final touches that take the most time.

The end result is a product that I will feel good about, that others will enjoy, and that I can proudly put my name and reputation on.

I’m looking forward to getting one new App published before the end of the year.  It will either be great, or it won’t be released.

Recently a potentially huge opportunity landed in my lap.  The most interesting thing about it isn’t that I was able to see the opportunity and was in a position to seize it, it is that other people not only didn’t take the same opportunity when it was presented to them, but they ran in the other direction.

We both saw completely different things in this opportunity.  To me it is a low risk business opportunity with limited up front costs, in partnership with someone with the skills and business network to make it successful.  The other person perceived massive risk with an untrustworthy business partner who would somehow rob all their money.

How can two people (same age, similar backgrounds) have such polar opposite reactions to a potential business opportunity?

The biggest thing is that having read lots of books about success – Think and Grow Rich, by Napolean Hill, Richest Man in Babylon, Outliers by Malcolm Gladwell and many others.  And having been to networking events with hundreds of ambitious entrepreneurs I was able to quickly put this guy into a category.  He has all the personality traits of the prototypical successful entrepreneur.  To such a degree that I knew if he wasn’t already wealthy it was inevitable that he would be in the future.  And I had both the technical skills and the business savvyness to relate with him.

The other person was weird-ed out by someone with lots of different things on the go.  Anyone who on a whim would get into the iPhone apps business is too surreal to be believed and it raised red flags.  Anyone with money to spend on side projects must be doing something sketchy.  It was all too out of the ordinary to be real.

It’s still too early to tell how all this will pan out, but that is the life of an entrepreneur.  Take lots of calculated risks.

The key in this case was that I was able to see the opportunity and had enough experience to take advantage of anything that came my way.  If it had been contract work – I already have a business set up, if it was a new business venture – I know a bit about what it takes to register and set it up.  I have enough practical experience with monetization, marketing, and sales strategies to be able to intelligently discuss them.

Luck comes to people who keep their eyes open for chance events and take action on them when they present themselves.

Stay hungry. Stay foolish.

Practical experience is without a doubt the best way to learn something.  Since the beginning of the year I have been trying to DO as much as could possibly be done by one person.  This year I started my company Halotis Inc.  That was an interesting experience – to meet and talk with an accountant, get all the paperwork done, issue shares, start business bank accounts and everything else that was required.  It was a massive change of pace and perspective and through the process I learned lots of practical things that you will never learn in school or find in books.

For months I worked on building the Automatic Blog Machine site.  it does a lot of interesting stuff and it was technically challenging, but it was also a chance for me to execute a marketing strategy.  I recorded and edited videos, wrote sales copy, built up an email list and actually did a reasonably successful launch of the site.  I did a lot and learned a lot.

After that I turned to iPhone development.  spending night after night working on the software, creating promotional videos, and a website.  The most important thing is that I actually finished the game UFO Invader and released it.  There was so much learned through that process.  It was so rewarding that I decided to keep developing more iPhone software.  And it was so successful (in # of players not revenues) that I’m actually excited to get more done.

Having done the Automatic Blog Machine website gave me the knowledge, skill and most importantly a code base to be able to quickly create a new website for the back end management of my iPhone Apps.  I’m in a good position to be able to quickly test new ideas for web applications.  Do something, and learn a little more.  It keeps getting easier.

Nothing that has happened this year in my business has been the wildly successful hit I wished for.  However, having done these things and learning along the way has each time left me in a better position to take advantage of opportunities when they come up.  I only need one hit business.  There are so many subtleties to making a business really work well that it is impossible to really do it right the first time.  It takes practice, it takes failure, and it takes doing.

The most successful people on this planet are the ones who take the most risks.  They’re constantly testing the waters with new ideas, putting things out there – Doing things, and learning.  They have developed a relationship with risk that eventually pays off.  There are not many people like that in this world.  I have only ever met two such people in my life.  It’s a model I try to emulate myself since working hard and taking risks seems far more rewarding than watching TV.


The very first lesson I have learned about making profitable iPhone Apps is that the most effective monetization strategy is to have a free app with in app purchases.  I have very little problem spending $0.99 for a game on the App Store, but I have found that there are many people out there that don’t have credit cards attached to their iTunes account or simply won’t buy things.  The free app gets past this initial barrier and also opens you up to additional people who can play with your app and act as word of mouth promotion.

For in app purchases a lot of thought needs to be put towards how best to price things.  Choosing the most effective price points and providing a range of options so that people can buy the things they find the most value in is crucial and non-trivial.  But one key thing to keep in mind is to make it really easy to spend $1 and possible to spend $100/month.

The value of money is a strange thing.  To me spending $100/month on a iPhone game is crazy, but to others $100 is only 10 minutes worth of work.  Perspective is everything.  In a world with an increasing gap between rich and poor it is important to give rich people ways to spend more of their money – selling digital goods with zero marginal cost is a pretty good strategy for that.

Looking forward I don’t think I will consider doing an app that doesn’t have the opportunity to make full use of in-app-purchases.  I’ll share my actual numbers at the end of the month.