Dokusen: The Art of Domination (iOS puzzle game) — A month later

It’s been a month since I released my latest iOS game Dokusen on iTunes. At first I considered polishing some aspects of the game and releasing an update, but to be honest the idea of developing a new game from scratch is more attractive, so I’ve stared down that path instead. So in a sense you can consider this post a “post mortem” of this game.

At heart, this game was an experiment to see if a bigger focus on visuals would reflect in more popularity in the store. I also spent a much larger chunk of time advertising on net forums, on roughly 20-30 different sites.

From a downloads perspective, my personal goal was to get at least twice the downloads of my previous game. Initially things went great, with the number of downloads from Dokusen in the first two days surpassing those from the first week of my previous game. Unfortunately downloads suddenly decreased after that on the 3rd and 4th days, such that I only reached 75% of my target downloads (to date, Dokusen got 1.5x of my previous game’s count). Though this is a bit of a disappointment, I should look on the bright side because at least things are going in the right direction. The large spike on the first two days is still a bit of mystery to me, since with previous projects downloads leveled off at a much slower rate. Oddly, I got a large majority of downloads those first two days from France.

These numbers are a further confirmation that advertising on net forums is not a great way to pull in downloads. I did, however, get some good feedback on the game’s rules from on a board game forum I posted on, since it shares some elements with Go and Reversi.

A week or two ago I talked to one of the people who informally tested for me, and he remarked that my previous game was much more fun and easier to understand. This was good feedback, though altogether not that surprising since I feel the same way. Ironically, with Dokusen I had tried to build a game that would be popular with others, but not necessarily myself.

For my next game (codename “T.E.” for the time being), I am planning on making something which I enjoy more myself, in terms of both coding and gameplay. I also plan to make a proper tutorial, as well as get more playtesters (please leave a comment if you are interested in helping). This next game is rooted in a longtime passion of mine, and the work I’ve done on it already is more challenging and interesting than Dokusen. I’m aiming for a release in 3-6 months if things go well.

Though I implied this project was mostly done, I am always open to feedback on Dokusen or any of my other apps. If you looking for someone to review your game I am OK with exchanging reviews of your game for mine.

Programming Trick: Speeding up your recursive loops with a creative technique

Lately, I’ve been working on a new game project which is very different than all the other ones I’ve done so far. I’m planning on waiting until it gets a little further before I write about it in detail on this blog, but I ran into an interesting technical challenge and I’d like to discuss how I solved it.

To implement the game mechanics I need a graph of nodes, with various connections between each node. I have a need to find the shortest path between two nodes, where the path is calculated by the sum of the length of all connections as part of the path.

I started out with a simple recursive algorithm that started from each node and worked backwards to find all possible paths to get to it, and used a map to store the best connection to move, given a certain intermediate node and a certain destination node. This worked really well, although after around 13-14 iterations on a graph with many connections it started taking over a second to compute and them getting exponentially worse.

One option was for me to search for a more proper algorithm to find the shortest path, and I am sure this has been perfected by  programmers over the last few decades. But I had a secondary requirement to also store all non-optional paths as well, so some of those algorithms probably wouldn’t suffice.

Looking at my recursive function, I realized that there really wasn’t much going on in terms of sub-functions it called that do any significant calculation. If there was, I could try to optimize those or cache up some result. But the question remained – what was taking up all the time?

Looking at the function again I saw that I was passing four different arguments into it. If you have ever studied assembly, you probably know that there are several instructions just to push and pull each of these to and from the stack, and since the function is called so frequently I thought that maybe this added up to a big chunk of the total time.

I decided to test my hunch by making all the parameters into global variables. I purposefully didn’t use class variables since I knew there would be extra lookups required, translating to extra work for the CPU.

It was a bit of work to make this transformation, since for non-pointer variables I had to manually save the state before calling the recursive function, and then re-set it. But this was only for two of the variables since the other two were pointers anyway which were supposed to change (one was the map which stored the nodes that had already been traversed so far, and I already had code to adjust that when returning from the recursive function).

The resultant code was a bit harder to follow, but the performance was significantly better. For the test case I was using I was able to get several more iterations before it got significantly slow (>1 second), if I remember correctly to at least 19-20 iterations.

If I keep adding nodes and connections eventually it still gets slow again, but I will probably put limits on these anyway so I may be safe with this solution for the time being.

Although I enjoy designing games from a high level, after many years of coding I still enjoy these types of algorithmic challenges, and the satisfaction of a well-tuned function.

Mobile Game Development: learn your weaknesses and strive for consistent quality in all areas

Having taking a few iOS projects from conception to release on the Apple Apple Store, I’m starting to discover patterns in how I go through the development process. I plan to use this information to tune how I handle future projects, resulting in efficiency improvements as well as a higher quality result, hopefully leading to a larger user count.

I recently became more aware of the stages I go through in a typical project. I start development in what I would call a “creative” stage, where I am thinking of new ideas and enjoying the implementation process, as well as the iterative design that goes along with that. At some point when the project far along enough, I start to feel the need to just release something – what I’ll call the “get it done” stage.  I think this stems from my fear that other things will come up in my life and not have time to finish the project, or that I’ll just get bored of it and quit partway through, similar to why I would be hesitant to start reading a long novel.

The “get it done” stage is dangerous because the remaining tasks are done quickly, with lower quality than things done in the “creative” stage. For example, I usually create my app’s icons near the end of the project, and rush to just get something that looks reasonable enough. This is a bad idea since an icon is an extremely important part of the overall marketing presence of an app, and some people have even claimed changing only a game’s icon resulted in a major change in the download rate. Another example of this is creating a tutorial, as well as general visual polish.

For my next project, I’m going to try to get myself to think more long-term, and not jump into the “get it done” stage until the product is nearly ready to be released with high all-around high quality. It may be appropriate to rush to the finish line if there is a hard release date you are aiming for, for example to coincide with the release with a new OS version. But in cases where no such deadline exists, there isn’t much value in pushing things.

I am not sure if it is an appropriate comparison, but this reminds me of when I used to train in running to shave time off my mile. I measured how long it took for each 1/10th of a mile, and I found I got the best result when I had a good balance between these times. As opposed to having one or two areas where I sprinted and exhausted all my energy, a consistent good speed gave the best result. I feel that app development is similar, in that a consistent push through all areas is the best way to get a well-rounded product.

If I feel like I am too busy to make proper progress on a hobby project, rather than rushing it to release I’m going to try to just take a break. Odds are that I can just continue where I left off, whether it is a week or a month later.

The exception to this discussion is if you are working on your first mobile app or game. In that case I think it’s OK to just get something on the store, since you’ll gain valuable knowledge going through the entire process for the first time. For your second project, you can slow down and properly plan things out using your newfound knowledge. If you are worried about a low-quality app giving you a bad reputation, you can always pull it off the store at any time.

An argument for longer app store approval wait times

If you aren’t already familiar with the process of submitting to the Apple iOS App Store, lately you have to wait an average of 11 days until your app is approved. That assumes things go well, however, and if they don’t you could end up getting rejected, resubmitting (or appealing) and spending a month or more until your app actually gets listed, if ever.

The first time I found about this I was pretty annoyed, and I imagine that many of you felt the same. This can be ever more frustrating if you know that the Android store typically takes a day (at most) for the entire process, or so I’ve heard.

After going through this process a few times, I’ve finally come to the conclusion this large wait time actually benefits both the developer and the app store, for several reasons.

First and foremost, I feel that developers who know in advance they’ll have to wait for over a week will typically strive for higher quality than with a quick review process. I’ve seen this in my (very subjective) assessment of iOS vs Android apps. Specifically, developers are more likely to test their app more thoroughly because they know any bugs they find later, no matter how small, will take quite some time to get in the hands of their customers (though I’ve heard in rare cases Apple will make exceptions to fast-track critical issues). Also, since the iOS App Store has an image of being ‘strict’ in terms of what it permits, this will make developers think twice about much of their code, and as a result use APIs more properly. [I’ll leave the matter of whether the Apple app store is actually ‘strict’ for another article]

Another way to look at it is the professionalism, and sense of really releasing a product that this long delay gives to the developer(s) involved. There’s a feeling of satisfaction that you did something significant, and maybe even had a bit of luck on your side.

Although devs have the option to keep working on their app or game while waiting for app store approval, I generally don’t recommend this. The reason is that if you get rejected, you’ll probably want to submit the same exact version you submitted previously, with one or two surgical fixes, as opposed to a version with a bunch of new things that might fail the approval process in a different way, complicating things. If you are using source control this shouldn’t be hard in theory, but merging your changes can still be an annoyance.

I find this week or two period of respite really good for my mental state – it allows me to take a break from all of the focused development I’ve been doing and clear my head. This is a good time to put on your marketing hat and begin final planning of where, how, and when you will advertise your app or game once it is released. Hopefully you submitted it with the option to wait for manual release to the store after the approval process is complete, since this allows you some freedom for when you release. This is important if you are aiming to release on a certain day of the week, for example.

Other options for this break time are to begin planning what your next set of features will be, or even what your next app or game will be if you are ready to make that jump.

With all the money Apple has, it shouldn’t be too difficult to hire a bunch more people and keep the approval process to a maximum of a day or two. But I believe  they are purposefully keeping it roughly a week (with some variation) because of these benefits.

The only real disadvantage I can see to the long app store approval (besides frustration and uncertainty) is that if you working with a customer you might have to wait longer until you get paid. For one-off projects this can be troublesome, but anyone trying to make a business dealing with apps should consider pipelining several jobs at once, so that while they are waiting for approval for one job they can be progressing on another.

On a final note, I have heard many reports of Apple being inconsistent or illogical with some of the reasons they deny apps from the store. I think some of this is because consistently training everyone is difficult, but also for budgetary reasons because being extremely strict for all apps would take even more time. I see some parallel to the IRS’s audit process, whereby a few people get a stricter review and as a result the average level of adherence to the rules increases.

Three tips to be an effective hobby game developer

Being a hobby game developer is fundamentally difficult, since you have to divide up limited time between the rest of your life and game development, which is inherently a time-consuming activity. In this post I’ll discuss three ways to help maximize your time to be effective as a hobbyist game developer.

Use idle time wisely

In almost everyone’s life there are moments where we don’t have an opportunity to do proper game development, and yet our brain is free to think. These include when you are in the bathroom, shower, commuting, or putting a child to sleep.

During such times, assuming I have some mental energy left, I try to think about a game I am working on, either planning what I will code next or sifting through ideas that might improve the game. By doing such pre-planning, when I actually do have a few minutes of free time I can start working almost immediately.

Pipeline projects

When working on any project, there are usually times when you have to wait before you can proceed. For example, you might be waiting for app store approval, or feedback from a tester.

To make effective use of such times, it’s good to have a second or third project to fall back to so you can avoid wasting time. In an extreme case, you could be thinking about how to market a game that is already released, waiting on a second game to be approved for an app store, and planning what time of game you’ll develop next.

Say bye to TV

This time is really a good one for life in general, but it is especially true for hobby game developers that are time-limited. TV is really addicting and can be load of fun, but generally it is not a great way to learn new things or even exercise the brain (this is true even if you are watching a story with a complex plot). To avoid watching too much TV I don’t subscribe cable at home. Even though movies may seem more intellectual, I feel the are equally wasteful. The only good exception I can think of is if you are studying dialogue, camera angles, or editing techniques to apply to a game you are working on.

Strictly speaking, I could include other hobbies like reading, but at least those things exercise the brain better and it’s good to take a break from game development once in a while.

I’ve seen a recent study that says the average person the US spends almost 3 hours watching TV. Just imagine how much more could be learned, and created, if  even a fraction of that time was used for something more productive.

Hobby game developer vs career game developer

At the present time, I am doing game development purely as a hobby, meaning I work on it in my spare time and don’t earn any profit from it. And yet, some time in the future (could be several years from now, or longer), I think about what it would be like to be a career game developer, meaning that I make my living developing games.

While the fact of whether one gets his or her primary income from game development is black or white, I feel that it is possible to have a grey area where your are designing as a hobbist, but thinking like a career dev. To that end, I’ll try and illustrate the differences between these two mindsets in a little more detail.

Hobby game developer

Because there is little to no income involved, a hobby game developer has total freedom over what and how it is developed. This means that you can jump from project to project at any time. What tends to happen, at least in my own experience, is that most games that are produced are something similar to one played before and enjoyed.

For example, since I enjoy Starcraft I’ve made several games which bear at least a minor resemblance to it, and I’ve seen many other hobbists that have done the same.

Put another way, “I enjoy this type of game” plus “I enjoy programming” translates to “I enjoy programming this type of game”. Even if the game pales in comparison to the original, some of the happy memories from that will be revisited when playing the “homemade” version. This can be seen to be a bit like cover songs, since listening to them reminds one of the original version. If others feel the same nostalgia about the game, it can contribute to it’s success in the market.

A hobbyist developer doesn’t really have any deadlines or obligations, so generally there is less motivation to finish a project. As a result, many projects end  in a half-complete state when other more interesting things come up.

Depending on the person’s interests, he or she may learn new technologies just because they seem powerful or interesting, or for the purpose of buffing up their resume. There may be no connection to the quality of the resultant game produced using said technologies.

Career game developer

Because the career game developer makes a living from their job, possibly supporting a spouse and children, he or she generally has a much more serious attitude to things.

The attitude of the developer can change significantly depending whether the developer is self-employed or not. The focus of this article is mostly on the self-employed case, but I’ll talk about the company-employed one as well.

Company-employed (not self-employed)

A developer in this position typically has to follow the organizational structure and rules of the company who they are employed by.

For lower level positions, the employee’s main focus is just following orders from their direct boss. Quality may or may not be stressed, depending on the environment. Getting along with one’s boss, both socially and politically, can be important factors to promotions and other perks.

A key element here is that the developer’s salary, bonuses, and other benefits may not be tied to the game’s success in the market, apart from the fact that a failing game makes them a target for restructuring.

For higher level positions, there is typically more freedom as well as more responsibility to create a quality end product. The higher up, the more likely to profit from a successful game.

Self-employed

This category includes those developing and selling games by themselves, or part of a small team. The compensation of the developer in question is very strongly related to the game’s sales, so there is a very high level of importance put on making a “successful” game.

The key here is that as long as the game sells, the fact of whether it is “fun” to play by the developer(s) creating it isn’t relevant. In fact, you could end up working on a game that you would never play yourself, because market research has shown that it is likely to profit. Of course, it is ideal for developers to align the game they are producing with their own interests, but that isn’t always possible.

For the self-employed developer, abandoning a project midway through is a major sacrifice, because there was no direct profit achieved from those “wasted” hours. However, if there was some new market research indicating this game will no longer sell, it may make sense to cut losses. This is one reason the longer a game takes, the more risk there is to cancel it or redesign major parts of it. The upside is that the skills learnt, including knowledge of frameworks, programming languages, and OSes, may be a consolation since they can be leveraged for future projects.

Because of these things, there is more times that a career game developer has to put up with some tedious or unpleasant task – whether that is writing tricky code or trying to fix a tough bug. Even though it would be OK for the hobbyist to just give up at times like these, this is not acceptable for a career dev.

In exchange for these (hopefully) short-term struggles and compromises, the career developer has the chance of both increased rewards, as well as the satisfaction that their game did well in the market. Whether you coded a certain routine right or made a nice graphical asset is less important than the overall sales of the game.

===

Even if it’s only gradual baby steps, I’m going to try to gradually make this shift of mindset in the hopes of making the jump someday.

Let me know your thoughts on this stuff, especially if you are  acareer developer. Is there anything important I forgot?

Mobile gaming and the importance of marketing

If you have spent countless hours trying to market your game and already understand the value of marketing and advertising, then this post isn’t for you.

However, if you tend to focus on content creation, leaving advertising as a mere afterthought, then you might want to keep reading.

I consider myself a fairly logical-minded person and until recently I held the mistaken idea that popularity and sales is primarily based on a product’s content – things like features, materials, quality, etc. If I devote a few years of my life to making the ultimate game, upon release that game should perform wonderful, since after all it’s a great game that deserves to be downloaded, right?

Not quite.

As I think more about products are made, marketed, and sold, I’ve realized that the content itself is only one of the factors that contributes to a product’s success. The more competitors out there, and the bigger the potential audience, the more a product must be advertised to have a chance to make it big.

Part of me screams out “but this just isn’t fair!”, but I have to accept this is reality. It’s been known for some time that human consumers are not robots, they aren’t always “logical” and don’t always but the “right” products. Instead, they are influenced by so many things, including the “image” of the product (hence celebrities are commonly used to buff up a product’s image) and what their friends and family think. Product naming, packaging, positioning – there are so many factors outside “what’s in the box” that influence whether we buy something.

Of course, there is no guarantee that marketing dollars will reflect to sales, which is why all all businesses that create and sell products have a certain degree of risk. You can think of it as an investment: If I invest X dollars on advertising a game that costed Y dollars to develop, what are my chances of making my money back? What are my chances of making significantly more than I invested? Without a doubt, a great game with a large marketing budget (assuming a competent and creative team of marketers) will have the best chances to profit.

Looking at popular products out there, I’m sure you can find cases where the top product isn’t always the best, but it may be a so-so product with a great marketing budget.

If you create an awesome game that is super addictive, there might be some chance it will go “viral” and spread to a global audience without aggressive advertising. But I think everyone agrees that your chances are always better with some type of marketing push, since without that your game will easily get lost in the sea of forgotten games that never got past a few hundred downloads.

If you work for a medium to large sized game company, part of your company is surely dedicated to marketing and advertising, but if you are a small team on a small budget, the importance of marketing makes your odds of success even worse. Apart from trying to find a person to advertise your game for free or cheap, you can try to become a marketing expert yourself, spending half (or more!) time just on this aspect. But this puts those of us who “just like to program” or “just want to make games” in a pretty tough spot.

Personally, I always get sort of a dirty feeling about advertising, because it essentially involves trying to convince or even fool consumers into believing a certain thing or feel a certain way. I’d like to think that straight out lies or deception will come back to haunt a product eventually (a sort of advertising karma), but I’m not sure if the world actually works that way. In any case, all I can do is try to keep my own marketing efforts from annoying people too much.

For example, it’s fairly common to use a blog to help get the word out about a game, app, or website, and this is clearly a form of advertising. I’ll admit that this is one of the purposes of this blog, which was originally created to be a support page for this game. But I don’t randomly spam people, telling them to check out my game. I feel that the practice of spamming – forcing your product down someone’s throat who probably doesn’t care – is one of the lowest forms of marketing on the Internet. Instead, I’ll read blogs about mobile gaming and other topics that interest me, and if I happen to appreciate an article I’ll give it a like, or even a comment. Some of those people happen to read my blog, and may even become interested in a mobile app I’ve written. This a kind, passive way to market a game without pissing people off.

With posting on forums to advertise a game, you can do things politely and only post in the appropriate areas in related forums at a reasonable frequency, or post all over the place any end up pissing off more people than not. The funny thing about spamming is that even with a low rate of acceptance (say 5-10%), the overall effect is still positive, whether it’s more people downloading an app, viewing an add, or purchasing some product.

Advertising a game is not just about where you try to push your message, but what your message is. Is it a single screenshot or a short movie showing off the cool graphics? Is there a list of features to just a short quip talking about the concept of the game? Or do you position it as “similar to so-and-so (popular) game”? You can write about your game on 100 websites, but if nobody finds the posts interesting your time will have been spent in vain.

I’ve used the terms marketing and advertising somewhat interchangeably in this post, but advertising is only one part of marketing. An important step that must be done before advertising is understanding the existing market (rivals, and what sets them apart) and identifying the demographic group(s) you want to advertise to. The better you can zoom in on to your target consumers, the more you can fine tune your advertising campaign. Trying to please everyone is a sure way to fail, since a 13 old girl with expendable income and a 60 year old man living off savings will have completely different buying patterns. When watching or listening to a commercial, it’s a fun exercise to try and guess what the target demographic is for that product.

Watching the initial presentations of Apple’s yearly developer convention (WWDC) yesterday, I was again reminded of the power of marketing and what a massive advertising budget can achieve. Generally there seems to be great polarization between Apple fanboys and haters, but I think it’s hard to disagree about the power of the marketing videos they have been able to consistently produce. Whether it’s about Apple trying to connect their products to the amazing legacy and history of music, or a group’s heartwarming attempt to help deaf children experience music for the first time using an iPad (Project Ludwig), their advertisements give us all something to think about.

[Credit: Featured image from Gratisography]