Category Archives: Software

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.

A couple weeks ago I started working on my first iPhone game. It’s been making slow progress mostly due to distractions preventing me from sitting down and coding as much as I would like to.

However I have been quite impressed with how quickly something can come together even when writing in a language like Objective-C, and using game development concepts that are a bit new to me, on a framework, Cocos2D, that I’m still learning. Sometimes it’s nice to program in high level scripting languages to get things done quickly, but other times it’s nice to get back to basics and remind yourself how memory allocation works, use pointers directly and deal with hardware restrictions. It’s amazing to see how something we usually take for granted like font rendering can bring a game grinding to a halt on the iPhone.

It takes just a couple hours to add entire new features to the game. I have got it to the point now where it’s got all the key components. Collisions, score keeping, bonuses, power-ups, enemies, parallax backgrounds have all been integrated and the control feel has been tweaked. It’s actually fun to play already! In terms of the programming side of things it’s 90% finished.

The next step is a mental shift to get the graphics done for the game and replace the placeholder graphics it has. Graphics will make or break a game. Even though Doodle Jump managed to get by with terrible graphics that kind of novelty is not going to work for the vast majority of games in the App Store. Graphics are a big part of the look and feel, but also a big part of the story in the game. To have a huge success all parts of the game need to be polished and well executed.

Getting the graphics work done is going to be tough. For this first game I have no money to hire a graphic artist to do the work on so I’m going to attempt to do them myself. That means hours of work in Photoshop drawing levels, characters, buttons, bullets, backgrounds and everything else. It’ll be a learning experience though and should help me understand and hire some one to do the graphics for the next game.

Overall feeling from getting this far in the development is that Developing for iOS is actually kind of fun. XCode is one of the best IDEs I have ever used even though it’s different enough to require some time to learn. I don’t know why people complain about having to deal with reference counting on pointers and lack of garbage collection. It’s not that hard to manage your own memory clean-up.

Over the past few weeks I have been reading about and coding my first iPhone game. So far it has proved very fun.

In my entire software programming career I have done a lot of business applications. Mostly in the financial services industry. There’s a lot of mundane stuff that comes up with those sort of applications where you end up coding admin interfaces, tweaking the layout of input fields, or handling errors with friendly messages. Testing this involves (hopefully) some automated unit tests which are a tedious job to write.

Games however are a different beast. At least for the type of game that I’m writing, which is a 2D scroller, most of the things that need to be tested are related to gameplay and require actually playing the game to see how code changes affect the feel. Things like how fast should the bullets move or how sensitive should the movement controls be take some hands on testing.

It’s a workflow that I enjoy using. Write some code, play the game, make notes of things that need to be done, then code some more, and repeat.

It can also be a good laugh to see how some simple changes can affect the game play. Make the controllers extremely sensitive and suddenly the dynamic of the game changes. Introduce a devastating new weapon and it becomes too easy. There seems to be a delicate balance between all the factors involved to produce something fun.

It is fun to write code that actually makes me laugh out loud when I test it out.

For the past two months I have been working full-time on iPhone and iPad apps at work. As I have been building my experience with Objective-C and iPhone development the thought of creating a couple games has been becoming more enticing. Over the last few weeks this small voice has been getting louder as I have been reading about the success of a number of games. Especially the amazing results ($300,000 revenue in 7 days) for The Heist

I had been looking at various cross platform ways to make game for both iPhone and Android platforms but in the end it seems like doing iPhone development in anything other than Objective-C is just frustrating. So native development it is. And that’s great because there’s tons of documentation, full access to all APIs and lots of answers on StackOverflow.

Objective-C really isn’t that bad and while I would prefer to be able to develop in Python with the right framework game development is actually fairly painless.

To start with I picked up a book Learn iPhone and iPad cocos2d Game Development. Which proved to be a great help in getting me off to a running start. I have never done game programming but It’s proving to be very enjoyable. Lots of game play testing required – which is how I like to work.

With the books sample code as a starting point I was able, in just 3 hours, to implement my own control features, add collision detection, weapon types and tweak the game play. The sample code is quickly turning into something unique.

Surprisingly, even at this early stage the game is quite fun and several times during development I found myself getting lost in the game.

For this first game though I’m not striving for perfection. Just get something working and ship it. The hardest thing, and the only thing holding me back from creating more games faster is trouble finding graphic artists to draw sprites for me. I can handle the programming, and I have a friend who is a sound engineer but game graphics people are hard to come by. As a result this first game will be sketched by me.

I’m hoping to have the game programming finished in a week, the artwork will be another week and finally the sound should hopefully take just a few days. If everything stays on schedule it should be in the App Store in about 1 month.

Are you interested in reading more about creating iPhone games on this blog? Leave a comment and let me know.

The initial launch of Automatic Blog Machine has exceeded my expectations so I’m very happy to have my first users who have been plugging away at the system and building their own personal blog networks.

To the people that have signed up already: Thank You. I’m looking forward to personally helping make Automatic Blog Machine the system that puts you in control of an Internet Empire.

I’m getting ready to close the doors to the system so I can focus on the next set of killer features that I want to implement. There are a lot of great ideas floating around in my head for even more automation, improving the quality of generated content, and scaling everything up to handle 100,000+ websites.

If it’s something that you’re interested in jumping on – today is your last chance to join. Tomorrow I’ll be closing the doors to new users and it will never be available at the current price ever again. If you have ever thought about what to do with your unused domains, or dying websites. Or wanted to control lots of websites effortlessly I encourage you to act now while the offer is on the table.

Sign Up At
Automatic Blog Machine

It occurred to me yesterday when I was reading an essay by technology investor and author Paul Graham called What Happened to Yahoo that RIM seems to be making the same mistake.

Yahoo was making a lot of money – so much in fact that they stopped trying to make more of it. They were blatantly ignoring new product ideas, and improvements to their services because it was too easy for the sales guys to sell banner ad spaces for millions of dollars. Along comes a competitor (Google) with a fundamentally more valuable product (Adwords) which very quickly destroys Yahoo’s banner advertising business. The lack of development at Yahoo over the years had unfortunately destroyed the corporate culture leaving them ill equipped to invent new products. They certainly couldn’t keep up with all the smart people that Google was hiring.

And so the inevitable happened. The business shrank forcing them to divest from important products and “re-focus” on core products.

I suspect that RIM made the same critical mistake. They owned the smartphone market until Apple came out of the blue with the iPhone. However it had taken Apple about 3 years of development before the first iPhone was released. Certainly at some point in these three years the pieces of technology that make the iPhone possible would have been discussed and tossed aside by people at RIM. They got far too committed to their crappy apps, and qwerty keyboards to try anything that might be an improvement.

The money RIM made hand over fist was from the enterprises that would buy expensive servers to manage all the corporate phones. It was the only solution for so long that they really didn’t have to sell it. Every new phone was only a minor improvement to the existing model, but people bought them so RIM probably thought they were doing a good enough job.

Now that there’s a competitor in the market RIM is finding itself in a bad situation. The phones operating system had been worked on by mediocre programmers who left it in a state where it now has to be tossed out – what’s worse is that they couldn’t trust the internal programmers to program their own operating system so they brought QNX in to do a proper job of it. The hardware hadn’t seen any major revisions or new ideas. And the backend servers that enterprises spent lots of money on have become obsolete – the iPhone can connect directly to Microsoft Exchange.

RIM’s business is now in decline and I suspect that they will soon find themselves cutting product lines to “re-focus” on key markets. They’ll continue to slide until eventually they become an acquisition target for the likes of Nokia or Motorola.

My suggestion to RIM to get them out of this is to step back and address some internal issues. They need to hire the smartest programmers they can find – steal them from Google, Apple, Facebook, and Microsoft if they have to. Give those programmers the freedom to work on projects that aspire to do amazing things for users (not businesses) and hold them to that vision. Tackle and rebuild the corporate culture to find and embrase new ideas, more efficient ways of doing things, and new business ventures to make money from. Encourage and give employees time to mingle between departments to discuss ideas and provide time and ways for them to work on them.

Want another idea? Start a business incubator program following the model of y-combinator but focused on BlackBerry Apps. Hire students for 4 months give them about $20,000 and help with the legal work for starting a business as well as networking connections. In exchange take 5%-10% equity stake in the business. It will help establish the developer community, potentially some killer apps or games for the platform and could eventually result in a huge payout if these companies ever get acquired or IPO.

I suspect however that RIM is a ship too big to turn.

This event has been a long time in the making and now the day has finally arrived.

Most readers of this blog would be interested in the technical details of the site.

Automatic Blog Machine is a django application hosted on Amazon’s cloud infrastructure. The project has evolved over several years various scripts that I had been using to personally manage some of my websites.

There were a number of pain points in the development and lessons learned.

PayPal Integration
The most difficult part of the coding was integrating with PayPal. It was also probably one of the more innovative parts from a sales/marketing perspective. I used the django-paypal app to handle the dirty work but it was really the signup process that I thought worked out really well.

For signups the sales page presents an account creation form. This form will create an inactive user account and then redirects the user to the paypal site to complete the purchase. When they finish the purchase paypal sends an ipn POST request back to the site which activates the account. This allows me to create some commitment and consistency in the buying process which should (in theory) boost conversions.

PayPal’s API is a bit of a mess and testing it is somewhat difficult. I’m looking forward to seeing what the guys at Stripe have to offer to compete.

Performance
There were a few weeks during development after I ramped up the number of sites that were being managed where the entire website was deathly slow. Because there are a number of python processes that are scheduled to run through cron it wasn’t easy to see which job was causing the bottleneck.

Eventually I discovered that one of the major cuprits was the use of print statements in the code. A lot of the older code was logging with prints to standard out and then redirecting to a file. This was good enough when they were a lot simpler and I was running them manually from the commandline. Switching to use python logging made a massive difference.

Effort
Django is a great framework that makes it very quick to get things put together. What takes time however is a lot of the little things – creating logos in various sizes for different pages, writing content for pages, and messing with javascript or CSS. I was surprised at how much time it took to get videos done. Even a 2 minute video takes a minium of about 40 minutes to film, get on the computer, edit it, export it, and upload to the web. the 12 minute sales video took a full day to finish, plus a few hours to write a script.

The coding, thanks to Python and Django took almost no time.

Development Tips/Tricks
Because I was the only developer on this project I was able to work in a way that probably wouldn’t work well for a team.

All the code I was working on was kept in a DropBox folder – this allowed me to have access to the latest changes across all the computers I might use.

I used Fabric to deploy both the code and the media files. Static media files were hosted on Amazon S3. The code was committed to a private code repository on bitbucket and then remotely pulled to the server. This seemed to workout really well and made deployments very easy and quick to do.

Virtualenv and pip also were a great help for managing the libraries and python versions across the computers I have.

Don’t forget about some of the nice things that users need. Just an hour after launch I realized that I wasn’t sending welcome emails and I was hiding the link to the login page. So the first few people I had to manually send them a message for how to login. Somewhat embarrassing.

Spend some time thinking about how best to organize the templates. As the project I started to find I was doing a lot more copy/paste and it resulted in some minor bugs where pages had missing links. And resulted in having probably a few more files than were really necessary for base templates that were 90% identical.

Much of the work done on this happens in scripts that are scheduled to run – there’s no webpage getting hit so errors are not visible when going through the site. It was really helpful to have those scripts set up so that errors created emails with stack traces – that allowed me to quickly track down some lingering problems.

Final Point
Definitely would recommend using python and django to anyone doing web application projects. It’s really a pleasure to use. As a developer though I totally underestimated the time it takes to get the UI just right, and think of all the various pages and emails that are required to go out.

I went to school to learn how to program.  In fact I went to one of the best Computer Science schools in Canada – University of Waterloo.  While there I took all of the hardest courses I could fit into my schedule including 2 of the “big three” – Graphics and Real-time Operating Systems – which lead to many (MANY) nights in the lab that I never got home until 5am.

I love writing software and I love reading about it.  In fact I estimate I do about 3 to 4 hours of reading every day!

Over the last few years I have tempered my reading about computer related topics with learning entrepreneurship skills.  Things like sales, marketing, accounting, financing, leadership, and networking.  This evolution has changed me.  It opened me up to a lot of new ideas and points of view.

There are a lot of entrepreneur skills that make a lot of sense for software development.

Great sales people split test and measure the results of any particular approach they take.  They change headlines, colors, fonts, layouts, images etc to try and gather data about what works best.  They never stop testing new things.  Gathering these types of statistics overtime will improve the sales process and make drastically more money for the business.

I have not seen many (if any) applications that are taking this type of approach to optimize.  Imagine how much better software could be if  there were easy ways to gather and visualize how it’s usage changes between versions as a result of UI changes or how real-world performance changes with a new algorithm or data structure.

Entrepreneurs biggest problem is that they have lots of ideas but it’s hard to finish. It’s tough to get though the resistance to actually ship something before another idea comes up to provide an escape to avoid the fear of failure.  Solutions to dealing with this natural tendency is to not self sensor, be stupidly ignorant and stick to the core idea, and anticipate the resistance by pushing through with more focus as the deadline looms.

These are things that I think programmers should embrace.  The first version of a program should be written as quickly as possible, with little thought put into performance or maintenance.  Anticipate that as you get to the later stages of writing a program the parts remaining will get harder and harder to get through (because you’ve skipped the hard stuff along the way).  When you get to the last few bits of a project the only thing remaining is usually the stuff you hate doing – UI code or graphics or tedious clean up.  Expect it.  Focus.  Do the work.

Good entrepreneurs know that their opinion on their own ideas is fairly useless. Not until the product is available on the market where customers can prove it’s value by opening their wallet is anything for certain. Until the idea is proven in the market place it’s value is a guess.

Likewise until a program is in the hands of users, programmers are just guessing at how it will be used, by whom, and with what level of knowledge. Therefore just get it out there and measure these sort of things after the fact. Don’t make too many guesses about a product before letting people use it. And recognize that until people use it your are just guessing.

Most of the entrepreneurs I have met exude a tolerance for taking risks – for going after the big ideas. Have that same boldness for your own software development work and you’ll accomplish great things.