tl;dr

If you want to cut to the chase, you can just read my conclusions, then share your own results.

Introduction

Over the years, I’ve repeatedly heard people say that localizing an iOS app is important for maximizing the app’s audience and ultimately the app developer’s revenue. Apple urges developers to localize their apps every year at WWDC, and similar sentiments are often shared in conversations among developers whenever they get together. As the theory goes, people like to interact with their iOS devices in their native language, and they are therefore more likely to purchase an app if it’s available in the their native tongue. That’s all almost certainly true, but the key thing that no one ever talks about is the numbers. Does localizing an app really result in more sales? If so, how big of a difference does it make? In which countries is localization the most critical? How long will it take for the investment in localization to pay for itself? These are all questions that can’t be answered without some hard data to work with. Unfortunately, that data is hard to find.

Data on the sales impact of localization is hard to find, I think, because developers are reluctant to share too much financial information with the world. And rightfully so. But I realized after my own recent experience localizing an app, that the information that’s most valuable to other developers doesn’t have to be quantified in dollars and cents.

What follows below is an analysis of the sales data I collected after localizing one of my apps. This analysis is an attempt to collect and share data that I think will be valuable to other developers, but it’s also an attempt to model a process that generates useful data without revealing too much information about revenue. My hope is that the data will be useful to others, and that other developers will use a similar method to share their own experiences with localization. By sharing solid numbers, it gives all developers the opportunity to make decisions that are based on facts instead of guesses.

Background

In this study, I’ll be looking at just one of my apps, Benjamin for iPhone (hereafter, just Benjamin). Benjamin is a niche productivity app which sells for the relatively high price of $9.99. As a result of its small audience and high price, there are rather few daily sales – especially outside the United States. Benjamin has been available in the App Store for about a year and a half, and until very recently it was available only in English. As a part of a major update (version 2.0, released June (25° 20°)13), I decided that I should move beyond my English-only strategy and localize the app for other language markets.

To understand the language choices I made in localizing Benjamin, you first need to understand a little about the app and its audience. Benjamin is a task manager based on the FranklinCovey method of time-management. FranklinCovey is one of the world’s largest providers of time-management training, drawing their clients primarily from white collar workers in fields like healthcare, education, and other corporate environments. According to their own reports1, FranklinCovey does business with 90% of the Fortune 100 and 75% of the Fortune 500. Their bread and butter are multinational corporations. As a result, their training is conducted around the globe and in many different languages. The multinational character of FranklinCovey’s operation was an important consideration in my decision to localize Benjamin. FranklinCovey conducts training around the globe, so it’s reasonable to expect that Benjamin has potential customers around the globe as well.

With this in mind, I decided to localize Benjamin into five additional languages: Spanish, German, French, Japanese, and Simplified Chinese (which is used in the People’s Republic of China, but not in Taiwan and other Chinese speaking countries). These languages were chosen because the countries in which they are primarily used have all widely adopted the iPhone and iPad, and they all have a large base of people trained in FranklinCovey time-management – with the notable exception of Simplified Chinese. FranklinCovey has only had a presence in China since 19982, but it’s a booming market with enormous growth potential. I decided to include Simplified Chinese primarily as a prospect, so that my app would be ready as the Chinese market grows and matures.

Assumptions

As much as I wish it were not the case, I don’t have perfect information about my customers. I don’t know where they come from, how they found my app, or even which languages they speak. Consequently, there were a number of assumptions that had to be made in performing this analysis. I list the major ones below so that you can decide for yourself if they are valid.

Geography and Language

Apple doesn’t provide any information about the language used by those who download apps from the App Store, but it is possible to determine from which country’s store a customer purchases an app. Unfortunately, geography is not a perfect analog for language. One only has to look at the growth of the Spanish speaking population in the United States to know that’s true. And don’t even get me started on linguistically confused countries like Belgium and Switzerland! But despite it’s imperfect nature, some general assumptions can be made regarding geography and language. In this study, I count the United States, the United Kingdom, Canada (my apologies to the Québécois), Australia, New Zealand, India, and Ireland in the English language group. I count Spain, Mexico, and all of Central and South America (with the exception of Brazil) in the Spanish language group. France is counted as the sole member of the French language group, Germany is counted as the sole member of the German language group, Japan is counted as the sole member of the Japanese language group, and the People’s Republic of China is counted as the sole member of the Simplified Chinese language group.

Promotion

I did my best to garner attention for the Benjamin 2.0 update, which hopefully affected sales positively. Although my efforts were global (since they were on the Internet), all my promotional materials and press were in English. My assumption, then, is that if different language groups have benefitted unequally from my promotional efforts, then English language sales have benefitted most from that inequality.

Companion App

A new app, Benjamin for iPad, was launched at the same time that version 2.0 of Benjamin for iPhone was released. Benjamin for iPad was a long-requested product from my established user base, and has been well-received in the App Store. It’s reasonable to think that the availability of an iPad version has contributed to the sales of the iPhone version, especially since they sync with each other and are designed to be companion apps. But since Benjamin for iPad is localized into the same languages as Benjamin for iPhone, my assumption is that any effect that Benjamin for iPad has had on the sales of Benjamin for iPhone have been felt by all language groups equally.

Methodology

The easiest way to measure changes in the rate at which an app sells is by comparing its average daily sales over two different time periods. An app’s average daily sales (ADS) is the total sales of an app during a time period divided by the number of days in that time period. For example, if an app has 5 sales on Monday, 2 sales on Tuesday, 7 sales on Wednesday, and 3 sales on Thursday, then its ADS is 4.25 over those four days. A naive comparison of sales growth due to localization could then be made by comparing Benjamin’s ADS from before localization to its ADS after localization for each language group.

The problem with a naive analysis such as this is that it fails to take into account the natural growth of the app’s audience. Looking at the change in ADS for any language group in isolation, it’s impossible to say whether sales growth was caused by localization, or if it was caused by other outside factors. For example, if the ADS of the Spanish language group increased after localization, can the increase be attributed to localization? Or is it attributable to my promotional efforts? Or to the presence of a companion iPad app that makes the iPhone app more attractive to customers? To isolate any growth that was caused by localization, the growth in each language group must be compared to a baseline. In this case, the baseline I’ll use is the English language group, since that’s the language in which Benjamin was originally available.

In this study, two time periods were established. The pre-localization time period was Feb (25° 20°)13 to June (25° 20°)13, a span of 136 days. The post-localization time period was June (25° 20°)13 to October (25° 20°)13, a span of 97 days. These time periods were chosen because they are ordinary and uninteresting. There’s no particular promotional push that happened during those time periods, and there are no seasonal effects that should have influenced sales. They are representative of typical days in the App Store. Worth mentioning is that the post-localization period begins the day after the last effects of my release promotion efforts can be seen in sales reports.

Sales statistics for Benjamin were collected for both time periods, and broken down by language group. From these statistics, each language group’s ADS was calculated for both time periods, and growth between time periods was calculated for each language group. The difference between each language group’s ADS growth and the baseline (English language group) ADS growth can then be attributed to the effect of localizing the app for that language group.

Results

The pre- to post-localization change in each language group’s average daily sales (ADS) is summarized in the table below. The Change in ADS field represents the percent growth in each language group’s sales when comparing the post-localization ADS to the pre-localization ADS. For example, if a language group had a pre-localization ADS of 10, and a post-localization ADS of 15, then its Change in ADS would be 50%.

Language Group Change in ADS
Chinese (Simplified) 40%
English 11%
French 1,165%
German N/A
Japanese 180%
Spanish 89%

From the table above, you can see that our baseline (the English language group) experienced 11% growth in its ADS after becoming localized. If we assume that this 11% can be accounted for by the effects of marketing, the presence of a companion iPad app, and other effects that are common to all language groups, then we can subtract that 11% baseline from the other language groups’ growth to calculate how much of their growth is attributable to localization. This growth attributable to localization is summarized in the table below.

Language Group Change in ADS Due to Localization
Chinese (Simplified) 29%
French 1,154%
German N/A
Japanese 170%
Spanish 78%

Note: The German language group has its results above listed as not available because of a division by zero error. In the pre-localization time period, there were no sales of Benjamin in Germany. In the post-localization time period, there were 5 sales.

Conclusions

From the results above, it’s clear that localization had a marked influence in increasing Benjamin’s sales in the regions for which it was localized. The Spanish language group in particular shows a growth in sales which I have high confidence can be attributed to the effect of localization.

It should be pointed out that that the number of sales in the German, French, Japanese, and Chinese (Simplified) language groups during the pre-localization time period are very low (in the single digits). Consequently, too much confidence should not be placed in the results for those groups. It took such a small change in sales to wildly influence the results in these language groups that it’s difficult to separate the signal from the noise. My gut (and my insight into the raw numbers) tells me that the there was a genuine improvement in sales that can be attributed to localization in the French and German language groups, though the magnitude of the improvement is unclear. The results for the Japanese and Simplified Chinese language groups, on the other hand, should be disregarded as pure noise, I believe. Sales in these groups were so low that I don’t think any valuable conclusions can be drawn.

So was localization worth the cost in time and money? I would say that it was. The Spanish localization has already more than paid for itself, and the German and French localizations are well on their way to doing the same. There’s an argument to be made that the Japanese and Simplified Chinese localizations were a waste, but my hope is that Japan in particular will become a region of future growth.

Now It’s Your Turn

I know that this was a long journey to take in order to arrive at the somewhat obvious conclusion that “localization improves sales.” The point wasn’t to just show that localization improves sales, though. The point was to demonstrate a way to measure the effect of localization on sales that results in meaningful data that can be shared with others. The method employed above allows developers to calculate and share the effect that localization has on their bottom line, without revealing exactly what that bottom line is. My hope is that other developers will use a similar methodology to publish the results of their own experiments with localization so that our community of developers can accumulate the information needed to evaluate in advance whether localizing for a particular language is a valuable use of our limited time and budget.

If you undertake a similar study of the effect that localization had on your app sales, please publish your results and contact me so that I can link to them.

Note: A version of this article appeared in Issue 12 (Oct (25° 20°)13) of The Loop Magazine under the title “Localizing Your App.” The version above includes updated sales statistics that weren’t available at the time it was first published in The Loop Magazine.


  1. FranklinCovey Investor Relations 

  2. FranklinCovey China 

Posted on November 11, 2013

Read More


There’s been a lot of talk recently about pricing apps on the App Store. Marco Arment thinks that mass market paid apps are dead. Joe Cieplinski, my co-host on Release Notes, thinks there’s still plenty of room for paid apps in the right markets. And Matt Gemmell thinks you should raise your price by a dollar, and then measure the effect it has. With all of this seemingly conflicting advice, what’s an app developer to do? We all want our apps to earn as much as possible, but what price point will achieve that goal? Two dollars? Five dollars? Ninety-nine cents? The fact is, most of us just guess. We pick a price that we think people will pay and we go with it. But what if there was another way? A way to make a reasonable estimate of the price point that would maximize the revenue for an app? A way that didn’t rely on gut feelings and best hopes, but rather economics and mathematics? Well, my friends, if we had that, we’d really be taking control of our software business.

Price vs. Revenue curveWhy would a business owner want to be careful with the price he sets for his goods? Because price influences revenue, and revenue’s what we all want. It’s all the money that comes in the door. Ideally, in large quantities. Unfortunately, the relationship between price and revenue isn’t linear, as is apparent to anyone who thinks about it for more than a minute. If it were, we’d all just charge $1000 per download and be App Store millionaires. Instead, as shown in the figure to the right, revenue starts to increase as we increase our price from free, but then we reach a point where revenue begins to decrease as we scare off potential customers with our higher prices. Our job as business owners, then, is to find the price at which revenue peaks so that we can earn the most from our investment in time and energy.

Finding that peak is the tricky bit, of course. Most developers aren’t trained in economics, and there’s not a lot of App Store-specific information available on the internet to guide us. One notable exception is a series of articles written by Michael Jurewitz, who is trained in economics. Jurewitz’s series on app pricing and the economics of the App Store (parts 1 2 3 4 5) has a lot of great information, and should be considered required reading for anyone who hopes to make a living in the App Store. My goal today, is to add to this existing work and describe a way that developers can calculate the price that optimizes revenue, rather than relying on experimentation. The calculation won’t be exact, but it should allow developers and business owners to find a price that’s close to optimum relatively quickly, and without having to rely on guesses.

Above, I wrote that a product’s revenue increases as its price increases up to a point, then revenue begins to decrease. Economists tell us that when you plot all of these price vs. revenue points, the resulting shape is a parabola.1 This is a key insight, because we know a lot about parabolas. For instance, every parabola has a quadratic function that describes it, of the form:

y = ax2 + bx + c

We also know, using our knowledge of algebra, that the peak (or vertex) of a parabola can be found where:

x = -b / (2a)

In our particular case, the independent variable is price (P), and the dependent variable is revenue (R), so if we replace x with P, and y with R, our equations become:

R = aP2 + bP + c
P = -b / (2a)

So how is this useful? Well, if you know the equation of the parabola that fits your app’s price vs. revenue curve, you can use algebra to predict what price should result in the most revenue. There’s only one problem: You probably don’t know the equation of your particular parabola. Luckily, the equation can be found with just a little bit of price experimentation.

It turns out that you only need three points (P,R) to find the equation of a parabola, and you probably already have two of them. You know that if you give your app away for free, you’ll have zero revenue from sales. So you know that your parabola goes through the point (0,0). You also should be able to find your app’s average daily revenue at its current price by looking at your App Store statistics, or by using a product like AppViz or App Annie. That gives you another point. So all you have to do is alter your price once, allow revenue to come to a steady state over a month or so, and then find a third point.

At this point, an example is probably called for. Let’s imagine that Alice develops an app called “Homecalc,” which is a calculator app meant specifically for real estate agents. Homecalc provides value to its customers by making many calculations that are common to the real estate market easy and convenient. Alice has charged $7.99 for Homecalc since its launch and she sees from her App Store reports that it makes an average of $181.45 per day. A very profitable app, indeed. Good for her! But can she do better?

Homecalc Data PointsTo find out, Alice needs the equation of that parabola. She knows from her App Store reports that the parabola goes through the point (7.99,181.45). She also knows that the parabola goes through the point (0,0). But she needs one more data point. To get that last point, Alice decides to raise Homecalc’s price to $9.99 and see what happens. After waiting a month or two, Alice looks at her reports and finds that Homecalc averaged $207.89 per day in revenue after the price increase. That means that the parabola must also go through the point (9.99,207.89). That’s three points. Let’s find Alice’s equation.

I wrote earlier that the equation of an app’s price vs. revenue curve takes the form of:

R = aP2 + bP + c

Knowing that, Alice can take the three points that she found and plug them into the equation above. In this case, Alice has the points (0,0), (7.99,181.45), and (9.99,207.89). Plugging those values into our equation for the price vs. revenue curve, Alice gets three more equations:

0 = a(0)2 + b(0) + c
181.45 = a(7.99)2 + b(7.99) + c
207.89 = a(9.99)2 + b(9.99) + c

which, when simplified, result in the equations:

0a + 0b + c = (0° 63.8401°)a + 7.99b + c = 181.45
99.80001a + 9.99b + c = 207.89

You will no doubt recognize that what Alice has created is a system of three equations in three variables. This system can be solved in any number of ways, but the easiest way is probably to allow technology to do the work. Using an online system of equations solver Alice found that the solution to this system (rounded to two decimal places) is:

a = -0.95
b = 30.30
c = 0

When Alice plugs those values into our equation for the price vs. revenue curve:

R = aP2 + bP + c

she gets:

R = -0.95P2 + 30.30P + 0

which describes the price vs. revenue parabola that is unique to Homecalc!

Homecalc Price vs. Revenue CurveAlice graphed Homecalc’s price vs. revenue equation to get a better feel for where she should set her price next. Looking at the graph (shown to the right), it’s clear that Alice still has room to raise the price of Homecalc and increase its daily revenue. In fact, it looks from the graph that the optimum price for Homecalc is between $15 and $16. It also appears that by raising her price to that range, she can make another $7 dollars per day. Of course, these numbers have been arrived at just by examining the graph. But if Alice wanted to actually calculate the optimum price for Homecalc, she could do that too.

To calculate the optimum price for Homecalc, Alice needs the values of a, b, and c that she calculated:

a = -0.95
b = 30.30
c = 0

and the equation for optimum price that we established earlier:

P = -b / (2a)

Plugging a, and b into our equation, we find that

P = -30.30 / [2 * (-0.95)]

or, simplified,

P = 15.95

With this knowledge, it appears that Alice would be wise to set Homecalc’s price to $15.99. If she does, our calculations show that she can expect an average daily revenue of $241.60 per day. Compared to where she started, that’s an increase in revenue of about $60 per day or almost $22,000 per year! Will everyone see results like this? No way. These numbers were chosen, for the sake of illustration, to exaggerate the shape of the parabola. But I bet that most will see some improvement.

A few warnings are in order before you try this on your own. First, you’ve got to use data that is unique to your app. You can’t just use your friend’s equation, or even the equation of one of your other apps. Each app is different and has different market forces affecting it. How the market reacts to pricing changes varies based on the usefulness of your app, the necessity of your app, your customers’ price sensitivity, the quality of your brand, and a host of other factors. Second, don’t take the optimum price point predicted by your calculations as gospel. Few things in life behave exactly according to theory, and the App Store is no different. In particular, this method assumes that the demand curve for your app is linear. In fact, it probably isn’t perfectly linear2, but having a method like this to use as a starting place for setting your price is a far sight better than pulling a number out of thin air. Nonetheless, it’s probably safest to regard the optimum price that you calculate as merely a starting point that will need to be refined based on experimentation.

The App Store has been great for independent software developers. It’s given us a completely new market, and simplified things like billing and distribution, which used to be real chores. But it’s also complicated our job. In many respects, the App Store is a black box and we don’t have access to a lot of the information that we’d like. We only get sales statistics once a day, and it’s really hard to do things like A/B test different price points. In an information poor environment such as this, choosing the right price for your app is harder than ever. I hope that the method I’ve described helps take some of the mystery out of the pricing process, and I hope you make more money as a result.


  1. This assumes a linear demand curve, but more on that later. 

  2. Florian Kugler points out that not only is our demand curve probably not linear, but that it’s impossible to say with certainty exactly what shape it is. We should therefore take any calculations based on the demand curve (such as this one) with a grain of salt. 

Posted on October 4, 2013

Read More


What if we lived in a world without the iPhone, where we didn’t have the Internet in our pockets and the world at our fingertips? What if we couldn’t instantly check the Web to settle a bar bet, or get driving directions to our destination after we had already left home? What if we didn’t have the instant access to information that we all now take for granted? For millions of people with disabilities, these aren’t just hypothetical questions. It’s their reality. Many of the apps that most of us take for granted simply can’t be used by those with disabilities like vision and motor impairments. And as a result, they’ve been shut out of many of the conveniences of mobile information that we take for granted.

Now, don’t get me wrong. The iPhone is a wonderful device and Apple has done amazing things to make mobile software accessible to those with disabilities. Apple’s VoiceOver technology, especially, has made it incredibly easy to build apps that can be used by the blind and vision impaired. But a lot of iOS developers don’t realize that they have to do their part as well. There are lots of decisions that need to be made in the process of designing an app, and the cumulative effect of all those decisions can make a profound difference on whether those with disabilities can make effective use of an app or not. But if making an app accessible requires effort on the part of developers and designers, the natural question to ask is, “Why bother?” After all, accessibility is a feature, and features take time – time to plan, time to implement, and time to test. Why should those who build apps take the time needed to make sure that their software is as accessible as possible?

I would hope that developers and designers would implement accessibility in their apps simply out of altruism. More so than most, those who create mobile software should recognize the power of the ubiquitous information and communication that their apps make possible. This is not just a matter of whether or not someone can play the hottest new game. Accessible apps make it possible for those with disabilities to make efficient use of public transportation and to more easily find jobs. Accessible apps make it easier for those with disabilities to access news and government records so they can remain active and engaged citizens. Accessible apps empower those with disabilities to remain self-sufficient and independent. Through their work, app creators have the opportunity to improve the lives of millions, and it would be a shame if they failed to take advantage of that opportunity.

But even app creators who aren’t motivated by altruism should be motivated by simple self-interest. Chances are that the authors of today’s apps will someday need accessible software themselves. It’s just a fact of life. The older we are, the more likely we are to experience vision loss, become hard of hearing, have motor disabilities, and suffer cognitive decline. According to U.S. Census Bureau statistics1, people who are at least 80 years old have a 70% chance of experiencing a disability of some kind. To be blunt, as we age, we either become disabled or we die.

Today’s app developers and designers need to ask themselves what they want the world that they grow old in to look like. Do they want a future where they can continue to use apps and online conveniences to improve their daily life? Or do they want to live in a future where their aging eyes and dimming sight keep them from enjoying life to the fullest? If today’s developers prefer the former future to the latter, if they want a future where they can continue to use their smartphones into their old age, they had better get busy building that future today. By making their own apps accessible, and by helping to build a culture among developers and designers in which accessibility is treated as a first-class, non-negotiable feature, today’s app creators can help ensure that they will never be locked out of the technology that they now take for granted.

Apple recently previewed iOS 7, which introduces a look that is radically different from earlier versions. As a result, a lot of developers and designers are going to be completely rethinking and overhauling the user interfaces of their iPhone and iPad apps in the next few months. I suggest that this is an opportunity. It’s an opportunity to think about accessibility. It’s an opportunity to implement VoiceOver. It’s an opportunity to help build a future where everyone can take advantage of the easy access to information that mobile software provides. It’s an opportunity to do the right thing, and it’s an opportunity that I hope all iOS developers and designers will take advantage of.

Note: A version of this article appeared in Issue 5 (July (Boyavele, Nord-Ubangi, DR Congo)13) of The Loop Magazine under the title “Designing Apps for Everyone.”


  1. Americans With Disabilities: 2010. U.S. Census Bureau. July, 2012. 

Posted on August 8, 2013

Read More


At WWDC this year, one topic of conversation that came up over and over was how to design for iOS 7. Like a lot of indies, I usually do much of the interaction design of my apps myself and use a proper designer only for the graphical design. This was feasible for me in the past not because I’m particularly gifted at interaction design, but because I always had plenty of examples to draw inspiration from. Apple’s built-in apps were, of course, the archetype for how an iOS app should behave, but lots of third-party apps also gave great examples of how to tackle the interaction problems that I encountered in my own apps. Now, of course, I see the weakness of that strategy. It worked great under iOS 6 because of all the third-party examples I could draw upon, but iOS 7 is a reset. Right now, there are exactly zero apps in the App Store that are designed for iOS 7, and that lack of example and inspiration is going to be a problem for me and for a lot of other indies as we prepare for the launch of iOS 7.

My concerns over iOS 7 preparations lingered during WWDC, but once I returned home I realized my mistake. In fact, there is already an app in the App Store from which I can draw inspiration for this new style. An app that adopts the look and feel of iOS 7 by elevating the content over the chrome. An app that uses color and animation in the style of iOS 7 to clarify content. [pullquote align=”right”]”For all intents and purposes, Vesper is the first iOS 7 app in the App Store.”[/pullquote] I realized that, for all intents and purposes, Vesper is the first iOS 7 app in the App Store. Despite being an iOS 6 app, Vesper adopts the major idioms of iOS 7 and serves as a great example of how developers can adopt those same idioms and still retain an individual identity for their app.

You may already be familiar with Vesper. It’s a notetaking app that launched towards the beginning of June 2013, just a few days before WWDC, and got a lot of press coverage in Mac and iOS circles. Vesper was created by Q Branch, which is made up of three people familiar to the iOS developer community: John Gruber, the writer behind Daring Fireball; Brent Simmons, the creator of NetNewsWire and Glassboard; and Dave Wiskus, a respected designer and the co-host of the Unprofessional podcast. It was clear from the beginning that these three created a great app, but it wasn’t until after WWDC that I realized Vesper actually anticpated a lot of what makes iOS 7 different.

Vesper DeferenceOne of the first things you notice when you launch Vesper is how clean the interface is. As you can see in the screenshot to the right, Q Branch used the bare minimum interface needed to support the functions of the app. In his post-mortem on the design of Vesper, Wiskus commented on the influence of the bare visual style of Letterpress:

As it happened, we were all heavily addicted to Letterpress, and we wondered aloud if that visual style might be where the puck was headed. If so, what would that mean for UI in general? The only way to pull it off well … was to strip away everything and add back only the pieces that we needed.

As it turns out they were right on the mark. This style of clean, edge-to-edge design that emphasizes content and deemphasizes the interface was exactly where iOS 7 was headed. As Jony Ive explained in the WWDC keynote address, “In many ways, we’ve tried to create an interface that is unobtrusive and deferential. One where the design recedes, and in doing so actually elevates your content.” And that’s exactly the effect we see in Vesper. Without toolbars, without even separator lines between table view cells, Vesper draws users’ eyes to the content so they can quickly access their information and be on their way. This deference to content is going to be a hallmark of iOS 7 design and will be something for all developers to keep in mind as they plan for the future.

In the end, though, Vesper is an iOS 6 app and there’s only so far that Q Branch could go in removing interface chrome and still have it fit visually within the iOS 6 ecosystem. The current iOS 7 beta goes even further than Q Branch could in removing interface elements, going so far as to use white navigation bars that blend in with backgrounds, and reducing buttons to mere words with no edge. With so few interface elements remaining in iOS 7, how can a developer draw attention to important parts of the display? The answer is color.

Vesper Desaturate VideoThe developing convention in iOS 7 seems to be to colorize interface elements that are tappable or active, and to remove the color from elements that are inactive. Apple uses this convention in iOS 7 by desaturating interface elements that are “covered” by alert views, for instance. Vesper also uses this convention to great effect when the “hamburger” button is used to access the “basement”, as illustrated in the video to the right. As you watch the video, notice how the navigation bar smoothly animates from slate blue to white as it slides to the right. This color change is a subtle, but very effective way to communicate to the user that the navigation bar and its contents are no longer what is important in the interface once it’s slid out of the way.

Speaking of animation, it’s become clear from the WWDC Keynote that animation and movement are more important than ever in iOS 7. With so much of the interface chrome removed, animation has become the new affordance, giving hints to the user as to how different interface elements should be used. Animations in iOS 7 also serve the purpose of deference to content, which was mentioned earlier, by helping to provide continuity during screen transitions. This use of animation is illustrated very well by Vesper’s transition from a list of notes to an individual note.

Vesper Animation VideoAs you watch the video of Vesper’s screen transition to the right, notice that it lacks the usual slide animation that we’ve come to expect when “pushing” content onto a navigation controller. Instead, the thumbnail content smoothly animates to it’s final position and is replaced by the full content. By never pushing the visible content off the screen, and instead animating it into place, the eye is able to track the visible content through its journey, and thereby continuity is established between one screen and the next. This continuity immediately orients the user to the placement and purpose of the screen’s content in a way that a simple slide animation never could. This type of animation is used throughout iOS 7 and I think developers will find that clarifying animations such as this will become expected in apps as the iOS 7 ecosystem matures.

One concern that I repeatedly heard from developers at WWDC dealt with their ability to maintain individual identities for their apps when adopting an iOS 7 look and feel. After all, if most of the interface chrome is removed from apps, how can one app be distinguished from another? How can an app avoid being mistaken for a system app, or worse, a competing app? This problem is exacerbated because of the example Apple has set in the built-in apps shipping with the iOS 7 beta. Perhaps in yet another nod to deference to content, all the navigation bars in these built-in apps are either white or black, with color primarily found only in buttons and other controls. Under these conditions, it’s hard to see how an app based on a navigation controller can establish its own identity.

Vesper shows us a way, though. First it bucks the trend of the built-in iOS 7 apps by using color in the navigation bar. Yes, it’s flat color, but it’s still color. With the navigation bar extended under the status bar, lighter weight fonts, and perhaps a bit of transparency, it’s easy to imagine Vesper’s navigation bar fitting in nicely on iOS 7. The second way that Vesper creates its own personality is through its use of typography. Again in his Vesper post-mortem, Wiskus wrote:

Fonts were probably our single largest expense. We tried many, many faces in Vesper to see what felt right, and striking a balance required a lot of careful consideration.… Eventually we landed on our beloved Ideal Sans. But the story of Vesper’s typography doesn’t end there. We still had to consider weights, colors, placement, cap style, number style, then throw it all away and go back to Helvetica, only to realize what a huge mistake we’d made and beg Ideal Sans for its forgiveness.

The result of Q Branch sweating the details of typography is an app that feels at home on iOS, but that has a subtle style all its own. With the typography improvements in iOS 7 that were alluded to in the WWDC keynote, developers now have the ability to go beyond what Q Branch did with Vesper and create an even more impressive typographic style that’s all their own.

With so much of iOS 7’s new design anticipated by Vesper, it’s natural to wonder how much of this is coincidence. Did Q Branch get tipped off? Or is this just a matter of great minds thinking alike? Who knows. With this group of characters, it could be either or both. Ultimately, though, it doesn’t really matter. What matters is that now we all can see the new direction that iOS is heading. We know that in iOS 7, content is king. We know that in iOS 7, color and animation are more important affordances than ever before. And thanks to Vesper, we now know that it’s possible to combine these traits of iOS 7 to create a unique app that retains an individual identity while at the same time fitting into the rest of the iOS 7 ecosystem. If you’re one of the many now thinking about your own app and its transition to iOS 7, I suggest that you consider what lessons you can take from Vesper. It’s a great app, but I think we’ll soon see that it’s a great iOS 7 app as well.

Posted on June 22, 2013

Read More


I’ve been doing a lot of speaking over the last few months on the topic of accessibility in mobile software.1 The part that I enjoy most about these speaking engagements is the opportunity it gives me to talk to other mobile developers and designers after my presentation is over. In these conversations, I’ve noticed a few recurring themes. Over and over I hear developers lament, “I wish I had the time to do accessibility right!” or, “I know accessibility is important, but it seems too complicated.” To address these problems, I’m happy to announce that we are now offering accessibility consulting through Leaf Hut Software. Specifically, we now offer accessibility reviews and accessibility training for developers, designers, and their teams.

If you have an app and want to ensure that it is as usable as possible by people with disabilities, but lack the time or experience to properly implement accessibility, Leaf Hut Software is happy to help. We can review your app and provide a detailed list of what you’re doing right as well as specific suggestions that would improve the accessibility of your app for those with visual, motor, and other disabilities. For teams that require it, we also offer development services to implement the suggestions that arise through the review process.

If your team lacks experience with designing accessibility into mobile software and wants to learn more, Leaf Hut Software can help with that too. Courses are available to train your team in applying Universal Design to mobile software, and in implementing VoiceOver in iOS apps. Training can be customized to suit your team’s current level of experience, and can be tailored to suit teams of developers, designers, or mixed teams. Don’t let a lack of knowledge be the thing that holds you back from creating world-class apps.

Mobile software has proven to be a liberating and empowering technology that’s opened doors of opportunity for people with disabilities, and I believe strongly that accessible software should be made as available as possible to the people who need it. Let Leaf Hut Software help you put your apps in the hands of everyone who needs them. For more information about our accessibility consulting services, please see our consulting page. To inquire further about our services, you can contact us by email.


  1. For the benefit of non-developers, “accessibility” in the context of software refers to making software as usable as possible for people with disabilities, usually physical disabilities. 

Posted on June 4, 2013

Read More


Since it was first introduced in iOS 3.0, in-app purchase has emerged as an important tool that iOS developers can use to bolster their revenue and stay in the black. In-app purchase only helps, however, when money actually changes hands. To that end, Apple has invested a lot of effort to give developers the tools they need to ensure that the in-app purchase requests they receive are legitimate and not spoofed.

The most important tool that developers can use to ensure the legitimacy of an in-app purchase is the digital receipt that’s received from the App Store when a transaction is completed. This receipt is cryptographically signed and can be verified as genuine by submitting it to a special server that Apple provides. The trick is, this receipt has to be submitted in a particular way. As Apple points out in its documentation, developers should submit in-app purchase receipts from a separate server that they control in order to avoid opening doors for those who would steal their work.

Many developers have gotten sloppy with their receipt checking, though. Despite Apple’s advice, many developers don’t bother to submit receipts for verification from their own server. Instead, they simply send the receipts to Apple’s verification system directly from the iOS device that was used to purchase the product. Developers that take this shortcut are leaving themselves vulnerable to what’s known as a “man in the middle” attack, which can be used to trick the app into delivering in-app purchase products for free. This vulnerability was exploited in a big way in July, 2012, when a hacker set up a server that took advantage of sloppy receipt verification and allowed owners of iOS devices to receive, for free, digital goods that should have required an in-app purchase.

It’s easy to see why developers would take shortcuts. Setting up a separate server for in-app purchases is a pain. Since a receipt verification server would be handling purchases, a developer would want it to have high availability, with very little down time. That means that most common, low cost, shared web hosting providers are ruled out. Many alternatives to shared web hosting providers aren’t very attractive either. Most require either much higher fees, or expertise in tuning and maintaining a server, or both. In addition to these problems, writing the server-side code that interfaces with the iOS app and Apple’s receipt verification server isn’t necessarily easy. The languages and technologies used in server-side scripting are very different than those that are used to write iOS apps, so many developers have an additional learning curve to overcome.

Fortunately, several “backend as a service” (or BAAS) providers have sprung up recently, including companies like StackMob, Parse, and Kinvey. These BAAS providers essentially offer their customers a database that can be accessed over the web, but some of these providers offer additional services as well. For instance, one of StackMob’s selling points is that it allows customers to run their own code on the StackMob servers. This provides an opportunity for app developers to validate their in-app purchase receipts using StackMob as their Apple-recommended “separate server that the developer controls.”

Using StackMob as a receipt verification server offers a developer several benefits compared to other options. StackMob provides a professionally managed enterprise-ready platform. Since StackMob handles all the system administration responsibilities, the developer doesn’t have to worry about scaling, hardware configuration, and other similar headaches. Best of all, StackMob recently changed their pricing structure. Instead of charging per API call as they used to (and as most of their competitors continue to do), they now offer a package of basic functionality for free and then charge extra for add-ons. One of the features of their basic free plan happens to be custom server code. StackMob’s pricing can change at any time, of course, but as of today it appears that the only thing preventing StackMob from becoming a free in-app purchase receipt verification platform for all iOS developers is the lack of the custom server code needed to actually validate the receipts.

And so I offer my StackMobIAPReceiptVerification project, which is now available on GitHub. StackMobIAPReceiptVerification is an in-app purchase receipt verification routine I wrote to run on StackMob’s custom server code platform. Once installed, it accepts in-app purchase receipts, validates them on Apple’s servers, and responds with a success code and the information contained in the receipt (if the receipt is valid). Since the routine has a RESTful interface, it can be called using NSURLConnection (and related methods), or using StackMob’s iOS SDK. For all the details, check out the project’s page on GitHub.

I hope that other iOS developers find this project useful. I know that there are many out there who haven’t bothered to set up receipt verification only because of the nuisance of it all. Hopefully StackMobIAPReceiptVerification will remove some hurdles and make it easier to ensure that you’re being paid for your work.

Posted on November 19, 2012

Read More


The subject of App Store pricing has popped up on my radar a lot recently, and I’m a bit surprised since I thought that debate had been long-since settled. After all, prices quickly dropped after the launch of the iPhone App Store, and it’s been downhill ever since. Today, anything above 99¢ is regarded by many to be a "premium price," as so-called "freemium" pricing is becoming the norm in many categories.

I started hearing again about app pricing when Joe Cieplinski (@jcieplinski) gave his presentation titled "Avoiding the Race to the Bottom" at 360iDev. Then Twitter lit up last week with chatter about Michael Jurewitz’s (@Jury) well-received Çingleton talk in which he reportedly advised developers to double their prices if doing so would cost them less than half their user base. Most recently, <http://tapbots.com>Tapbots released its long-awaited Mac version of Tweetbot at the absolutely scandalous price of $19.99. So what can we take from all this recent discussion?

First, I think there’s a growing awareness on the part of developers of how hard it is to build a business on the back of 99¢ downloads. In his 360iDev presentation, Cieplinski displayed a graph of estimated App Store revenue among all developers. The graph was exponential, but in this case the long tail was really long. Only a small fraction of developers were in "viable business" territory. This is corroborated by a survey conducted last year that found that the median annual revenue for game developers is under three thousand dollars. Cieplinski’s point, and I think it’s a good one, was that you’re unlikely to build a long-term business on 70¢ of revenue per customer (99¢ less Apple’s 30%) without some really attractive in-app purchase or outside venture capital. (And as the joke goes, if you take VC, now you have two problems.) Instead, Cieplinski suggested that developers should charge a higher, more sustainable, price in order to reach their revenue goals over the long-term.

For example, let’s consider an app developer who has a $100,000 annual revenue target. To reach that target with an app priced at 99¢, he would need 142,857 purchases per year, or 391 downloads every single day. For most, getting almost 400 paid downloads day after day is unlikely, to say the least. But if he raises the price to $9.99, he would only needs 39 downloads per day to reach his target. If he raises his price to $14.99, he’d only needs 26. These are much more reasonable numbers for most developers considering the typical advertising budget. But will people pay these prices in the App Store? That brings me to my second point….

Many people made a really big deal out of the $19.99 price point that Tapbots recently chose for the Mac version of their incredibly popular Twitter client, Tweetbot. Some claimed it was way overpriced and labeled it a ripoff or worse. Tapbots’ pricing strategy was quickly proven, though, as Tweetbot for Mac climbed the Top Grossing charts. The success that Tweetbot enjoyed, despite being expensive by App Store standards, demonstrates that a lot of customers will pay more for a quality product than is usually asked. It also suggests a corollary: A lot of developers are leaving a lot of money on the table by undercharging for their software.

When I tweeted a similar sentiment a few days ago, some challenged me claiming that Tweetbot was a special case. They maintained that Tweetbot’s success at a sustainable price was possible only because of Twitter’s policies which introduced an artificial scarcity into the market. While it’s true that Twitter’s user- and developer-hostile policies have caused an artificial scarcity, to dismiss Tweetbot’s success as unique and unrepeatable is to ignore a fundamental underlying fact: A lot of people paid a lot more than is customary for that app. Tweetbot is proof positive that many people will pay sustainable prices. The question is, under what circumstances is that true?

Tweetbot’s success suggests that many of us have had the psychology of the App Store customer dead wrong. It’s not that App Store customers are price sensitive, it’s that they’re risk averse. Under the circumstances, their aversion to risk makes a lot of sense: They’re being asked to shell out their hard-earned money for an app that they haven’t tried before, and for which it’s hard to get a refund. Add in the fact that many of these customers have been burned before when they bought one of the thousands of garbage apps out there, and it’s easy to see why they would be resistant to paying a sustainable price for an app, sight unseen. Tapbots’ gold plated reputation for quality goes a long way towards reducing the risk that a customer associates with the purchase of Tweetbot for Mac, and I believe that’s why they succeeded at a higher, more sustainable, price than is ordinary.

When you look around the App Store, there are actually several companies that are prospering through the use of sustainable pricing. Instapaper has prospered despite being more expensive than its competitors. Cultured Code and AgileBits both have their apps priced at or above $9.99 and have thrived in the App Store. More than any other company, The Omni Group has made it their standard practice to choose and stick with sustainable prices for all their apps. But it’s not just productivity and business apps that can do well with sustainable pricing. Utilities like App Cubby’s Launch Center Pro, educational software like Vito Technology’s Star Walk, and even games like Sword & Sworcery have all done well with higher prices than the norm for their respective categories. The one thing that they all have in common is a reputation for quality and long-term value. This reputation has given their customers confidence in their purchase and allowed the companies to charge more for their products.

So how can the successes that these companies have had with sustainable pricing be duplicated by other developers who don’t (yet) have a similar reputation? The trick, I believe, is to do everything you can to reduce the perceived risk that potential customers associate with purchasing your app. Some things are obvious. Start with a quality app that does its job well. Have a really nice website – maybe even pay a designer to replace all your crappy programmer graphics. Have a beautiful app to show off in your App Store screenshots. Maybe put a video on your website showing your app in use. Other things aren’t quite as obvious. Have excellent customer support and make sure that that excellent support is highly visible. Place prominent support links in your app and on your web page. Also, use a self-hosted message board or a third-party solution like Get Satisfaction for support. This allows customers to receive self-service help, but it also shows off your excellent service to potential customers and lets them know that they won’t be left high and dry should something go wrong after their purchase. In general, anything you can do to impress upon the potential customer that you are legit and that they won’t be swindled will make it more likely that those potential customers will pay more for your app.

I can already hear your objection and yes, you’re right, these types of marketing activities won’t catch the attention of all potential customers. A lot of people who shop the App Store won’t do any research before purchasing, and won’t see the effort you’ve put forth. But if you’re charging a sustainable price, that’s ok. The sales you’re going to lose due to having a higher price are, quite frankly, customers that you didn’t want anyway. The customers you’re going to lose are the support headaches and those who leave a one star review for trivial reasons. By charging a sustainable price, you’ll be left with customers who have taken the time to educate themselves about your product, and who are motivated to seek support rather than leave a bad review. And because you will have charged a sustainable price, you’ll more than make up the difference from those lost sales through your increased per unit revenue.

So am I suggesting that every app should be priced at $9.99? No, certainly not. Every App Store category is a different market, and every app has different competitive forces at work upon it. A "sustainable price" is going to mean something different for every app. But, as Jurewitz suggested in his Çingleton presentation, I bet most apps could safely double their price. I bet most 99¢ apps would generate more revenue priced at $1.99, just as I bet most $3.99 apps would make more if priced at $7.99.

Messing with your product’s pricing is scary, I know. Our businesses rely on steady revenue, and whenever we raise our prices there’s a fear that we’ll price ourselves out of the market. The recent success that Tweetbot has had at a higher price point should serve as a wake up call to all of us, though, and embolden us to take a hard look at our own pricing strategy. Perhaps now is the time to start pricing for long-term success.

Posted on October 22, 2012

Read More


I wrote earlier that I attended 360iDev a couple weeks ago. I also got a chance to attend SecondConf in Chicago last weekend, where I had the opportunity to speak. SecondConf was a lot of fun, but I couldn’t help but notice that a lot of people weren’t getting as much out of the conference as they could have. I just wanted to walk up and say, “You’re doing it wrong!” I resisted that temptation, but in a spirit of helpfulness, I thought that I’d share with the world a few tips that I’ve discovered to help make your conference experience more enjoyable and valuable. So without further ado…

Attend Sessions

Every technical conference that I know of has sessions that you can attend. Do that. The conference organizer has gone to great lengths to select a line-up that includes experts in different topics. It would be silly to not take advantage of that resource. And when you attend a session, take notes. Take out your developer notebook (You do have a developer notebook, don’t you?) and jot down the the session name, the speaker’s name and his contact information. Then jot down anything that sounds interesting or that you might want to follow up on. This isn’t high school, and there isn’t going to be a test, so there’s no need to go crazy with the notes. Just jot down things that you didn’t know about before. Future you will be glad that you did.

Choose Wisely

If you’re attending a multi-track conference, you might get to choose which sessions to attend. But a choice is both a blessing and a curse. What if you choose wrong? What if you sit through a "meh" session only to later discover that the session right next door was incredible? How can you avoid disappointment? Well, there’s no sure-fire way to make sure you get into the best sessions, but one trick I’ve found is to choose which session to attend based on the speaker, not the topic. Choose a speaker who has a reputation for being outgoing and entertaining. In my experience, a great speaker can make even the most bland of topics interesting and memorable. Also, be wary of overly technical talks. No matter how important the technology, there’s nothing worse that sitting through slide after slide of code. When it comes to these types of code-intensive presentations, you’re probably better off buying the session video after the conference. Then at least you can rewind as needed.

Mix It Up

Sessions are great, but most of the value of attending a conference comes from the people you’ll meet. Meeting new people and strengthening existing relationships are the best use of your time while you’re there. Introduce yourself to others. Go out of your way to sit with people you don’t already know – maybe even ask a table of strangers if you can join them for lunch. Avoid only hanging out with people that you already know. Mix a little. Whatever you do, don’t hole up in your room working on code. Don’t like to "network"? Then don’t call it that. Call it "making new friends". Because that’s all you’re doing.

Leverage Social Media

Don’t worry, this isn’t going to devolve into some sort of SEO presentation on how to increase your Klout score. My point is, you probably already know people on Twitter that are attending your conference, so go out of your way to meet them. My new friend Matt Klosterman (@IfMatt) had a great shirt at 360iDev that read, “Hi! I’m @IfMatt. We should talk.” And you know what? It worked! It helped me recognize him, and sparked a conversation. But you don’t need a special t-shirt to hook up with your online friends. Get on Twitter and put the word out that you’re at the conference and would love to meet your followers. Or, better yet, organize a group to go out and get dinner. It’s one thing to follow someone online, but it’s quite another to have shaken their hand, and maybe shared a meal.

Be Memorable

I had the chance to hear Dave Wiskus (@dwiskus) speak at a conference recently, where he gave a talk entitled "Subjective C". His talk included a collection of stories and anecdotes about non-technical skills, and one of his slides was titled "Be Memorable". And you know what? When it comes to conferences, that’s really good advice. Meeting lots of people is great, but you want the relationships that you form to last beyond the conference. So how do you become memorable? Good question. Being memorable doesn’t have to mean being the life of the party. (Although it can, if that’s your thing.) What it really means is going out of your way to make an impact on someone else. Engage people in meaningful conversation. Introduce the people that you’re with to others. Thank the author of that open source code that you’re using in your project. The most important thing is to be authentic.

Have a Winning Strategy

For the more introverted among you, mingling at a conference and engaging a stranger in converstaion sounds like torture, I’m sure. So let me offer a surefire strategy. No matter how uncomfortable you feel in large social gatherings, there’s always someone more uncomfortable than you. Your job is to find them. So during the social hour (or between sessions), scan the crowd. Look for that one guy standing by himself with a drink in his hand and looking slightly uncomfortable. That’s your target. Walk up and introduce yourself. Ask him where he’s from and what projects he’s working on. That’s it. That’s your conversation starter. Talk for a few minutes, and then move on to the next wallflower. The best thing about this strategy is that you’re not imposing on anyone. Rather, you’re rescuing them! The people you’re approaching are just as uncomfortable as you are, but now they feel included. You’re the hero. And congratulations, you’ve just become memorable.

Posted on September 28, 2012

Read More