Category Archives: Business

Building a Fast Computer

I recently watched a talk by Alan Kay in which he talked about innovation:

It’s a great talk and it got me thinking of quite a few things, but one of them was that to be truly innovative you need to work with future technologies today.  In order to do that you need to invest a lot of money.  Alan Kay’s examples from his time at PARC working on the first personal computers are spot on.

In order to experiment with computer networking at a time when a single computer was expensive and hard to come by you needed to spend a lot of money to buy many computers before you could even contemplate the need for a network and what it might do.

In today’s age a modern computer has been ‘good enough’ for the last 5 years.  Even as a professional who has 5 computers in my house, and makes a living by programming software I haven’t felt the need to ever buy a top of the line computer.  It doesn’t take a lot of CPU cycles to run a text editor.

However, Alan Kay’s talk gave me a good reason to start thinking about building a powerful new computer.  Creating new technology for the future using tools from the past is going to be more difficult.

It has been a long time since I’ve had a truly high end computer to work on.  The portability of my Macbook Air has been the most desirable trait I looked for over the last few computers I have owned.

My next computer will be a fast desktop.  I’m hoping to be shocked at the difference in speed compared to what I usually work on.  Moore’s law has been chugging on these last few years and I haven’t been keeping up with the exponential growth.  Computer performance has hockey sticked and the software hasn’t really been keeping up lately. So there is an opportunity to create some truly remarkable stuff with software.

Lessons from Consulting

As a consultant you get the chance to work on lots of unique projects from the ground up and also to come in and fix up existing projects.  With an eye towards managing a budget, estimating your time, and  keeping active communication there are a lot of valuable lessons to learn.

On the other hand things are very different when you have only one client (the company you work for).  As an employee developing software that is owned by the company there are fewer external constraints, timelines are often times more flexible, and how you budget your time is less onerous.

Making a good estimate on a software project is extremely difficult.  When you make an estimate and are held accountable to deliver within that estimate then there is pressure to be as thorough as possible.  Knowing how things are progressing within that estimate requires accurate time tracking.  Learning from it, to get better at your estimates, requires a feedback loop where you can compare the estimated time to the actual time and figure out why they don’t always match up.

Keeping yourself to account on initial estimates helps develop a better sense of the scope of the projects you undertake.  This benefit carries over to personal projects as well.

When working on 10′s of different projects over the course of a year organization is key.  It’s not limited to just your files.   Organizing your communcation, reading material, and schedule is super critical when juggling a lot of projects. Being able to jump into 2 year old code to patch a security vulnerability quickly requires a level of organization and consistency that takes time to develop.

Everyone at some point should at least try to be a consultant. Running your work like a business gives a unique perspective on how others perceive you. It’s a game changer.

Getting Back to Node.js

Javascript is the most popular language on GitHub.  There is roughly 5 times more Javascript than Ruby code!

Node.js has been moving very fast since it was first released 5 years ago.  It has been pushing the development of Javascript to expand into numerous other areas including commandline tools and servers.  Coming back to it now after a year, it’s amazing to see how it has matured.

The bleeding edge ECMAScript 6 Harmony language changes to Javascript have helped to tame callback hell, Express has become the defacto standard for web servers, and there are now libraries available for just about everything you could want.

One thing about Javascript that is interesting is the uniqueness and flexibility of the language. When you read other people’s code and say “that is clever” it feels like you’re understanding how another developer really understands what the code is doing.

Most developers who haven’t worked with Javascript make the mistake of assuming they know Javascript.  However Javascript deceptively complex.  Understanding the subtleties of how ‘this’ is defined gets tricky.  Being able to write idiomatic, properly encapsulated, testable code is requires some dedication.  Good code is much different than just using jQuery to hide a div.

I just finished reading Node.js the Right Way: Practical, Server-Side JavaScript That Scales and though I picked up a few tricks it left me wanting to dig much deeper to understand and learn more.  Thankfully there are now plenty of books to read on the subject.

It seems as though Node.js and Javascript have been infiltrating the enterprise.  Using the same language from front end to backend is a great selling point.  The high performance is perhaps more valuable.  What this means to you is that learning Node.js has actually become a good career move.

Open Sourcing old Projects

While trying to clean up my computer a little I noticed that I have a lot of old projects that are really doing nobody any good by just sitting on my computer.  So in an attempt to both back them up and share them with the world I’m going to be reviewing some of these old projects and sharing them on GitHub.

The first project I’m open-sourcing today is an old simple web app I did way back in 2007 called TwitSig.us.  It’s a PHP application that retrieves your most recent tweet and renders it into an image.  It was designed to be used as an email signature that would continue to be up to date.

You can now find the code for this project on the github repository.

Creating More Apps

One of the goals of Halotis is to create and launch a number of robust webservices for Mobile Apps.  However, before we are ready to launch those to the public for use we want to make sure they work at scale and prove that the ideas are useful.

To that end we have set an ambitious goal of launching a large number of apps and games over the next few months in order to gain the scale we need to dog food our own services.

A game we have been working on which will be coming out soon is a match-3 type game called Invader Crush:

IMG_0548

 

Another game which will be released shortly is our hilarious take on the Flappy Bird phenomenon.

iOS Simulator Screen shot Feb 13, 2014, 9.32.25 PM

 

With the help of tools like SpriteBuilder we are producing a stream of new games as quickly as possible all of which will be used as a test platform for refining our backend services before they’re ready for public use.

Yeoman for Modern Web Design

While I’ve been delving into Django and Ruby on Rails for the last few years the world of Node.js has been maturing.

The set of command line tools that have developed around the Node.js platform has evolved tremendously.  They have escaped beyond the confines of Node.js Apps.

Yeoman brings together an app starting templating engine (yo), Grunt – a framework for command line tools, and Bower for dependancy management.

The biggest thing I have gotten from working with Yeoman is the exposure to new tools and new ways of thinking about web development.  SASS + Compass, with HTML processing.  you can tie together Jekyll for static page templating, and use bower to pull down javascript libraries without having to scour the internet for the latest versions.

Yeoman brings together all the nice things we are used to in the python and ruby world.  It’s kind of interesting to work with management dependancy for javascript libraries.

Playing with Sprite Builder

The new cocos2d v3 and Sprite Builder release is a compelling new way to build cross platform (iOS + Android) games.  I’ve been playing with it for the last week and have been seriously impressed with how easy it is.

Compared to the old CocosBuilder it was based on this is miles better. Integration with Xcode is super slick.

I will probably try to use it going forward in the games I work on.

Curious? checkout Sprite Builder.

Lessons From Flappy Bird’s Success

Much has been said in recent weeks about the conundrum that is Flappy Bird and how it could have possibly become the #1 Free app on the App Store.

First off I think it’s great to see a small independent developer is still able to have some success on the App Store.  It has become increasingly difficult to compete with the big game companies that are pumping a lot of money and development time into creating games.  For a while it seemed to be unlikely that independent game designers had a chance to be found at all; that the top charts were being gamed or bought.

One interesting comparison I haven’t seen any one talk about yet is the difference between a poorly monetized #1 Free App (Flappy bird) and a Top Grossing app. Flappy Bird was reportedly earning $50,000/day in advertising revenue.  Clash of Clans is reportedly generating $5,000,000/day. Interesting that even with the massive surprise success of Flappy Bird it’s still generating merely 1% of the revenue of Clash of Clans. What insight could be gleaned from that? possibly the poor performance of banner ads vs. IAPs, the value of engagement, or importance of session length?

To me, the reason for Flappy Birds success hinges on two factors:

  1. Comically entertaining and difficult – In my first attempt I was dead in literally 0.1 seconds.  I believe the initial response to this for most people is “WTF!? I have to show my friends this so we can laugh at it”. It’s the same urge people have to share funny things they find.. how could you NOT post this to Facebook if you found it at Walmart:
    most_unfortunate_food_names_06
  2. Rating and Reviews – The game has very few things you can do. Play, share and rate are the only buttons you can press.  I believe that once the word of mouth virility spread (due to point #1) the game’s design lead to unusually high number of similar WTF app reviews.  Due to Apple’s weighing of reviews and ratings into the search, Flappy Bird started to snowball up the charts. Eventually part of the game was to write a funnier review and for a while it was seeing 100′s of reviews posted per hour.

If there are lessons to learn from Flappy Bird they would be the importance of having something worthy of sharing, and a call to action asking for users to rate your app. Flappy Bird proves that with a bit of luck, these two factors can create a tipping point which is enough to reach #1 in the App Store.

Meditation For Programmers

Programmers have one of the most intensive intellectual jobs.  It requires great focus and concentration to write software productively.

If you measure the productivity of a programmer you might be surprised at the range. At the bottom there are software developers that actually create negative productivity; every line of code they write is one that someone else will have to re-write. At the top end is the so called ’10x’ programmers who can single handedly churn out multiple hundreds of lines of code per day.

Average programmers experience ’10x’ performance occasionally as being in ‘the zone’.  When in the zone, time zips by, you find yourself knowing all the code you need to write and are limited only by your typing speed.

Getting to this 10x level of performance consistently requires a lot of prerequisites to be met. You need to be proficient with your programming language syntax, you need to know the libraries you’re using and you need a base of understanding of computers and your problem set so as to avoid the need to refer to Google to answer “how to” questions.

If you find yourself asking things like “How do I write a foreach loop in this language?”  or “What’s the API for doing an HTTP request?” or “How do I add authentication to this?” then you need to step back and do some more learning.

Getting past this first bar to productivity is pretty clear: buy a book, read it.

There is a second bar to productivity that is not so obvious how to improve on. Truly difficult problems require intense focus for long periods. External distractions can be mitigated with ease. Turn off your email client, silence your phone, put on headphones.

Internal distraction something that I haven’t heard many discuss. Mental focus is a skill of the mind.  Meditation is a practice for training the mind. By practicing meditation you can  extend your ability to focus without interruption and gain a deeper perspective on the problems at hand.

When you are able to think about  a problem for only 5 minutes at a time before your mind wanders or you get distracted then you can only gain a shallow understanding of the problem. With an hour of single minded focus you can get very deep into the rabbit hole.

Training your mind for this level of focus can take a long time.

Start your meditation by eliminating external distractions. Find at least 15 minutes in the day to focus inward. Start by thinking about your toes individually making sure each of them is completely relaxed before focusing on the arch of your foot, then the ankle and so on until you get to thinking about all the muscles in your face and head. Do not move during this exercise – even to scratch an itch.

By giving yourself a routine like this to practice it’s easier to identify when and how often your mind wanders to other thoughts. When you do find yourself de-railed just bring your self back and continue relaxing where you left off.

When you can maintain 100% focus on relaxing yourself through toes to head then you are ready to start pondering the problems at hand.

Over time work yourself up to an hour of focused thought.

Not only is the time you spend in deep thought productive at forming ideas and solving difficult problems, but you’ll find that your ability to focus when working  also greatly improves as well. You’ll find yourself in “the zone” more often and for longer.

To those who have never tried to meditate I challenge you to try this relaxation thought exercise just to see how difficult it is to keep your mind from wandering or finding yourself focused on an itch you can’t scratch.  It’s not easy.

Candy Crush Game Analysis

Candy_Crush_Saga_-_KingCandy Crush Saga from King has been dominating the top grossing charts for a very long time now.  The game mechanic itself is not new or particularly innovative and is of similar type as Bejewelled that was originally released in 2001 – long before the iPhone was invented.  What is it that differentiates CCS from the pack and keeps it at the top of the charts?

CCS was originally released as a Facebook game, and was later re-written for mobile.  Much of the virility aspects is a result of this heritage.  It is and was a key aspect of the games distribution and marketing.  I’ll come back to the social integration later in this post.

Art and Design

The first thing you might notice is that the game has a very unique and recognizable art style. This branding helps it stand out in the clutter of a Facebook news feed.  The game’s UI is consistent, with smooth simple animations.  The theme of the game is attractive to a wide audience of casual players.

The UX for the menus and dialogs are designed to reduce confusion. In most cases there are very few decisions to be made.  For instance the start view contains 2 obvious buttons: “Play”, and “Connect with Facebook”.  Settings and extras are hidden to reduce clutter and focus the player on the actions King would most like you to take. (The Facebook button disappears once signed in)

IMG_0502

The design of the levels map clearly shows progress in a way that is more difficult to visualize in a flattened list of levels. The integration of Facebook friends into the map is particularly interesting (I’ll discuss this more later).

IMG_0497

For the match 3 game itself there are no obvious issues.  One thing I might change is to encourage the use of power-ups to help players learn to use them.  The colors provide good contrast needed for this type of visual search game. The various goals, power-ups, special blocks, and levels keep the game challenging, and interesting through the 400+ levels.

IMG_0505

 

One nice touch is the consistent use of a squeeze animation on all buttons. This helps keep the UI feeling alive and helps indicate things you can touch. It’s simple, consistent and goes a long way to improve the look and usability of the game.

Gameplay

The game has fairly short segmented levels.  Players can play for 5 minutes at a time conveniently.  However, a level on it’s own is not the core game loop…

The core of the game is based around hearts.  You lose a heart when you fail to pass a level, once you run out of hearts you are presented with with options to get more.  This is one of the places where King has pay walled the game.  You have the choice of waiting for free hearts, collaborating with friends for hearts, or purchasing some.

I’m sure there are some key metrics that King is collecting to help optimize the levels. For each level they have a couple of levers to pull that can change the difficulty.  After a level has been designed it can get a number of moves and thresholds for points needed to get the stars.  On the backend these numbers can be tweaked to meet certain goals. The vast majority of levels would be tuned to say an average number of attempts before winning. Some levels on the other hand could be tuned to higher difficulty in order to encourage IAPs or to drive online discussions about tips and techniques to win. Still other levels may be artificially easy, for some positive feedback.

Being able to tune the difficulty easily gives King a way to provide just the right amount of challenge to players, which in turn keeps the game enjoyable.

With 400+ levels CCS needs a lot of variety to keep players interested. With most game updates they’ve managed to include some new pieces, power-ups, behaviours and goals to keep you learning and challenge you to think of new techniques to deal with the new levels.  Constant investment in the game has helped extend it’s life and keep it popular.

Monetization

You don’t get to the top of the top grossing list without nailing the monetization.  One of the things you might have noticed is lack of an in game currency.  Unlike what is popular in many other games on the App Store right now. CCS does not have IAPs for currency with large price points.  Instead they present many opportunities in the game to make smaller $0.99 impulse purchases. This integration is rather ingenious in that there is no “store” in the game you have to go to to make a purchase.  The IAPs are seamlessly integrated into the flow of the game and priced where they can be quick impulse purchases.  On the other hand having a store and currency would add friction to the buying process – go to the store, decide on an amount of currency to buy, then find the place to buy hearts and make another purchase there.

iaps

CCS used to have ads in the game for additional revenue but removed them. This move places more focus on staying in the game (and running out of hearts) rather than getting distracted to go download something else.

There was also a small “Yeti Store” in the game for a while that sold some high priced non-consumable power-ups.  This seems to have been removed.  It’s likely that these permanent power-ups either made the game too easy or the revenue from these paying players would be higher with just the consumable power-ups being the only option.

There are many opportunities to buy things in the game. Before starting a level you get a chance to purchase power-ups, if you fail the level you get a chance to buy a few more turns to keep going, if you run out of hearts you get a chance to buy more hearts. When you finish a block of levels there is a paywall to wait or pay to unlock the next block of levels.  All of these purchases are inexpensive impulse buys.  This model of integrating the IAPs at the point where they are needed in the game, and otherwise hiding them is obviously working very well.

As you can tell King is not afraid of making significant changes to the monetization as they measure and experiment.

Social Integration

Being initially a game on the Facebook platform pushed King to deeply integrate the social aspects of the game. They have managed to execute well on both cooperative and competitive levels, as well as providing deep social proof and tools for virility.

IMG_0518

The game changes dramatically once you connect your Facebook account. Suddenly all the friends in your social graph appear on the level map. At a glance you can see how many of your friends have played the game, and how far into the game they’ve gotten. It’s some powerful social proof of just how many other people you know play the game, and implies some competition for you to catch up to your friends.

For competitive incentive the top scores amongst your friends are presented before playing every level.  The implied competition hopefully gets you play longer to beat their scores (and loose some hearts in the effort). Seeing photos of your friends baked into the game is kind a cool way to personalize the experience.

IMG_0504

They have a system for gifting and requesting hearts. This appeals to the players looking for a more casual, cooperative approach.  It’s also ties into their somewhat subversive way of blasting facebook with messages.  Each message that goes out is yet another opportunity to get players back into the game.

Marketing

Most games at the top of the top grossing list have taken to a strategy of fortifying their position through massive and aggressive advertising. With a massively profitable game like Candy Crush they have a huge budget to purchase traffic on ad networks. Persistent ads attract new players and remind existing players that the game is still installed. By spending a significant portion of game revenue on advertising they continue to buy their position at the top of the charts.

Refinement

Keeping a game at the top requires constant attention. King has been consistently adding new levels to the game with new power-ups, goals, and obstacles.  They now have over 400 levels.

The UIs seem to have been getting simpler over time.  Monetization has been simplified to focus solely on IAP consumable items, ads have been removed, non-consumables have been removed. Small consumable IAPs seem to be working extremely well.

Re-Skinning

King is not sitting idle on just one game.  They’ve discovered a formula that works and are busy replicating it. Pet Rescue Saga is essentially the same game with different graphics. This is an easy way to re-use the code, attract a different audience of players and build a network of similar games that you can cross promote while keeping things in the family.

Key Lessons

If there are key lessons to be learned from an analysis of Candy Crush they are:

  • unique and original gameplay is not required for success
  • very simple UIs help make the game accessible to a wide audience
  • tightly integrated consumable IAPs can generate more revenue than ads or non-consumables
  • continuing iteration on the same game is critical to keeping it relevant
  • making social part of the game add genuine cooperation and competition
  • being able to easily fine tune the difficulty makes easy to get the balance just right