Author Archive

One-star reviews are lousy bug reports

Puzzling over cryptic bug reports is a frustrating and unavoidable part of being a developer. When users want to complain to you about a bug, they just usually don’t think through all the pieces of data that might help solve the problem.

What OS are you using? What version of the software? What were you doing to cause the bug? When users are angry, they don’t want to deal with such tedious details. They just want to vent.

This happens with large software companies, small software companies, and indie developers alike. It’s such a common gripe among developers that it’s not even worth describing any further. Any seasoned dev knows what I’m talking about.

In the Android world, dealing with bug reports is even more frustrating, because they usually come in the form of 1-star reviews on the Android Market. 1-star reviews provide all the cathartic venting that users desire, without any of the useful information that could actually solve the problem.

Here are some actual 1- and 2-star reviews I’ve gotten on the Android Market:

  • didn’t open… gutted
  • There is no sound on moment would give higher rating when fixed
  • always forced close on samsung galaxy s. I have to uninstall it.

Yeah, not so helpful. Figuring out a bug from comments like these is like trying to solve a detective story with half the pages torn out.

Worst of all, these kinds of comments are dispiriting for developers, because star ratings are so crucial to getting your application to be highly ranked in the Market. My own recent app KeepScore had only 4- and 5-star reviews, and was starting to get ranked pretty highly, before receiving an onslaught of these nasty little comments:

Angry? Yes. Helpful? No.

KeepScore is designed to save scores automatically. In particular, it’s supposed to automatically save your scores whenever the app leaves the foreground, as shown here in the source code.

I couldn’t reproduce the data loss described in these reviews. Even when an incoming call disrupts an ongoing game, KeepScore gracefully exits and displays a comforting message saying, “Game automatically saved.” I’ve never seen it lose data.

So what happened here? Did the Android system kill the app before it could call the onPause() method and save the data (which, according to the Android Activity Lifecycle, shouldn’t happen)? Did the users just accidentally create a new game, so that it replaced the old one in the “Resume Last Game” section, making them think that the data had been lost? Who knows. Without a proper bug report, I have no idea what to make of this.

Bad reviews make the author feel better, but they rarely lead to better applications. I’m going to try not to let these reviews sour my experience with KeepScore, though, or discourage me from putting more effort into it. I want to get to the root of this problem.

So, loyal KeepScore users, have any of you run into this particular issue? If so, please report it on the GitHub page, and let’s squash this bug! Oh, and if I do manage to fix it, please leave a nice little comment for my trouble, will ya? It’d be nice to have some good reviews to offset all these bug reports.

CatLog now supports external Intents

As of version 1.3.2, you can now start up the main CatLog activity using an external Intent, with parameters for filter text and log level.

For Android developers, the idea is that you can just put a switch in your app where, if some debug variable is enabled, you can press a button or access a menu item to start up CatLog and search for text related to your app. This should make it less painful to do debugging, in situations where you don’t have access to adb logcat.

I’ve written a simple demo app on GitHub to show how to use the new Intent.  But the basic gist is that you want to paste something like this into your code:

Intent intent = new Intent("com.nolanlawson.logcat.intents.LAUNCH");

intent.putExtra("filter", myFilterText);
intent.putExtra("level", myLevelText);

startActivity(intent);

That’s it! Full documentation is below.

Intent

com.nolanlawson.logcat.intents.LAUNCH

Parameters

filter

Text to filter by.  Case doesn’t matter, and you can search for either process ids, tags, or log text.

level

Log level to set CatLog to, case insensitive.  One of:

  • E (error)
  • W (warn)
  • I (info)
  • D (debug)
  • V (verbose)
  • F (what a terrible failure)

CatLog is #1!

My goal with CatLog was to write the best darned Logcat app for Android, and in that regard I think I succeeded. But as long as the adequate but inferior aLogcat was ahead in the search results for “logcat,” I felt like my work was incomplete. After all, most people will just download the first app in the list without trying any others. How can I really say that I’ve written the “best Logcat app for Android,” when it’s not most people’s first choice?

Starting sometime this month, though, it finally happened – CatLog now shows up first in a search for “logcat” on the Android Market:

I’m ecstatic that my app is finally getting the recognition I think it deserves, but, to be honest, I’m also kind of puzzled as to why it suddenly managed to nudge ahead of aLogcat. Comparing the Market statistics of the two apps side-by-side, it’s not clear what makes CatLog stand out:

CatLog aLogcat
Released: Aug. 2010 Nov. 2009 (?)
Downloads: 10,000-50,000 100,000-500,000
Reviews: 587 1,683
Rating: 4.7 4.6
Updated: August 14, 2011 March 6, 2011
Android Version: 1.5 and up 1.5 and up
Category: Tools Tools
Size: 323k 39k
Price: Free Free
Content Rating: Everyone Everyone

There doesn’t seem to be a big difference in the ratings (4.7 vs. 4.6), and aLogcat has a considerably higher number of downloads and reviews. So what changed? I think this blog post might provide a clue. It seems that, besides downloads and ratings, Google’s ranking algorithm also takes into consideration the retention rate of an app – i.e. how many users actually keep the app installed, as opposed to those who just download it.

It’s impossible for me to know what aLogcat’s retention rate is, because Google doesn’t make that information public. But I do know that CatLog has 40,834 downloads and 15,487 active users, which gives it a retention rate of 38%. This is the highest retention rate out of my most popular apps (30% for Chord Reader, 18% for Japanese Name Converter, and 20% for Pokédroid), so I’m guessing it’s also higher than whatever aLogcat has. Considering that aLogcat was released almost a year before CatLog, maybe it initially attracted a large user base that later started flocking to my app? Who knows.

Alternatively, it could be the fact that I’ve recently updated CatLog, whereas aLogcat hasn’t been updated since March of 2011. If that’s the case, then aLogcat could quickly regain the lead by just releasing an update. This seems unlikely, though, given that such a system would be easily gameable by just releasing a new update every day. As I noted in a previous post, those kinds of shenanigans made the “Just In” section of the Android Market practically useless, so Google eventually nipped that practice in the bud.

Whatever the reason, it’s nice to see that quality apps do eventually drift to the top. Similarly, I’ve watched one of my other apps, KeepScore, jump from 11th to 3rd in a search for “score keeper.” I’m hoping that, by just being the quiet valedictorian in the back of the class, it can eventually make it to the top. CatLog proves that that’s possible.

State of the Android app union

I thought it might be useful to report on how all my apps are doing on the Android Market, in terms of downloads and active users. Hopefully this information will be helpful for someone looking to write their own app, or wondering what their chances of success are.

It’s worth mentioning that I’ve never marketed any of my apps, except for a short “house ad” campaign I did in Chord Reader to promote KeepScore. App development is a hobby for me, so I’ve found it more interesting to just release my apps into the wild and see whether they sink or swim. I’ve relied almost solely on the Android Market and word-of-mouth to build up my user base.

This may have worked better when I first started writing apps, which was around March of 2010, when Android was still in its infancy. Back then, the Android Market had less than 20,000 total apps, so you could get a decent amount of visibility by simply publishing your app. Today, the Android Market boasts over 250,000 apps, so it’s much easier to get lost in the crowd.

My Personality Type

For instance, when I released my second app, My Personality Type, in March of 2010, it was able to gain 3,000 downloads in a single week without any advertising. Most likely this is just because personality tests are fun, mine was free, and it was also only the second or third of its kind to be released on the Market. The app was later removed due to a takedown request from psychologist David Keirsey, so there’s no way of knowing if it could have maintained that stellar rate of growth, but it’s pretty impressive nonetheless. (Yes, Pokédroid was not my first run-in with copyright issues. I tried to work out a licensing agreement with Dr. Keirsey, but eventually he stopped responding to my emails.)

By comparison, my most recent app, KeepScore, has grown much more slowly. KeepScore only broke 1,000 downloads very recently, even though it’s been on the Market for almost two months, and despite the fact that I promoted it through house ads (where it got 8,091 impressions and 243 clicks). I’m guessing this is because the Android Market is already saturated with tons of score-keeping apps, so KeepScore doesn’t even show up in the top 10 in a search for “score,” “score keeper”, etc. Even though it’s the best of the bunch, it’s hard to stand out over apps that have been around longer, with more downloads and more reviews.

In general, though, I’ve found that the best determiners of an app’s success in the Market are 1) search engine optimization, 2) constant updates, and 3) short, easily understandable app summaries. I’ll describe each one in turn.

Search results for "score keeper."

Search engine optimization is important for the obvious reasons. Most users are going to discover your app by searching for some problem they’re trying to solve – “save battery,” “calorie counter,” “weather widget,” etc. Try to think of what need your app fulfills, and be sure to include those terms in your Android Market description. I always just add a section at the end where I write “seo:” and then list a bunch of terms related to the app.

Constant updating might not be something you’d imagine would contribute much to an app’s success, but anyone who’s worked in Android development long enough can testify to this. Back in the old days, this technique was enormously effective, because the Android Market app had a prominent “Just In” page that simply listed the most recently released or updated apps. For this reason, you’d often see spam apps (such as “Sexy Hot Girl #12”) releasing a new version every day, perhaps under the imaginative title of “version-20100614”. Anybody could just change a string, release a new version of their app, and watch the number of downloads spike.

Google seems to have cracked down on this practice since then, and the new Market app doesn’t even include a “Just In” page. Instead we now have “Top New Paid,” “Top New Free,” and “Trending,” which seem relatively free of spam. But updating from time to time can still be a boon to your app’s success. Users love getting updates, and when the updates stop rolling in, they tend to lose interest in your app and uninstall it. Go long enough without any updates, and you may even start hemorrhaging users. (We’ll see an example of this later.)

Search results for "logcat."

And finally, short, easily understandable app summaries are a crucial part of promoting your app through the Market. I believe most users will decide whether or not to install your app based on a glance at the search results, which means the icon and the name are key. The description, the reviews, and even the star rating are of secondary importance, in my opinion. (The star rating is almost meaningless, because all halfway decent apps will have at least 4 stars.)

So when you design your app, you need to ask yourself: 1) Is the icon attractive, and does it hint at the app’s functionality? and 2) Is the name simple, and does it effectively communicate what the app does? For illustration, I’ll point out that aLogcat beats out my own app, CatLog, by this measure. CatLog has a cute icon (which many users have complimented me on!), but I’ll admit it requires a little bit of extra mental effort to figure out what the app does. CatLog still has fewer downloads than aLogcat.

All of these are just tips based on my own personal experience, which means they’re mostly hunches and guesswork. Make of them what you will. But of course, the Android Market also provides us with some wonderful reporting tools, so I have some hard data to offer as well!

So without further ado, here’s the current state of all my apps in Android Market, in the order I wrote them. I report the total number of downloads, as well as the number of active users (i.e. installed copies of the app). Each graph shows the change in active users since January of 2011, which is when Google started providing these detailed statistics. You can ignore sudden spikes in the graph – I think those are bugs in the reporting tool.

Japanese Name Converter

Released March 2010
39,144 downloads
7,464 active users (19%)

My first app, which I never updated beyond version 1.0, is still fairly popular. Its popularity also seems to be pretty constant, since I imagine most people download it, get a kick out of it, and then uninstall it soon afterwards. That doesn’t bother me much, though, since this was basically just a “Hello World” app for me.

My Personality Type

Released March 2010
3,286 downloads
287 active users (8%)

As I noted above, My Personality Type only spent one week on the Android Market, due to a takedown notice from the author of the test. (I actually based this app on an assignment from one of my undergraduate computer science classes, so I didn’t know the test was under copyright.) Given it’s been off the Market for a year, I’m kind of amazed the app still has any active users at all.

Pokédroid

Released April 2010
451,492 downloads
125,576 active users (27%)


This chart still breaks my heart a little. The sudden bump in March corresponds to when I released the update for Pokémon Black/White, and the dip in June, of course, corresponds to when I removed the app from the Android Market due to a takedown notice from The Pokémon Company. At its height, it had 170,000 active users.

Offline Browser

Released June 2010
17,032 downloads
2,820 active users (16 %)

I wrote this app while I was attending the 2010 NAACL conference, because I wanted to be able to browse the conference proceedings, which were distributed as raw HTML and PDF files, on my phone. This app didn’t hold much interest for me afterwards, so I never looked back. (By the way, here’s my paper from that conference.)

App Tracker

Released July 2010
3,183 downloads
344 active users (10%)

With only 3,000 downloads over the course of a full year, App Tracker is a certified dud. As I was developing it, I actually believed it was going to be my breakthrough app, and that the revenue from the Premium version would allow me to quit my day job and do app development full-time. Unfortunately, the graveyard of lost ambitions is littered with such failures, and App Tracker never really got off the ground.

CatLog

Released August 2010
24,614 downloads
10,330 active users (41%)

Ah, CatLog – the phoenix that rose from the ashes of App Tracker. After App Tracker’s failure, I refashioned its log-reading component into a straight-up Logcat app, and now CatLog perseveres as my third-most popular app. In fact, it’s probably the app I’m most proud of after Pokédroid.

Chord Reader

Released October 2010
30,533 downloads
11,607 active users (38 %)

It’s a shame I never found this app very compelling to work on, because it’s actually my most popular app on the Market (now that Pokédroid is gone). I’m not really sure why it started bleeding users in late June, but if I had to guess, I’d say it’s because I haven’t updated it much over the past year. Like I mentioned above, users tend to lose interest when you don’t update, and I think that’s especially true when there are much-needed features they keep clamoring for. (In my case, users keep asking for an auto-scroll feature and setlists.)

KeepScore

Released June 2011
1,207 downloads
873 active users (72 %)

I would really, really like to see this app succeed more than it has. My goal with KeepScore was to create the end-all be-all best score keeper for Android, and in a sense I’ve failed simply because the app still doesn’t have much visibility in the Android Market. As I mentioned above, it doesn’t even come up in the top 10 in searches for “score” or “score keeper,” meaning that most users will probably never find it, and instead settle for an inferior app. I’m not sure what to do, though, other than wait for it to gain more downloads and ratings. I have no control over Google’s search rankings.

So that concludes my app-by-app report. But because it’s a lot of data to take in individually, I also created some charts comparing all the apps side by side:

Total downloads and active users

Total downloads and active users

This chart shows the total number of downloads and active users (as of today) per app. Obviously Pokédroid is an order of magnitude more popular than my other apps, so I also created a log-based version of the same chart:

Total downloads and active users (log)

Total downloads and active users (log)

Here it’s a little easier to compare the non-Pokédroid apps. Chord Reader, CatLog, and Japanese Name Converter are all reasonably successful, whereas Offline Browser and App Tracker are less so. With KeepScore and My Personality Type, it’s difficult to compare, because they’ve spent much less time on the Market than the others. So I also went ahead and created a chart showing the total number of downloads and active users divided by the approximate number of days spent in the Market:

Downloads and active users per day spent in Market

Here it’s easier to see which apps were more popular on a day-to-day basis. The most surprising finding is that My Personality Type apparently had more potential than I thought. Even though it was only on the Market for one week, it looks like it could have been as popular as Pokédroid if it hadn’t been taken down. (Funny that my most successful apps are also the ones that get targeted for copyright infringement! Take note, kids: you walk a fine line when you reuse other people’s content.)

And here’s the same graph with a log-based y-axis:

Downloads and active users per day spent in Market (log)

So there you have it. Of the apps I still have on the Market, Chord Reader, Japanese Name Converter, and CatLog are the most popular. Offline Browser and KeepScore take up the second tier, whereas App Tracker is an unmitigated failure. (I couldn’t even show App Tracker’s active users per day on this chart, because the value was less than 1, meaning the log value actually went negative.)

I wish I could say there was a way to know in advance whether an app is going to be a hit or a miss, but I think the Android Market is just too unpredictable for that. You really can’t know how popular an app is going to be until you put it out there. For me, though, this is the excitement of app development. More so than with any other kind of software development, you get immediate confirmation of whether or not people find your app useful. So if nothing else, it’s fun to throw darts at the board and see what sticks.

Update on Pokédroid

I’m still getting lots of comments and emails about Pokédroid, which was taken down from the Android Market last month due to a DMCA notice from The Pokémon Company. (See these posts.) Most of my blog traffic still seems to come from Pokédroid-related searches, which is not surprising given the more limited appeal of my other apps. (What – you guys aren’t as excited about my system log reader?) So I thought I’d do a little round-up of the commentary on Pokédroid and get everyone up to speed on where the app currently stands.

Tim Oliver, the developer of iPokédex, informs us that the app removal process for iPhone Pokédexes has now begun. The timing seems about right, given that the TPC lawyer I spoke to said that Apple’s process takes a bit longer than Google’s. Tim and other iOS developers are in talks with TPC right now, but if their experience is anything like mine, we can expect iPhone apps to be removed shortly.

None of this should be surprising, given that TPC is now venturing into territory previously occupied by fan developers. The recently released Pokédex 3D app for 3DS, although not a true strategy guide like Pokédroid, makes it clear why TPC would start to view fan-made apps as unwanted competition. The rhythm-action Pokémon games coming to Android and iPhone make this point even less ambiguously.

Liam Pomfret, the head of Bulbagarden, has been my most helpful contact point throughout this whole process, and he has an interesting editorial on Bulbanews laying out TPC’s case for taking down Pokédex apps. It’s very persuasive, and if nothing else it splashes some cold water on the impulsively negative fan reaction. He points out that all fan-made media (including Bulbagarden itself) is in violation of TPC’s copyrights, and so TPC is within its legal rights to selectively allow or disallow whatever content it wants. It’s debatable whether or not taking down Pokédex apps is actually in TPC’s own self-interest (I’ve argued it’s not), but the legal case is pretty difficult to dispute.

And in fact, even if Pokédex developers like myself did have a good case, we probably wouldn’t be doing ourselves any favors by taking it up in court. Recently there was the case of the Miles Davis afficionado who ended up paying $30,000 for a copyrighted photo he used in a tribute album. This was without any admission of guilt, and despite the fact that his lawyers thought they would have had a decent case if they had actually pursued it. The $30,000 settlement was simply the least expensive option available to him.

Now this may surprise you, but Pokédroid, as a hobby app, is not worth $30,000 to me. And if you think I could just get 30,000 of my 150,000 active users to each chip in a buck and cover my legal expenses, then you’ve never developed a mobile app before.

This is why I’ve rejected requests to open-source Pokédroid. As Liam pointed out above, open-source licenses still presume ownership of the IP content in the code, which means I’d be making myself a legal target just by publishing the code base. Even though I’m a die-hard Linux user who loves open-source, I have to admit that this isn’t really the time or place for it.

Anyway, I’ve been on good terms with TPC so far, so I have no incentive to do anything to try and spite them. Everyone I’ve spoken to at TPC has been very courteous and respectful towards me, and they’ve taken obvious care to explain their point of view and avoid any misunderstandings. They’ve even mentioned reading my blog posts (hullo out there!), so they’ve obviously got their finger on the pulse of the fanbase, and aren’t acting hastily or thoughtlessly.

My hope right now is just that they will offer to license Pokédroid or rebrand it as an official Pokémon app. In my ideal world, they would also let me open-source it, possibly in exchange for my help with the rebranding process. That way, I could gracefully hand the reins over to other fan developers (who would probably be more hardcore Pokémaniacs than me, and thus more diligent contributors), but the app would still remain an officially licensed product. TPC could continue to disallow unofficial apps on the Android Market if they wanted, but anybody would be able to contribute to the official app. The same community involvement that made Bulbapedia strong could make Pokédroid the best Pokémon resource on any mobile platform.

Admittedly, this scenario is a little starry-eyed. But even if TPC wasn’t keen on the open-source idea, I still have 19,000 lines of code that could save them a ton of time if they decided to build their own Android Pokédex app. Hopefully they’ll take me up on my offer, so that Pokédroid can get back in the Market, and back in the hands of the fans who find it so useful.

A small improvement for KeepScore

This week at the pub I took KeepScore for its first test run in a little game of four-person cribbage. It got high marks from my friends, who agreed that KeepScore was better than the other Android scoring apps we had tried. (But of course my friends would say that.) Still, I also received some useful criticism that informed an update I wrote later in the week.

It seems the biggest problem was that the bolded history items were too small, and therefore difficult to read. In light of this, I considered just upping the text size on all the history items, but then I realized: the only history item you’re usually interested in is the most recent one. When you’re trying to tap the button 7 times to add 7 points, you want to verify that you’ve actually added 7, instead of 6 or 8. But after you’ve given the player his/her points, you tend to stop paying attention until the next time you need to add points.

Before

After

So instead of the bold text, I decided to use little “badges” over the numbers (or “blibbets,” as we called them at my old company). I think they’re pretty neat looking, and they also make it dead simple to tell how many points you’ve added. After 10 seconds of inactivity, the badges disappear and move over to the history column instead. This has the added benefit of drawing a clear distinction between the modifiable and unmodifiable parts of the history.

Something else I noticed was that, in the long-press popup, the buttons were also too small and too hard to read. So I simply enlarged the text and gave the buttons more space relative to the EditText (which no one at the table used anyway).

Before

After

Both of these problems stemmed from the fact that I had only tested the app with the phone held in my hand, rather than flat on a table within reach of multiple people – which is how it’s actually used. Held in my hand, all the text on the screen is perfectly easy to read, but in the middle of a dimly-lit bar table, it’s another story.

In the end, this turned out to be one of those slap-yourself-on-the-forehead-it’s-so-obvious kinds of problems that you can only really discover through usability testing.

Building a better counting app

Last week I was in a pub having drinks with some friends when we decided to play a little cribbage. Crib is a great card game – it’s fun and fast-paced, it works well with anywhere between 2 and 4 players, and you can finish a round in about a half-hour. It’s pretty much the perfect card game.

We didn’t have any pens or paper to keep score, though, so we turned to the Android Market to try to find a good scoring application. The first one we tried out, Score, crashed on us halfway through without saving our game. The second, Scorer, was workable but awkward. In the end, we were able to score our game, but it would have been much easier to just use pen and paper. Something about that struck me as wrong – this is the 21st century! Why can’t my damned smartphone keep score?

I like thinking about user interface problems, so I followed this rabbit hole all the way to the end. I tested the most popular scoring apps on the Android Market, found them all to be underwhelming, and then finally wrote my own. My app, KeepScore, only took one weekend to write, but I think it’s already better and more usable than every other scoring app on the Market.

KeepScore

What makes it better? My first advantage is simple hindsight. Since the other apps came out first, I was able to test them and see which design decisions worked and which ones didn’t. I remembered the frustrations that came with our impromptu game of cribbage: I pressed the wrong button! It didn’t save our scores! The screen fell asleep! Based on this experience, I knew what to avoid in KeepScore.

My second advantage is that I read and applied the principles in Joel Spolsky’s User Interface Design for Programmers. I mention this book a lot in my blog, but I just can’t emphasize enough how reading it can help make you a better UI designer. If there were two principles from this book that I wish every app developer would follow, it’s these:

  1. Assume your users are illiterate. They won’t read anything.
  2. Assume your users have big, fat thumbs. They can’t press anything accurately.

I won’t try to justify these principles here, because I think I already did a decent job in this post. Instead, I’m just going to review each app in turn and show how KeepScore improves upon them.

Score

Score is actually a decent app, and it’s where I got most of my inspiration for the design of KeepScore. The “new game” wizard in particular is a great idea – it’s simple, it’s intuitive, and it allows you to start up a game in seconds. However, Score suffers from a few flaws that make it nigh-unusable:

  1. The screen doesn’t stay awake. In a game like cribbage, where you need to update someone’s score every 20-60 seconds, this is unacceptable. When we played, the game kept grinding to a halt every time the phone fell asleep.
  2. The game doesn’t save automatically. My friends aren’t used to my Nexus One, so they kept accidentally hitting the home key or the back key. Each time, we would have to enter all our scores again.
  3. The buttons are too close together. When your users are going to be juggling a handful of cards or game pieces while simultaneously trying to guide a finger towards the smartphone screen, there’s no reason to bunch up the buttons so close together. In Score, it’s easy to accidentally decrement one player’s tally when you meant to increment another’s.

On top of this, Score just seems to suffer from sloppy execution. When you long-press on the “+” or “-” button, you get a popup allowing you to add a custom value, but it actually adds one less than whatever you enter. Many users have complained about this in the Android Market comments, but the dev doesn’t seem to have gotten the memo.

Scorer

Like Score, Scorer is a mix of good design and bad design. One feature I really like is the configurable buttons at the bottom – they make it easy to add large numbers to a player’s score (e.g. to add 12, press “+10” once and “+1” twice). Another highlight is the green and red increment markers next to each player’s name, which make it easy to see how much you’ve already added to someone’s score. (I borrowed both ideas for KeepScore.) Scorer also keeps the screen awake and saves automatically, although unfortunately it can’t save more than one game at a time.

Scorer’s biggest flaw, though, is just its basic layout design. Rather than having separate buttons for each user, Scorer requires you to tap a player’s name before altering their score. This doesn’t sound like a big deal, but in practice it makes scoring very cumbersome. When playing cribbage, my friends and I would often accidentally add a score to the wrong player, and then we would have to figure out how much we added, backtrack, and add it to the correct player.

Another problem is that the green/red markers only “commit” if you press the OK button. So if we wanted to make sure we could backtrack the correct amount, we’d have to keep pressing OK to add the score in. This meant at least three touches were required just to update a player’s score! Tap, tap, tap. It doesn’t sound like much, but it’s a minor inconvenience that adds up over the course of a game.

Advanced Tally Counter

I’m not even sure where to start with this one. This is a good example of the kind of graphic design I really hate: the developer has gone out of his way to deviate from the basic Android themes, and the result is an ugly and distracting presentation. On top of that, the app is very wordy and heavy on explanations. Touch the big button in the corner, and you’ll see a toast saying, “Please long click on this button to reset the counters.” Touch the back button and you’ll see “Press back again to exit the app.” Touch back twice and you’ll get a popup asking you to rate the app before you exit. Start up the app for the first time and you’ll get a popup asking you to download another app. And of course, there’s an ad banner over the top. The app seems determined to direct your attention toward everything except just keeping score.

Other than that, the app is pretty basic. Press “+” to increment by one, and press “-” to decrement. There’s no way to add larger values at once, and if you long-press on the “+” or “-” buttons, you’ll get a long list of hardware buttons you can use in place of the on-screen button. I find this feature pretty useless, though, given that more and more Android devices are getting rid of keyboards, buttons, and trackballs. Also, if you press the “+” or “-” button rapidly, the current score won’t update at first – it’ll just sort of vibrate for awhile until finally updating at the end. I found that confusing.

All in all, there’s no reason to use Advanced Tally Counter when there are less ugly and distracting alternatives. Also, the fact that the app has ad banners and a bewildering “Pro” version (I still can’t figure out what it does) reflects pretty poorly on the dev. Come on, dude. You’ve written a counting app. Are you really so hard-up that you need to try to make money off this thing?

Simple Score Sheet

First off, let me compliment the graphic design here. This is a case where a developer has deviated from the standard Android themes, but unlike Advanced Tally Counter, I think the result is really pleasing to the eye. The motif is simple and unobtrusive, and the custom font lends itself well to the whole “pen and paper” theme. Even the stylized buttons are cute and not at all distracting. So I give the developer high marks for designing a really beautiful app.

Unfortunately, the big problem with Simple Score Sheet is that it violates every principle of simple UI design. Whenever the developer had a choice between simplicity and complexity, he’s clearly chosen complexity. Just starting up a new game is like filling out a census form – it’s long, it’s tedious, and you have to think hard before you answer every question.

Just look at the screenshots above. Everything above “Start game” on the first screen is totally unnecessary for 99% of the app’s users. What’s the starting score? Who cares – I probably just want it to be zero! The whole “Game ends after…” and “Player with highest/lowest score wins” questionnaire is also the height of arrogance. Why do I need to tell the app who’s won the game? Why are you forcing me to start thinking about how many rounds the game has? Before I’ve started using your app, I don’t even know how it keeps track of rounds! I just want to start tallying some scores, damn it!

Even worse is the fact that the app will not let you complete the wizard unless you fill out all the information it deems necessary. If you try to press “Start game” without entering any information, it will complain: “Please enter a value for game ending option.” If you try to add a player without a name, it will complain again. All of these are pretentious moments where the developer is slapping the user on the wrist for not following his own complicated directions, like those old GPS navigation devices that would scold you for taking a detour. It makes the user think, and like the title of the famous book goes, Don’t Make Me Think!

Once you finally make it past the bureaucracy and into the scoring app itself, the usual complaints apply. It doesn’t automatically save, it’s hard to tell how much you’ve already added to someone’s score, and it’s hard to add values larger than 1. In fact, its system for adding large values is particularly bad. The way it works is that, if you long-press on the “+” button, the counter will start to increase on its own, accelerating as you keep holding it down. This would be pretty convenient, except that it also gets set off if you tap multiple times in quick succession. In practice, this means that the score will often start zooming off like a runaway car, and then good luck trying to get the value back to what it was before. It’s a neat idea, but it’s just not executed very well.

KeepScore

Enter KeepScore. KeepScore, I believe, is the best scoring app on the Android Market mostly because it just tries to do what the name says: keep score. The UI is designed to be as simple and unobtrusive as possible, without any distractions or extraneous options. Let’s walk through it step-by-step.

The startup screen and the “New Game” wizard are almost exactly the same as in Score. I added a “Resume Last Game” button, though, to provide a subtle hint that the game will be saved automatically. Other than that, it’s pretty basic, and when you open the app for the first time, it’s clear what you need to do: pound the “New Game” button.

As you go through the “New Game” wizard, all information except for the number of players is optional. If no players are named, then the name simply displays as “Player 1,” “Player 2,” etc. (Contrast this with Score, where only blank text is shown.) The scoring interface itself is very simple – two big buttons for each player, evenly spaced so that you’re not likely to accidentally press the wrong one.

As soon as you start adding or subtracting values, you’ll see that the pane to the side starts to get filled with past values you’ve already entered. The most recent value stays bold for 10 seconds (configurable), during which time you can keep pressing “+” or “-” to change it. After 10 seconds of inactivity, the bolded value will unbold to indicate that it is no longer modifiable. At this point it’s now part of the scoring “history.”

All of this becomes clear to the user after just playing with the app for a few minutes, with no explanations needed. It’s a handy feature that eliminates a lot of the problems of “Oh, I accidentally added too much to your score. How much was it?” With KeepScore, you have a full history of every change you’ve made to a player’s score, so you don’t have to try to remember what you added. You can also long-press on the history to undo the last change. (Or you can just subtract, which is what I imagine most users will do.)

And of course, the app saves automatically. Whenever you exit, it displays a comforting toast saying “Game saved automatically,” just so the user can be sure that everything is good and saved. If you accidentally exit, you’ll notice upon reopening the app that the “Resume Last Game” button is no longer disabled. Most users will probably just make a beeline for that button, which is why I put it on the main screen.

If you want to add values greater than 1, you can long-press on the “+” or “-” button. This pops up a dialog that allows you to input a number with the keyboard or just tap buttons with large increments like “+5” and “+10” (once again, configurable). It does worry me that this feature is “hidden” behind the long-press, but I think most users will figure it out if they know what they are looking for. Many of the other scoring apps let you long-press for additional options, so they might have set a precedent there. In any case, the app is still perfectly usable even without this feature.

Unlike Simple Score Sheet, most of the configurations can be found in the Settings section rather than the main wizard, where it would just be clutter. There’s a concept in software engineering called “convention over configuration,” which basically means that the standard use-case should be the default, and the user should only need to use configurations if they want to do something unusual. I think KeepScore applies this principle pretty well, and that it makes for a smoother user experience. Any user actually looking for strange options (a starting score other than 0, customized button values, etc.) is probably savvy enough to know where to look for them.

Other neat options include the ability to save more than one game, a separate screen to explore the game’s complete scoring history, and the ability to change a player’s name mid-game. Most users will not bother with these options, though, so I tried to keep them out of the way as much as I could.

So there you have it. With just a little common sense and the restraint to not clutter up your app with unnecessary options and verbiage, you can create a dead-simple scoring app that actually beats pen and paper. It’s kind of sad that the Android Market went so long without an app that could do something so basic, but I’m just glad I finally have something worthy of my next cribbage game.

And the best part: KeepScore is free and open-source. You can download it from the Android Market here or get the source code here.

If imitation is flattery, then CatLog has a secret admirer

When I first released CatLog last summer, my goal was to create a replacement for the dominant Logcat app, aLogcat. (“Logcat,” if you don’t know, is the somewhat cryptic name for Android’s system log, which is invoked by typing adb logcat in a shell. In a delicious pun, the Android team also lets you invoke it with adb lolcat.)

Around that time, I was on vacation in France, and I didn’t have access to a computer with an Android development environment. So when a problem came up in one of my apps, I tried using aLogcat instead. But aLogcat just wasn’t cutting it for me. It was clunky, difficult to read, and lacking in decent search/filter functionality. Just scrolling through the logs to try to pick out my own app from the others was a classic victory of the haystack over the needle.

When I got back to Seattle I was still unemployed, which meant I had a lot of time to burn. So I sat down at my laptop, and less than 24 hours of frenzied coding later, I had busted out my first version of CatLog. It didn’t have a lot of the cool features I ended up adding in future updates, but it would still beat aLogcat in a beauty contest:

aLogcat

CatLog

CatLog’s look and feel is inspired by Jeff Sharkey’s Colored Logcat script, which is a great way to view logs because the tags are color-coded, and because everything is organized into neat columns. CatLog is also easier to search than aLogcat, because the search bar is right on top of the screen, and it filters automatically as you type.

As far as additional features go, CatLog also records logs in the background, sends logs as text or attachments, and auto-scrolls when you’re at the bottom of the screen. aLogcat, by contrast, only lets you search through a cumbersome dialog box, it can only send logs as text, and it forces you to pause and unpause if you want to control the scrolling. It does the job, but in terms of usability, it leaves a lot to be desired. (Edit: aLogcat now supports auto-scrolling.)

Despite these shortcomings, aLogcat is still more popular than CatLog, and it comes up first in a search for “logcat”. That doesn’t bother me much, though, because I know I’ve written the best Logcat app for Android. You only have to play with each app for a few seconds to see the huge difference in presentation, features, and usability. aLogcat was first on the Android Market, and that’s probably what it owes much of its success to. But given enough time, I’m sure CatLog will pull ahead.

I got a little surprise a few weeks ago, though, when I noticed a new Logcat app on the market: LogViewer. I wondered if someone had finally improved upon CatLog – I love a good challenge! But as I played around with the app, I became more and more puzzled. LogViewer has far fewer features than CatLog, but the presentation is a dead-on imitation. Like CatLog, it has a cat in the icon. Like CatLog, it arranges everything in columns. And like CatLog, the search bar is on top of the screen, with “expand” and “clear” buttons to the side.

CatLog

LogViewer

I’m not angry at the developer for taking design cues from CatLog. After all, I modeled CatLog after Jeff Sharkey’s script, and the two look very similar (although his is a Python script and mine is an app). Also, I don’t really believe there’s anything wrong with borrowing someone else’s ideas to improve on them – human civilization is built off of this practice.

But what confuses me about LogViewer is that it doesn’t even improve upon CatLog in any way. It has far fewer features – no process id, no color-coded tags, no widget, no ability to delete saved logs, no ability to send logs as attachments, etc. And the only thing it adds is a big ad banner at the bottom, along with some text saying “Copyright 2011 ukzzang. All Rights Reserved.” (Nice use of the screen real estate, by the way. Heaven forbid someone should try to copy his app!)

I guess I just don’t see the point. Why would you go to the trouble of writing a Logcat app if it doesn’t improve on the competition? I suppose you can slap an ad banner on it and make a couple of cents that way, but having written an ad-supported app myself (Chord Reader), I can attest that ad revenue tends to be chump change unless your app is on par with Angry Birds in terms of popularity. (Chord Reader has over 11,000 active users, but it’s only earned about $60 since I released it 9 months ago. I’m thinking of just taking the ads out, since it’s not really worth it to ugly up the app.)

CatLog with menus

LogViewer with menus

My only hunch is that, since the author of LogViewer has written an “App Lock”-style app, he’s already had to deal with reading Logcat output (which is the way these sorts of apps work), so he figured he might as well write a Logcat app as well. And if that’s his reasoning, then fine. CatLog is still the best Logcat app on the Market, but if any of my users think to themselves, “Gee, I like CatLog, but I wish it had more ads,” well, they now have another option. I can’t argue against consumer choice, even though this particular choice seems a little silly to me.

There is one area, though, where I have to give LogViewer credit: its performance is pretty damn good. When I first tested it out, I noticed that its scrolling was much faster and smoother than CatLog’s. This made me realize that CatLog had some room for improvement in the speed department. So, spurred by this upstart new rival, I went back to the CatLog codebase and made some long-overdue optimizations that brought it up to roughly the same speed as its competitor. These changes are available starting in version 1.1.6.

So in this small way, at least, I tip my hat to CatLog’s secret admirer.

On Pokédroid’s Removal

I posted the short version of this story to Pokédroid’s page on the Android Market:

Pokédroid will be removed from the Android Market shortly.

A legal representative of The Pokémon Company has responded to me via email. He has confirmed that TPC would like Pokédroid, and all similar apps, to be removed from the Android Market.

TPC’s stance is apparently that they don’t want any Pokédex or Pokémon-related apps at all for the Android platform. They feel that such apps infringe upon their copyrights and compete with the print versions of their strategy guides.

While I disagree with this decision, which I believe is detrimental to the interests of both Pokémon fans and TPC alike, I have decided to comply with their request. Thus, henceforth I will cease all development on Pokédroid and remove it from the Android Market.

When this page goes down, please visit my site (www.nolanlawson.com) for more information. I will _not_ host the APK there.

It has been a pleasure to serve the Pokémon community. I hope you had as much fun using Pokédroid as I had writing it.

– Nolan

Going through this whole process of being targeted for copyright infringement, trying to fight it with argument and persuasion, and eventually being defeated has been a strange odyssey for me. I’ve learned a lot about how IP enforcement actually works in the real world, and I’ve lost a little bit of my naïveté. I’ve also lost the hundreds of hours of work I put into Pokédroid, and I’ve let down my 400,000+ users. It’s been humbling, to say the least.

When Pokédroid Donate was first taken down by Google, along with a dozen other Pokémon apps, I was not very surprised. I figured that either Nintendo was trying to crack down on paid Pokémon apps, or they were targeting blatant copyright infringements like wallpapers, games, and soundboards. I assumed Pokédex apps, which are really just strategy guides, would be safe.

Google sent me a copy of the original DMCA takedown notice from The Pokémon Company (which is an affiliate of Nintendo). But the fact that it listed my app, Khiry Arnold’s “Poké Pal”, and Stephen Willey’s “Pokédex” among a dozen-odd wallpaper and soundboard apps seemed to me like a mistake. Anyway, the notice itself looked very hastily thrown together – it was obviously the result of an entry form on Google’s website, and some of the app names were even misspelled. (“Pokédroid” was listed as “Pokédex,” although they spelled my name right.)

So when I started trying to get in contact with The Pokémon Company to rectify the problem, I figured the stakes were low. The free version of Pokédroid was still on the Market (probably due to an oversight from Google), and I couldn’t imagine TPC would want it removed. So I felt like I was mostly fighting for Khiry and Stephen, whose apps had been forcibly removed by Google while mine was overlooked. I had the most users out of the three of us, and therefore the most clout, so it seemed the responsibility had fallen on my shoulders to clear up the misunderstanding. Sort of like I was representing the Pokédex App Developers Union or something.

I honestly thought that the content of the apps was uncontroversial, and that as soon as I could get in touch with someone at TPC they would rescind the takedown immediately. I mean, there are plenty of fansites that offer the exact same content as Pokédroid, and nobody seems interested in taking those down, so why would Android apps be any different?

I did worry, though, that TPC might frown down upon monetizing our apps. So to be on the safe side, I deprecated Pokédroid Donate, which had only distinguished itself by including the “shiny” sprites anyway, and added the shinies to the free version. Now I felt Pokédroid was scrubbed clean of anything even slightly questionable – it was a free (and ad-free) app, with no content that couldn’t be found at a half-dozen popular fansites, and to boot I had gotten written permission from all the people who had given me their data (mostly Marriland, but there were a few other FAQ authors as well). A perfect representative of our little Union.

So like a fresh-faced Jimmy Stewart going to Washington, I penned the following polite email to TPC:

Hello,

I’m the developer of the Android Pokédex app “Pokédroid.” A few days ago I received an email from Google explaining that my app was to be removed from the Android Market due to a DMCA takedown notice from The Pokémon Company (see attached). Several apps are mentioned in the notice, including “Pokédroid” and other similar Pokédex-style strategy guide apps.

Could you please explain why The Pokémon Company is targeting these particular apps? My understanding was that they fall under the category of “fair use,” in that they function as strategy guides (i.e. research) and are not directly competing media. Furthermore, there are plenty of iPhone apps and web sites (such as Bulbapedia and Serebii.net) that offer the same content, so I’m perplexed as to why Android apps were singled out.

To be fair, many of the apps mentioned in the notice are clearly copyright-infringing – e.g. games, wallpapers, and soundboards. I can understand your desire to have these apps removed. But strategy guide apps, to me, do not appear to fall into the same category.

If this was indeed a mistake, please notify Google so that they can restore these apps to the Market. Hundreds of thousands of Pokémon fans use these apps as a resource when playing your wonderful games, so I’m sure that having them back in the Market would make those fans very happy.

If not, then I will be happy to keep “Pokédroid” off the Android Market, per your wishes.

Thank you for your time.

Sincerely,
Nolan Lawson

For two weeks I received no response. I sent multiple emails and even left a voice message at TPC’s company phone number. Then finally, after finding the phone number of one of their lawyers and leaving a message there, I received this email:

Nolan:

I’m the position omitted for The Pokémon Company International, Inc. I’ve been given to understand that you’re trying to reach someone at TPCi to try to get some information about Pokédroid and Pokédroid Extras and more specifically about why we asked Google to have them removed from the Android Market. Since you’ve reached out to us and been reasonable about this, I wanted to take a moment to write you back and give you some insight into our thinking.

By way of background, and sorry but I do have to get legalistic for a minute, you have told us that you think your apps are fair use. Unfortunately that’s not the case. There are lots of websites that purport to give information about what is and isn’t fair use, but I find one good summary is from the US Copyright Office at http://www.copyright.gov/fls/fl102.html. Under US law all uses of a copyrighted intellectual property by anyone other than the owner of the IP are presumptively illegal, and it’s up to the person using the IP to demonstrate that their uses are permitted. So fair use isn’t an affirmative permission to do something, it’s a defense to an action that is otherwise illegal, which means that it’s your obligation to prove that you should be allowed to make apps based on Pokémon and unless you can prove that you’ve got a legal right to do that, your apps are infringing.

One thing that’s not commonly-understood by fan communities is that the owners of the Pokémon IP have the right to decide not to put this IP into the Android Market or anywhere else. Put another way: if we don’t create our own Android Market app, that’s not an invitation to other people to fill what they perceive as a gap, it’s a decision that they have to respect. You may think that Pokédroid and Pokédroid Extras don’t compete with our print strategy guides like the one for sale at Amazon (http://www.amazon.com/Pokemon-Black-Version-White-Official/dp/0307890600/ref=pd_sim_b_1) or the one available for free at our website www.pokemon.com. But as you can see from the Copyright Office link that’s not the only criterion in the test, and even if it was I’d have to say we don’t agree, and in any event we have chosen not to allow any Android Market apps for Pokémon.

I hope this helps you understand the situation and our position. I can’t ask that you agree with me, although I’d hope that after you’ve read this you’ll know that we didn’t act capriciously or lightly. But I do have to ask that you take Pokédroid and Pokédroid Extras out of the Android Market and not upload them anywhere else. Could you confirm to me by return email that you’ll do that?

I hope that you’ll find another way to contribute to the Android app community. Given how skilled you are at app development, I don’t think it will take long.

Name omitted

Needless to say, I was shocked. Were they serious? Why would Nintendo target apps that do the exact same thing as a half-dozen fansites, which they’ve never attacked before? (To be fair, TPC has attacked fansites in the past, but only for small portions of the content they publish.)

I’m not arguing that Nintendo doesn’t have the right to act in this way. They can do pretty much whatever they want with their own intellectual property. IP law, taken to its logical conclusion, means that they can prohibit me from whistling the Pokémon theme song as I walk down the street, for instance. This is kind of a silly example, but I’m just pointing out that determining IP infringement is not clear-cut. For this reason, most companies choose to act judiciously when they enforce IP, because too much enforcement could be dismissed by the courts or cause a backlash from fans. They have to find a middle ground.

And in the case of Pokédroid, IP enforcement seemed to me like a clear lose-lose for Nintendo. If there are no mobile Pokédex apps, then that seriously reduces the value of every Pokémon game that Nintendo publishes. Gamers love strategy guides because they increase their enjoyment of the games. Imagine if a resource like Bulbapedia were taken down – so much of the fun of playing Pokémon games would be sucked out of them! And it’s the same with mobile apps. Undoubtedly, taking down mobile Pokédex apps would cause fewer people to buy Pokémon games in the future, and Nintendo/TPC would suffer. They might sell more $10 strategy guides, but they’d sell fewer $30 games. They’d lose money.

Alternatively, TPC may be thinking of releasing their own app, which would explain why they’d want to eliminate competitors. But even that reduces quality for consumers. Undoubtedly TPC would release one monolithic app with a limited feature set, and if some fans wanted different features or a different presentation, then tough luck. With a lot of competing apps, though, choice is increased for consumers and everyone’s more likely to get what they want. This was already happening with “Poké Pal,” which was an app geared more towards serious, competitive players than my own. It was a free app, and it excelled in its own way, while Pokédroid excelled in other ways. Consumers could download one, the other, or both. Everybody wins.

I sort of doubt that TPC or Nintendo will release their own app, though. If anything, the author of this email seems to be suggesting that Nintendo is deliberately leaving a “gap” in the Android Market, and that I need to respect their decision to keep it that way. Similar to when Nintendo shut down that fan-made Zelda movie, or when Square Enix shut down the fan-made Chrono Trigger sequel, no replacement is intended. IP enforcement can be somewhat mindless in its destruction. I like to picture it as a grumpy old coot, waving his cane at those pesky neighbor kids when they’re having too much fun on his front lawn.

So at this point, reading the email, I kind of glumly realized that the game was lost. There was probably no way to convince TPC to take back the original DMCA notice. I felt a little frustrated that I had provoked them in the first place, since, if I had just done nothing, Pokédroid might have stayed on the Market awhile longer while they shuffled their paperwork around. But by buzzing in his ear, I had invited the giant to swat me down. It seemed there was nothing left for me to do but bow to their demands.

I wanted a little more clarification about their motivations, though, and I also hoped I could make an emotional appeal for them to reconsider. So I wrote the following:

Hi Name omitted,

Thank you so much for your response. I really appreciate you taking time out of your day to help explain these kinds of issues to me, especially since (as a layman) legal matters are obviously not my area of expertise.

I think I have a better understanding now of what is meant by “fair use.” I understand that TPCi has complete legal right to their intellectual property, and that therefore any third-party use of that IP is considered to be infringement until proven otherwise. Also, I’m perfectly willing to take down Pokédroid and Pokédroid Extras from the Android Market and not upload them anywhere else, per your request. In case you were wondering, the reason it’s still on the Market is because Google did not take it down themselves, probably due to an oversight on their part. I was confused about the situation, and so I left it up until I could get word back from your company.

I have to admit, though, that I’m surprised by TPCi’s decision, and I’m hoping you could tell me a little more about the motivations behind it. Specifically, why Android apps? To my knowledge there are about a dozen Pokédex apps for iPhone, and many of those are even paid apps. There are also popular web sites such as Bulbapedia and Serebii.net that offer similar content. Does TPCi plan on removing those sites and apps as well, or is there a specific reason that Android apps are being focused on? I’m not asking this in order to play “gotcha,” or to make some kind of “two wrongs make a right” argument; I’m honestly just trying to understand TPCi’s position on this issue. After having put several hundred hours into developing this app, I think it’s reasonable for me to want to know a little more about your company’s decision before shutting it down for good.

Also, I realize it’s sort of a “children’s letters to Santa Claus” argument that doesn’t carry much legal weight, but I do hope you’ll read some of the reviews for Pokédroid: https://market.android.com/details?id=com.nolanlawson.pokedex. Ever since I mentioned that the app might be taken down, there have been lots of comments expressing sadness and frustration over the news. Pokédroid has over 420,000 users, and it honestly saddens me to think about taking away what is obviously such a valuable resource for them.

Thank you again for your legal advice and courtesy towards me. I hope you know that, as a longtime Pokémon fan, I offer TPCi the same courtesy and will bow to any of its wishes regarding its own IP. But I also hope that TPCi will consider alternative solutions to this problem.

Nolan Lawson

The next day, I received the following response:

Nolan:

Not a problem to respond, and thanks also to you for your reply. It’s certainly not unreasonable for you to ask for a bit more background. Unfortunately and as you can probably imagine I can’t really discuss the specifics of other situations or other apps, except to note that we’ve sent a fair number of notices recently, will be sending some more, and if there are people out there who aren’t as great about this as you have been they may receive a slightly different form of communication from me. But you shouldn’t feel singled-out at all, and it’s not just Android apps. Apple has a slightly different approach to these kinds of things than Google does and so their process takes a bit longer to operate, for example.

Thanks again for your reply and for your understanding here.

Name omitted

He’s obviously not letting on very much here. He isn’t recognizing the contradiction in targeting Pokédroid while leaving Bulbapedia and Serebii up, and he doesn’t really explain why TPC has suddenly decided to go after mobile apps. The evasiveness of his answer was kind of a letdown for me, although I can understand why the legal team would want to keep mum about such things.

He’s also being very diplomatic about all this, which I appreciate. But I do detect a sort of “good cop” routine going on here (“as great as you,” “how skilled you are”), with the thinly veiled threat of the “bad cop” waiting in the other room in case I don’t play ball (“a slightly different form of communication”). He’s left little room for debate – the impetus is clearly on me to either follow directions or face the consequences. No response to my heartfelt Miracle on 34th Street reference, and no response to my suggestion to seek alternative solutions. I suppose I naïvely thought he might be touched by all the user comments, but it seems not.

So that’s pretty much the whole score. Nintendo: 1; me: 0. I wish I had the courage to fight this battle, but I searched my soul and came up empty. It just doesn’t seem worth it to me to stick out my neck and try to stop Nintendo from attacking their own customers. Also, I could do more harm than good if I continue this line of argument with them. I was worried enough that, when I mentioned Bulbapedia and Serebii, the lawyer might respond, “Hmm, shut down Bulbapedia and Serebii? Not a bad idea.” At a time when TPC’s legal team is clearly on the rampage, the last thing I need to do is draw attention to myself or anybody else. It’s like the T-Rex in Jurassic Park – stand still, and he might just leave you alone.

On a personal level, though, I’m deeply disappointed with this whole result. Although I haven’t been the most dedicated Pokémon fan (I tried but couldn’t really get into the newer games), I’ve poured my heart and soul into Pokédroid. In terms of Android app development, it’s my magnum opus. I put deliberate care into every inch of the interface, every function call in the code, every UI design decision.

Pokédroid might not look pretty (I don’t have an eye for design), but there are little touches that improve the experience in ways the user might not even perceive. For instance, the buttons’ “onClick” methods load in the background, so that the UI doesn’t slow down. The voice search uses string edit distance to try to find approximate matches. The moves and locations use dropdown lists, because I wanted to keep the interface clean and uncluttered. The “advanced search” uses optimized SQL indexes for the fastest possible searching.

All of these are things I put time and effort into, to please my 400,000+ users. I’ve spent hundreds of hours trying to improve Pokédroid, which, even with all my donations considered, was done at below a minimum-wage rate. And yet, I don’t regret any of it, because (and I’m going to get a little mushy here) I know Pokédroid has brought a little ray of sunshine to so many people’s lives. As of today, it’s in the top 50 free apps in the “Entertainment” category, it has a perfect 5-star rating, and it has hundreds of comments from satisfied users, all expressing how much joy, delight, and amusement Pokédroid has brought to them.

To say that this gives me the warm and fuzzies would be an understatement. In fact, Pokédroid was a great psychological boon to me, as I left the safety of college and entered into full “quarter-life crisis” mode. I wondered: What was my contribution to the world? What had I done to justify my existence? With Pokédroid, I could always point to it and say, “Right there. 400,000 people who got a kick out of my app. 400,000 people who reminisced about the cartoon show, looked up stats for their competitive team, or just giggled at the silly text-to-speech feature. 400,000 smiles. That’s what I’ve done for the world.”

I’d like to close this article with some of my favorite reviews from the Android Market. The fans are the reason I kept working at Pokédroid, and they’re the ones who gave me feedback and criticisms that helped me fix bugs, retool the user experience, and correct glaring flaws. I want to thank them for giving me a really cool project to work on for the past year, and for giving me lots of insights into application development. Thank you all.

  • this is the most amazing app i have ever seen, ive always dreamed of having a dex on my phone. i love you man<3 – Jonesyruless
  • Now i can trump my kids with my mad pokemon knowledge – Lisa
  • Kids love the talking pokedroid. Its a must have for any Pokemon fan! 5 stars – Ash
  • Is super great and I would buy the donate version but my mom said no haha but as soon as im off her plan I will if I still play Pokemon – Steven
  • I am donating asap. And I NEVER donate. Not to the homeless, friends in need of a buck for gas, never! – Philippe
  • Love it! Showed it to my office mate and we started getting all nostalgic – Lumpy
  • Why I bought Android – Nick
  • My 5 yo daughter loves this. – Eric
  • This app has amazing info, and the voice is hilarious! – Sean
  • I was out in the wild and a pokemon appeared. My friend asked me what it was but i didnt know. So i took out my Pokédroid and identified it! – Dal
  • I absolutely LOVE this app! My friends have become jealous and they want an android phone JUST for this app! Genius! ^_^ – Abigail
  • Incredible! This app has single handedly justified my Droid purchase. Please add egg moves! – |3reak
  • Thank you Thank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank youThank – Wonton
  • This is well cool. My friend’s all want android phone’s just for this app. :-) – Max
  • My daughter loves this app. Just like a pokedex from the cartoons! – Jessica
  • My son loves this keeps him occupied for ages – Lorna
  • Wow, this is simply awesome, no words to describe.. it just feels very special for some reason!.. thank you! =] – Cloud
  • I bought a Droid for this app! I love it. Keep up the good work. – Timothy
  • A real Pokedex? I love the future. – Craig
  • Would give it 1000 stars if I could, what an elaborately designed app. Thank you for sharing for free! – Zach
  • I use this pokedex on the regular. Helps with all versions. I am in college and I still use it to settle disputes. Great app. A+ – Dietrich
  • Fantastic! Work at gamestop and this app has gotten me some sales haha def donating. Game specifucations would be nice tho – Victoriano
  • I cant imagine playing the games w/out this app. I use it whenever i am in battle to help me choose what pokemon to use. Cant wait for b and w update. – Cameron
  • Being a programmer it takes alot to get 5 stars but he earned this – Jonathan
  • Awesome! My kid loves the black & white update. Really useful, and free! – Paul
  • Good resource! Great for keeping up with my 7 year old daughter ^^ – Midd
  • This is the best Pokédex app that is out there. It makes me feel like I’m part of the show. – Kohaku
  • Since the moment I downloaded this months ago I’ve loved it. The latest update makes the interface lightning fast and pretty much flawless. – Daenym
  • Thanks for B/W update! Scrolling is PERFECT now!!! Thank you for voluntarily working to satisfy such a prissy bunch of people! – Sidney
  • Perfect app for a beginner or veteran. Now I can stop getting on the PC to look up new Pokemon I haven’t heard of! – Frogmum
  • Best app on my phone – Tom
  • Childhood dream come true… enough said – Kevin
  • Not only is it a great app but the customer support is tops as well – Christopher
  • This has got to be the funnest/greatest app ever!! Absolutely in love w/ it! – Denise
  • So convenient! Considering that bulbapedia is down half the time! – Kathy
  • Best thing ever – Daniel
  • I love this app! Easy reference to help me train my pokémon in the best way possible! Plus getting to freak out my friends w/ random pokémon cries! – Bryan
  • 10 out of 10!!!!!! This is by far the most comprehensive pokedex I have ever seen. Fast, easy to use. Settings for different versions (Great for when I play Black and by daughter plays Platinum). Consistent updates. If you have not already downloaded this and the extras bundle… then you are dumber then a Magikarp! – Wayne

Nintendo used Takedown! It’s super effective!

UPDATE: I was in error when I wrote this post. Apparently, all Pokémon-related Android apps were cited in the DMCA takedown notice, not just paid ones. Every Pokédex app has been removed by Google except for Pokédroid and Pokédex Companion. It’s not clear why.


Today I received an email from Google explaining that Pokédroid Donate was removed from the Android Market due to a DMCA takedown notice from The Pokémon Company (a subsidiary of Nintendo). The email begins:

This is a notification that the application, Pokédroid (Donate) with package ID com.nolanlawson.pokedex.donate has been removed from Android Market due to a violation of the Developer Content Policy. Please review the Content Policies and Business and Program Policies before you create or upload additional applications. Note that repeated violations may result in a suspension of your Android Market Publisher account.

Mine wasn’t the only app removed – in total, about a dozen Pokémon-related apps were cited in the DMCA notice. These include “Poké Pal Donate,” “Pokédex,” and “Who’s That Pokémon?”, among others. Apparently only paid apps were targeted; the free versions of Pokédroid and Poké Pal, for instance, were not mentioned.

In response, I made an update to Pokédroid and added the following text at the beginning:

Google has removed Pokédroid Donate from the Android Market, due to a copyright claim by The Pokémon Company. In fact, all paid Pokédex apps (Poké Pal Donate, Pokédex) were removed. Free apps were not affected.

In response, I am adding the shiny sprites to Pokédroid for free. To the people who already paid for Pokédroid Donate, I apologize for the sudden bait-and-switch. So you won’t feel like you wasted your money, I am hereby donating all proceeds from the month of May (about $150) to Doctors Without Borders.

I disagree strongly with what The Pokémon Company is doing. It hurts Pokémon fans the most, because they are the ones who benefit from having a variety of apps on the Market. Also, the apps don’t even threaten Nintendo’s bottom line, because they’re strategy guides and not competing games. However, there isn’t much I can do, because Nintendo is a powerful company and I’m just one guy.

Please keep in mind that your donations sustain my interest in developing this app. You can still donate via PayPal at my website: nolanlawson.com/donate.

Thank you for using Pokédroid, and stay tuned for more updates! I have some very cool features in the works, and I will try to get them to you despite these legal hurdles.

– Nolan

And for the “pics or it didn’t happen” crowd:

Mostly what I’m doing here is damage control. Nintendo has backed me into a corner, and I’m too sheepish to fight back. So I’m just doing what I assume they want me to do – make Pokédroid 100% pro bono. But since this will irritate people who already bought Pokédroid Donate (and who are therefore my best and most enthusiastic users), I’m also doing the donation as a show of good faith.

This is my own, somewhat cowardly reaction to the news. I’m not sure what other app developers will do. I’m in contact with Stephen Willey, the developer of Pokédex, and Khiry Arnold, the developer of Poké Pal, but neither seems to have decided what their strategy will be. Admittedly, we’re all in a bad predicament. I feel especially sorry for Khiry, because he had just started doing a freemium model like me, and his app was really spectacular in terms of depth and detail.

Of course, none of these deleted apps really violate fair use, insofar as they might compete with Nintendo’s core product. There’s nothing about a strategy guide or a silly “Who’s that Pokémon?” quiz that diminishes anybody’s desire to go out and buy the next Pokémon game. If anything, these apps actually increase interest in the product, because they add value for current Nintendo customers and encourage them to learn more about Pokémon. And if nothing else, they’re free advertising.

But this is the tragedy of current copyright law. Presumably, Nintendo took out its copyrights to protect against blatant infringements, like game piracy. But here instead it’s using its IP to attack the Pokémon fan-developer community, at great cost to its customers and, indirectly, to itself. To be fair, though, none of this is really Nintendo’s fault. They’re just operating within the mad logic of a broken system.

People who know me personally know that I am very skeptical of copyright law and intellectual property in general. I tend to view patents and copyrights as government-enforced monopolies that drive up prices, reduce choices for consumers, waste money on litigation, and stifle more innovation than they spur. For your own interest, and to challenge any assumptions you may have about IP, I recommend reading these articles: here,
here, and here.