Category: Advice

  • 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.

  • 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:
    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.

  • Candy Crush Game Analysis

    Candy 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)

    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).

    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.

     

    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.

    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.

    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.

    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
  • How to find time

    One of the hardest things in getting productive work done has always been finding time to get focused work done.  There are so many demands on our time that what we want to accomplish gets pushed out in favour of other more immediate or more pleasurable things.

    Back in the day when Ben Franklin, Albert Einstein, Nikola Tesla, and Alexander Graham Bell were alive the mind numbing effects of TV were not yet felt.  These great thinkers could devote an extra lifetime to their pursuits. The average Canadian watches 30 hours of TV per week! The loss of productivity to TV is astounding.  Taking that TV time and instead using it to learn, experiment and pursue goals would change the entire country.  If people took back their evenings to tinker with robots, or learn an instrument we would be in a very different planet right now.

    Reducing or eliminating TV is the low hanging fruit for finding more time in the day.

    For Ben Franklin not watching TV didn’t provide any competitive advantage over other people of his time (no body else had TV either). Franklin found his extra time in the mornings. By waking up before the demands of everyone else could direct his day he was able to get an astounding amount of work done. The quiet solitude you can find in the early morning hours can be more focused and productive than the rest of your day.  It is the perfect time to exercise, plan the day, or study something new.

    Converting to a morning person takes dedication and planning. But it will give you a couple more hours in your day to devote to your pursuits. (How to do this is worthy of another post)

    People today, have the additional benefit of the tools of automation and convenience. Microwave ovens, coffeemakers and dishwashers can each contribute small amounts of time back to our day if used. By brewing your own coffee in the morning you save both time and money over waiting in line at starbucks.  Technology is here to serve us and make our lives more convenient so that we may devote less time to chores, and more to what we want.

    Technology and automation is the 3rd leg in our pursuit of finding more time.

    Finally, with so many things demanding our time, finding focus and eliminating distraction will make the time we do get more productive. As a software programmer I am acutely aware of the pitfalls of multi-tasking. The human brain just isn’t very good at actively working on multiple things at once.  It takes time to really focus our attention on a task and get into a mental state where we can accomplish significantly more. Whether through physical isolation or by using tools to reduce chatter or developing a pattern of work that provides time to focus you can get more done with the time you have.

    Of course you need the motivation and ambition to direct the time you do have to productive means.

  • Trick for crispy homemade sweet potato fries

    After much trial and error to create yam/sweet potato fries as good as a restaurant we finally discovered the secret.

    Coat them in corn starch and oil before baking.

    Simple and delicious.

  • Produce as Much as You Can

    It took a long time to really  fully appreciate the feeling you get from producing something new in this world and letting it go for sale or for free.

    There’s a lot of apprehension that comes with those first few products you release.  You worry about the bugs that are still there, the features you didn’t have time to implement and the competition that is fierce.

    Until you release something to the public for consumption it can be as perfect as you imagine in your mind.  Real life users never match up to your expectations – they don’t know how to use it. where are the features are, what it’s for etc.

    You put a lot of time and effort into building a new product.  Much of the skill that goes into creation is learned through school and books.  The things you learn from the first release of your product to the public can really only be learned by doing it.  The only way to get better at releasing your work to the public is to do it often enough to gain experience.

    So create as much new stuff as you can in this world.  Get it out there for others to use.  Learn as much as you can.  And then do it again.

    It’s the most addictive thing I know.

  • 6 Tips For a Successful Project Plan

    The difference between a successful project and one that is a dismal failure can often come down to the project plan.  There are different approaches to planning from ad hoc planning to full on gantt charts in MS Project.  I think there are some universals for developing a plan that results in a project that works as expected.

    1. Have a Vision

    It’s not smart to just be reactionary – someone asks for a feature, you add it.  That just results in a mess over time.  SpaceX the private rocket company run by Elon Musk, runs every decision through their goal question. “Will this help us get to Mars?”  By running every decision through this one question it helps to make sure that they don’t detour  slowly over time.  Figure out the end goal.

    2. Set Waypoints

    Figure out a series of releases that you could hit along the way to your final vision.  Ideally have things that can be done in less than a month.  Quick releases helps keep the momentum and allows you to test assumptions early, as well as build skills necessary for a better final project.

    3. Trust the Numbers

    You will make mistakes, misunderstand the market, have difficulty finding an appropriate sales strategy and have UI designs that your customers don’t understand or features they don’t want.  You will.  Be sure to have the analytics in place early to determine what actually works, and re-adjust your plan for the realities of the market as you discover them.

    4. Budget, Scope, Schedule

    If the project you want to finish cannot be done on time, on budget, or with all the minimum features then you have to face the real problem of re-evaluating the project or deciding to find something else.  Of course accurately knowing the costs of a project before hand is impossible.

    5. Talk to people

    You can’t create a a successful business in a vacuum.   You need customers.  They may not know what they want, but you definitely need to communicate with them.

    6. Track progress

    When you don’t track progress towards hitting your waypoints it is inevitable that deadlines will slip and scopes will balloon.  Tracking deadlines provides a bit of extra motivation to you and your team to work harder and more focused.

  • How to SOA an existing project

    SOA or service oriented architecture is a way of building a complex project so that each individual unit can stand alone with a documented API.  There are many benefits to taking an SOA approach to designing a complex software system.

    To those familiar with programming, SOA provides the same sorts of benefits as OOP but at a higher level of abstraction and with a network interface rather than a code interface.  The benefits of providing encapsulated logical units that can hide the complexities is well understood by most experienced programmers.

    For a business taking a SOA approach to building a complex project makes a lot of sense.  It allows teams to be divided into smaller groups to reduce the communication load and help limit the scope of the problems that any one developer has to concern themselves with.

    So how do you take a monolithic piece of existing software and change it to SOA?

    The first and perhaps most critical decision to make is where to cut your application into pieces which can become isolated services.  The most obvious first approach might be to cut between the GUI and the business logic.  That is usually NOT the best thing to do for any real complex project.  Deep coupling of the UI usually makes this division much to big for an initial undertaking.

    Likewise starting with something too small can lead to an abandoned project.  A simplistic project that can be ‘finished’ such that no developer ever has to be familiar with how it was built can lead to problems down the road when it breaks and no one knows how to fix it.

    So an SOA unit should be logical,  it should be not too big that it is destined to fail, and not too small that it can be forgotten.

    A further guide to finding an aspect of the code to pull into a service is whether it will have more than 1 customer or could have more than 1 if it was a service.  By customer I mean anything that might want to call into it’s API.  For a HR system the customers might be the GUI used by HR department, tools used by managers, excel spreadsheets used by the CFO and a business intelligence dashboard for the CEO.  With that many potential customers of an API there is a strong benefit to having an SOA approach compared to asking HR for quarterly reports or sending them emails to update an employees phone number.

    One further option to consider is to wrap your entire application in an API so that it can be leveraged somewhere new.

    On one project I worked on we had a complex requirement for managing encryption keys. We needed a way to expire old keys, provide redundancy against server failures, and have a nuclear missile style 2 person/2 password login process.  It made sense to develop this as a stand alone service.   It paid off with a project that gives us confidence that some newbie programmer can’t easily create a critical security hole in an application that uses it.

    Amazon is perhaps the best case study for a successful SOA deployment.  Their SOA approach has spawned entirely new billion dollar businesses (AWS).  One of the benefits they’ve seen is that because of their highly used SOA APIs the requirement for testing is greatly reduced.  Incremental updates get slowly rolled out providing time to listen for errors.  On these highly exercised APIs regressions can found quickly before any harm is done.  The actual use of the service provides a much more complete test of it than any test suite could possibly perform.

    Perhaps the best place to start on an SOA conversion project is to see if there is already some natural divisions in the developers knowledge and experience within the existing code base.  Creating SOA services based on these natural lines will ensure that the new teams will already have an expertise in their service and reduce the learning/ramp up time.  Domain knowledge is the biggest hurdle for any programmer (ie it take a lot more time to switch from enterprise software to video games than it does to switch from Javascript to C#).

    So you’ve got an idea for where to start.  The next thing to decide is what the API should look like.  I prefer RESTful interfaces because of the lower barrier required over something like SOAP for clients.  SOAP would make things like a bash shell script difficult to do.  I also prefer JSON over XML for similar reasons but also because XML allows for some style inconsistencies between developers such as should something be an attribute or child.  Should authentication be done with simple username/password or are there requirements for something like OAuth?

    Your team should probably develop a couple of libraries in some key target languages for their API.  This hides things like URLs and encodings behind a more obvious code API.

    Documentation is also very important.  An undocumented API will probably never be used by anyone.  Both the raw API and any libraries should be documented with examples.  If it’s a public API, put your libraries up on github.com so that other developers can easily find them and keep up to date.

    Work in some analytics if you can for the new API.  Tracking usage and performance of your service is fascinating and can provide some key insights into where improvements could be made.

    Lastly, a new SOA project will include some new infrastructure and deployment requirements.  You’ll need to decide on server requirements, uptime and redundancy for this new service.  As well as write any new deployment scripts for it.

    So an SOA conversion is not a trivial task.  It does come with some overhead which is usually made up for by growth of the service as it finds new customers and new use cases.  Reducing the scope of a large project into separate services provides less easily measurable benefits such as reducing communication costs, reducing the scope of future changes and making the project easier to understand.

  • Another Game in the Queue

    Icon-72On Monday this week we submitted another game to Apple for review.  This one is called Andromeda’s Savior and it should be available sometime next week in iTunes.

    The plan is still to push out a bunch of games very quickly.

    After an intense strategy meeting on Tuesday we decided to focus on a few key features to add to the platform before we spin out about 5 more re-skins as quickly as possible.  Then with 7-10 games in the store to generate some cash flow we’ll make a judgement call about whether to continue with quickly producing games or to spend a couple months on developing something higher quality.

    Developing 7-10 games with various art styles and themes should provide a couple of benefits.  It will give us more experience with Photoshop, 3DS Max, and Inkscape to create better graphic assets.  It will help to give us some insight into potential markets/themes that are more popular or easier to compete in.  The base of apps will also provide some leverage for cross-promotion of any new games we release.  If we do decide to release a more complex game in the future we’ll have a base to support it’s launch and some market intelligence to help guide it’s development.

    Needless to say, I’m going to have a busy few months ahead of me.

  • Finding a good A/V receiver

    My 12 year old A/V receiver bit the dust last week.  It seems to have overheated and burned out some components judging by the smell.

    So now I’m looking for a replacement.  The first thing I learned is that the Canadian stores all price the products at about 2x what they go for on eBay in the US.  In fact, price shopping for a receiver opened my eyes to just how ripped off we are up here.

    When the Canadian dollar reaches parity with the US dollar there is generally the occasional news story about how the price of books is not getting adjusted.  Books are singled out because they’re one of the few products that put both the Canadian and US price on the label.  Most other products have the good sense to hide that information from us.  However that price disparity is there on everything, and it is often even bigger on those other items.

    The biggest problem with buying something like a receiver is that they all kind of suck in my opinion.  It’s very nearly impossible to know what is good or bad, or what sound/video quality differences are even noticeable let alone worth the price.  Setting up these machines is usually the issue.  Bad interfaces make it difficult to know if things are plugged into the right spot or whether your inputs are in the correct formats.  It is difficult to put good information into a one line text display to help understand what might be happening on any of the 50+ inputs/outputs on the back.  Massive knots of cables are a nightmare to look at and figure out.

    What I’d like is a HDMI only for inputs, and a decent amp to power 7.1 surround sound speakers.  Not much else and no legacy support for outdated standards – drop s-video, composite video inputs, and no CD player inputs or phono.  With such a simplified receiver the interface would be as simple as select input and control volume.  As far as I can tell that doesn’t exist.