Category Archives: Development

Tips and tricks for developers, especially on Android.

Android Rating Ranges

As a developer with a variety of apps in the store my ratings are super important to me.  But even more important than the actual ratings of my apps are the perceived ratings of my apps.  What exactly do I mean?  Well I think this comic by Randall Munroe sums it up best:


Quite frankly that little sliver of pixels can make a huge difference.  Especially the jump from 3.5 stars to 4.0 stars.  But one of the things I’ve always found interesting is what ‘3.5 stars’ actually means.  Where exactly is the cutoff?  Does 3.5 stars mean 3.5 or lower?  Or does it mean the closest star value (3.25 to 3.75)?  Or does it mean something completely different?

Well it turns out it isn’t really straightforward to answer this question for two big reasons:

1) Stars are different in different locations.  The web shows stars different than the app, and at times different pages have showed them different as well.

Here’s Goofy glass on mobile with 4.5 stars on the left, and 4.0 stars on the right (web).

Goofy Overview Mobile Goofy Overview Web

2) The metric changes from time to time.  Users probably never notice, but what a 4.0 app is today, isn’t necessarily what it was yesterday.

The Old Metric

What was the old metric?  Well it was actually relatively simple compared to how it works now.  The old rule was simple, round to the nearest half star.  So for instance:

4.75 – 5.0   = 5 stars
4.25 – 4.75 = 4.5 stars
3.75 – 4.25 = 4 stars.
And so on…

This meant that from a realistic perspective most of my apps fit into the 4-star rating.  My voice changers (notoriously low rated) fit into the 3.5 stars, and Goofy Glass at one point broke into 4.5 stars.

Then one day tons more reviews started rolling in.  In fact I started getting as many as 5x to 10x more reviews.  What had changed?  The Play Store started prompting users to rate apps with the promise of providing similar apps the user would love.  This had two side effects:  1) Lot’s more ratings were showing up on apps.  2) The ratings were generally lower (though arguably more accurate).  Users often just uninstall an uninteresting app, but now were being prompted for a rating.  They also were asked a slightly different question…  Instead of: “What should this app be rated?” it was: “Would you like us to find apps similar to this one?”  And that question effects ratings significantly.

Screen Shot 2015-01-11 at 9.54.39 PM
Goofy Glass (Used to show a 4.3)


My apps all took a dive after that.  Goofy Glass which had been trending upward for the past few months, started dipping without any indication as to why.  And even worse, the ‘recommendation’ reviews don’t come with comments, so no valid feedback comes through to help improve the app, if they ran into issues, or what they’d like to see to win them back.

The New Metric (Mobile)

I’m guessing Google noticed the dip in ratings.  And since then they’ve played with a few different displays.  The most recent one is particularly interesting.  They’ve effectively gotten ride of whole stars in favor of half-star ratings.  The new ratings are as follows:

5.00 = 5.0 stars
4.01 – 4.99 = 4.5 stars
4.00 = 4 stars (Must be exactly 4.0)
3.01 – 3.99 = 3.5 stars

In my opinion this is really weird.  That means that my painting app, which has generally favorable reviews gets lumped with my voice changers, which have pretty bad reviews.  And if you take a look at the difference in graphs… you’ll notice they really don’t seem to fit into the same category.  Palette Painter (with a 3.9 review) seems to have tons of fans with just a few haters.  While Funny Voice Changer has almost as many haters and fans.  Yet, they both show up with a 3.5 star rating to anyone looking.

2015-02-18 22.44.00 2015-02-18 22.18.58

Now admittedly they’ve also made it easier to see the exact number (see the 3.9) on the app page itself.  But of course that is after they click on the app, and if you are like me… 3.5 stars apps just aren’t worth my time (while a 4.0 star app often is).

2015-02-18 22.52.30

The New Metric (Web)

The web on the other hand does something completely different.  They fill in stars as a percentage of the full star.  What that means (in theory) is that if you had a 4.1 star rating it would show up with 10% of the last star filled.

I actually like idea if it can be implemented correctly.  The only problem I see with the current iteration is that the percentage stars don’t start on the left and right side of the star.  They actually start in the space between.  What this effectively means is a 4.2 star looks identical to a 4.0 star and a 3.9 star.  While a 3.3 has a little tiny bit of a sliver being drawn in.

Palette Painter
Palette Painter
Spot the Animals
Spot the Animals
Scary Voice Changer Pro
Scary Voice Changer Pro
Scary Voice Changer
Scary Voice Changer – Hey look: A sliver!

Effectively this means that the difference form web to mobile can be a full visual star.  Anyway, I don’t know if anyone else has noticed these weird ratings.  And I’d be really curious to hear the reasonings behind them, but I just thought I’d call them as I see them.



Honest Development

Through my years of development I have always strived to be an honest developer. I want my users to have a good experience. I want to build fun, new, exciting, polished apps. And I want to play by the rules…

But not everybody plays by the rules.

Animal Game

When I released Spot Animals a few months back I was very disappointed that I could not even find my app in the store by name.  Or by any other combination of search terms, no matter how much I scrolled down.  Trust me, after lots of development, nothing is worse.  Here’s me searching for it by name.

Originally called ‘Hidden Objects Animals’

Screen Shot 2014-04-23 at 2.51.02 PM

While searching for my app I came across a variety of other apps that were high in the ranks, but seemingly poorly built. I was on a quest to figure out why.  Admittedly, many of the apps were generally high quality, and had a lot of downloads to help them keep their high ranking.  After searching for a while I came across this app:

Screen Shot 2014-04-23 at 2.49.07 PM

Now, I’m not going say whether this app deserves its ranking or not, I didn’t download or play it. But as I was scouring their reviews I found a really disconcerting trend.  Let’s see how fast you can see the trend…

Screen Shot 2014-04-23 at 2.48.59 PM

Screen Shot 2014-04-23 at 2.48.46 PM

Screen Shot 2014-04-23 at 2.48.34 PM

I think I can sum up all the above with “Cute cute cute cute cute”. I found page after page of ratings that had exactly the same rating… some number of Cute’s and a high 4 or 5-star rating.

Now it is possible that there are simply a ton of people that just find this app unbearably cute.  But more than likely these were purchased reviews.  Almost none of the reviewers have thumbnails, and they all look awfully similar.  The chances of this being the case sounds particularly low to me.  This really got me wondering… How many apps simply cheat their way to the top?


I’m not certain how many apps do this, but I assume it must be a lot. Since my apps are on the store I am required to provide a public facing email that users can contact me at. Sadly, about half of emails I get are advertisements. And of those there are two main categories. The first are advertising networks:  Our ads will make you way more money! But a close second is: We’ll get you more ratings/downloads.  Here is an example of one such email:

Screen Shot 2014-12-07 at 4.02.51 PM


Now, I’m not sure how well Google is able to crack down on this, but it actually sounds like an incredible difficult thing to do.  It is a short step from encouraging 100 of your friends to download your app, to paying a 100 of your friends to download and rate it 5-stars.  How does Google distinguish the difference between the two without seeing the money transfer?  I’m not really sure they can.

So if I’m receiving this many requests there must merit behind it.  Which makes me believe the number of apps using this method of deception isn’t small.


So is it tempting to use this with my apps?  Of course!  There’s always that desire boost ones downloads and ratings, who wouldn’t want that?  And there’s always the question of: “If I get the ball rolling, how big could it become?”.

But I got into app development because it is fun.  And I refuse to let the illusion of grandeur dissuade me from doing what I love, and doing it in a way is honest and true to my values.  And of course the fear of getting my apps kicked off the store is always there too.

Anyway, I’m curious if anyone else has seen this kind of trend elsewhere, and what other developers feel about it.  Is there anything honest apps can do to combat it?

Note: Since it has been months since I originally released “Spot!”.  I wondered how it fares now.  The good news is, it is showing up just fine in the rankings, and interestingly enough the other app isn’t in that list anymore.  Who knows the magic behind the store ranking, but one thing is for sure, just because you have a certain rank (or don’t) doesn’t guarantee you’ll stay there.

Screen Shot 2014-12-07 at 3.52.35 PM

Battling the Media Framework

Screen Shot 2014-11-15 at 9.32.15 PM

Earlier this year I gave a presentation titled Battling the Media Framework.  I’ve had a lot of bitter-sweet experience dealing with Android’s media framework.  I’ve had experience with camera & OpenGL via Goofy Glass, mic & audio with my voice changers, and a healthy amount of video at both Sorenson Communications and currently with HireVue.

The short and skinny of it is: “These API’s on Android are super hard”.  My goal with each of those apps has been to support as many devices as possible with the best experience possible.  With over 7000 devices, it hasn’t always been easy.

For some practical tips on how to deal with the shortcomings of those API’s feel free to check out my slides here.

Android TV Presentation


I recently gave a presentation regarding Android TV for the Google Developers Group in Utah.  All in all I am very impressed with Android TV.  Google has learned a lot of lessons as they’ve attempted this with Google TV, Nexus Q, and the Chromecast.  This iteration finally gets the experience right.

I also was impressed how easy it was to port existing code to Android TV.  I attempted to port HireVue Pro, and it turned out gorgeous and simple to use.  I really hope these TV’s garner the attention of developers, because it really could finally change the outdated TV experience.

Here’s to hoping.

The entire presentation (minus one video which wouldn’t upload) can be found here.


Camera Design Decisions

A couple years ago I released one of my favorite apps, Goofy Glass.  Since that initial release I have pushed out many updates.  Along the way I have come across a variety of difficult design decisions.  This latest release has been especially difficult, and so I’ve decided to recap the tradeoffs I made.

Initial Design

Two years ago the initial design of Goofy Glass was based on Android’s open source camera.  They locked the phone into a single orientation, and then handle “orientation changes” by monitoring the sensor and simply rotating all the elements on the screen manually.


While this isn’t a very common design, it is actually a really smooth experience for a camera.  There are three things that makes this nice:

  1. It is fast.  Since the layout doesn’t change none of the surfaces or the camera have to be reinitialized.
  2. It makes taking pictures easy.  It allows you to take photos with your left or right hand, from the top or bottom.
  3. It makes things simple.  With only one orientation to worry about, there is a lot less design to worry about.

The Challenges

This was great, and I loved having in my app.  But over the last couple of years I’ve noticed some really big drawbacks to using this method.

device-2014-11-03-213857Rotating buttons
In order for this method to work everything has to be rotated manually.  Initially this was simply buttons, so with a little code abstraction that was easy.  But in order for this to work everything I ended up needing to rotate fragments, dialogs, action bar and event toast messages.  And rotating some of these items required creativity and sometimes a worse layout.  For instance, fragments all had to be perfectly square so they could rotate correctly.

Problems with ads
One of the biggest problems has been with ads.  For some reason still unknown to me, rotating ads causes all sorts of problems.  On some devices they don’t show, on others they only show only if you add background to them.  They get copped funky if you’re not careful, and the full page ads always show up toward the forced orientation.  Goofy Glass actually has my lowest performing ads of all my apps, and this is one of the big reasons why.

device-2014-11-03-213305Confusion w/ Software Buttons
On a phone with hardware buttons it is easy to miss this.  Even on a phone with software buttons you probably won’t notice, since phones tend to lock the software buttons toward the ‘bottom’ of the screen.  But on a 7″ tablet it is glaringly obvious.  Most people use the 7 in portrait by default.  When the app is locked in landscape, and the user is in portrait, the home button is on the left side of the screen, which is ugly and hard to find.

Face detection woes (other filters)
And last, but not least, it was really cramping my style.  Every filter I built I had to worry about rotations, and the impact it would have.  For most filters, this isn’t too terrible.  But I’ve had plans to add face tracking to the app for a while, and it was getting complicated fast.  Most of the programming for it is done, but finding a rotated face and rotating the effect to match the face was proving to be quite painful.

The Solution

device-2014-11-03-215315I finally decided the cost of this design was too high.  So in this latest update I decided to finally break it apart.  And wow, did it turn out to be a lot of work, much of the work was simply a process of undoing what was already in.  The interesting thing is apparently the Google team had the same problems, because their latest updates don’t lock the orientation anymore either.

I will admit I’m going to miss those smooth animations.  Design is almost never straightforward.  And contrary to popular belief no single design will win, there will always be tradeoffs in the decisions we make.

Google Play No Longer Loves Indie Developers

Both the Google Play Store and the Apple App Store were built on the backs of independent developers.  The platform was wonderful!  People could easily find exactly the apps they were looking for, and developers could finally reach out to niche markets.  The pay for developers was reasonable, and the cost for users was much cheaper than traditional software.  Life was great.

But not anymore.  Let me share a couple experiences…

unnamedOver two years ago I released my second app to the Play Store, Funny Voice Changer.  My first app, Palette Painter, had a really slow launch, after all it only supported Android 3.0 on launch day which had less than 1% of the market (though it supports 2.2+ now, and is still going strong).  I expected the same slow response with Funny Voice Changer, so I clicked Publish and went on vacation.  Boy was I wrong.

Funny Voice Changer exploded overnight.  It was getting thousands of downloads a day.  In fact, it was too many.  I wasn’t ready for the barrage of ratings, the bugs it encountered, and the emotional roller coaster that ensued.  I gave up on the app after just a couple of months, something I have regretted ever since.

unnamed1I have since learned about the importance of iteration, and finally decided to fix those two apps, and remove that regret from my shoulders.  Yesterday, I finally released the refreshed versions, Funny Voice Changer 2.0 and Scary Voice Changer 2.0.

So how is the launch going so far?  Try a little experiment for me, go to the play store and search for Funny Voice Changer or better yet, use the name exactly Funny Voice Changer 2.0.  Do you see it?  If you don’t, that’s because it is ranked #124 for the first, and #88 for the second.  That’s right you can’t even find your own apps by name anymore.  Note: You will see my Voice Changers from 2.5 years ago in the 1st and 4th places.  You won’t find my new voice changers.

You can’t even find your own apps by name anymore.

Perhaps this is a one time thing?  (Well two technically, since there are two voice changers)  But the same thing happened to me just a couple weeks ago.  I released a fun Hidden Animals game.  My son loves it, and I’m certain other kids would as well.  But the day of the launch I couldn’t find it.  Even searching by the exact name it didn’t show up at all, not in any page, in any search I tried.  I have since tweaked the name and description a bit and have gotten it to show up at about the same 100th place on the search, but not exactly a searchable spot.


So how are they ranking apps via search?  Nobody knows.  Which is probably for the best, otherwise people would game the system.  It is obvious that the title and description don’t help as much as they once did.  So perhaps there is a variety of good reasons they’ve done so, right?  After all,the goal is to provide people with the best apps possible.  So what factors could they be using to rank apps?

Here are a few ideas along with some comments:

– Ratings.  This actually seems like a fairly reasonable way to organize apps.  But I have my doubts that it actually has much of an effect.  After all my previous Funny Voice Changer is ranked #1 and it has a miserable 3.3 star rating.  But worse, even some 1-star apps are showing up higher than my new apps, and these are apps that people obviously don’t want.

Screen Shot 2014-04-25 at 11.28.46 AM

– True intent.  A user types in “Funny Voice Changer”, but is really interested in any voice recorder out there.  This has a grain of salt to it, we don’t always know exactly what we are looking for.  Though I believe people are generally pretty good at it… but if they are looking for a funny voice changer it doesn’t make much sense to show a face changer.  That having been said, there are a *lot* of voice changers, so I do applaud Google for trying to parse it into something reasonable (assuming the results are reasonable).

– Number downloads.  Once again it makes sense that if an app is downloaded a lot it must be loved.  Though I do argue this should be weighted by how well people *liked* the app after they downloaded it.  For instance, even though this app has 100,000 – 500,000 downloads, something tells me that if you download it, you won’t like it.  This method of course helps either apps that have been in the store for a long time (regardless of worth), and developers with large pockets who can advertise to get a lot of downloads quickly.

Screen Shot 2014-04-25 at 11.27.47 AM

– App awesomeness.  I think this is a great metric, but how do you calculate this?  The only way I can think would be how pleasing the screenshots, title, description, ect are.  I would love to believe that they’re doing crunching on these to calculate an awesome score, but seeing apps like this and this make me believe they aren’t.

– App life – I’ve heard some people say that uninstalls have a huge impact on your ranking.  That makes a fair bit of sense, and I hope it is something they are doing.  On the other side of things, not all lifecycles are the same.  While some apps like Facebook you may keep on for the long haul, there are apps that may be perfect for an occasion.  Mine are great for sleepovers, others are great for weddings, and others for travel.  But you still should be able to find those apps if you’re in the moment.

– External links/Google magic.  This seems the most reasonable idea.  But it also tends to benefit those with large pockets.  Do you want lots of reviews of your app?  Do you want press releases?  Then open up your checkbook, because nothing is free.  And that’s assuming  your SEO efforts even pay off, it is very likely they won’t.

I don’t know how their ranking algorithm works.  But it is clear to me that as an indie developer it is no longer worth it to invest my time into building creative apps for the Play Store.

I’d love to hear your experiences on deploying to the store.  Has it been the same for you?

Android Superman

My work recently awarded me a t-shirt, it is a little tradition at HireVue that when somebody does has a great achievement they are recognized with a customized shirt.  Mine has a superman Android on the front, and on the back says:

12,000 Devices
30 Screen Sizes
8 OS Versions
No Problem

2014-03-04 20.19.31

2014-03-04 20.19.44

First of all, it is super great to be appreciated.  I know a shirt isn’t a big thing, but there is a certain geek cred that goes along with it.  HireVue appreciates their team members more than any other company I’ve worked for.  Not only do they do a fantastic job showing it, but they truly mean it when they show it.  I’ve worked for companies before where they ‘show’ you they appreciate you, but you don’t feel that appreciation from day to day, so you feel almost like they are trying to buy your love.

So what was the achievement?  Quite simply, I took an app with a 2.6 star rating, and bumped it up to a 4-star rating after working there for a few months.

Which was a huge relief!

I almost didn’t switch jobs because of the rating.  I knew people there, and each of them absolutely loved their job.  We were in talks for multiple months before I finally took the dive.  But every time I looked into their company I saw a lackluster 2.6 star rating, and the number of downloads only in the 10,000 – 50,000 category.  I knew I would be in charge of a bad product, with less customers than most my other apps.  I wasn’t impressed.

In fact the only thing that got me over my apprehension was the freedom they were giving me to start a new Android app for managers.  But first before I could, I had to fix their candidate app.  I finally decided I was up to the challenge, and I’m very glad that I did.

So how did I take a 2.6 star app and turn it around?  Honestly there were only two things:

1. Quality

Android is a tricky beast.  It is even more difficult once you start dealing with audio and video.  There are tons of devices, and many little issues here and there.  It isn’t easy to get it right on all the devices, no matter what anyone will tell you.

But that doesn’t mean you can’t get it right.  There are a lot of really well supported apps, and a log of really great developers out there.  It just means you have to put extra care and effort into getting it right.

I spent the first two months at HireVue really hammering on the app on as many devices I could find.  I noticed a lot of strange procedures, and rewrote a lot of the code that did the video, network, and recording.  I spent time making sure everything was threadsafe, and wrote a number of automated tests that simulated some really bizarre usage.  Most importantly I didn’t stop looking until I could verify that there was absolutely no way we could fix certain issues (usually by pouring through Android’s open source code to verify the problem was there).

In short, I fixed the issues so we were confident we could run on the majority of devices on the market.

2. Ratings

I believe most people love the HireVue process.  But the ratings were really poor because of two reasons.

First, a candidate with a poor experience was super likely to let us know with a bad rating, we had ruined their interview and quite possibly their potential to get a job.  This is a big deal!  Of course, most of that was addressed with the quality.

Second, assuming a candidate had a great experience they were already exhausted.  An interview takes a lot of energy, and the last thing you want to do is then go rate the app you used to take it.  Beyond this, we already had a survey at the end, so we could judge our candidate experience, this made it further unlikely for candidates to rate as they gave their feedback once.  I had a imple idea.  What if we made the last survey question a call to rate.  A simple question: “Would you like to rate this app?”  Since they were already in survey mode, they were much more likely to give good feedback.

Both worked like a charm, our bad ratings nearly stopped, and our good ratings started coming in more frequently.

And now I can move on to build an amazing manager app from scratch.

Report finds iOS apps riskier than Android apps!

I recently read this article that states that iOS apps are riskier than Android apps.  I make a point of not trusting news articles…  I’m an Android developer, so I like hearing Android doing well.  And it would be easy to just rejoice that Android is awesome, but instead I decided to look a little deeper.

First, the PCWorld article itself But let’s face it, Android @ 83% vs iOS @ 91% hardly makes me feel good.  It is akin to saying, all your data is stolen 9 out of 10 times on iOS but only 8 out of 10 times on Android.  So… you’re telling me all my data is stolen?  Great.

Second, what does ‘risky’ even mean?  So I decided to pull down the report and take a look myself.  Here were the things they considered risky…

  • Location Tracking
  • Access Address Book
  • Access Calendar
  • Single Sign-On (via social network)
  • Identify User (UDID)
  • In-App Purchases
  • Ad Networks

Really? These are the scary ‘risky’ behavior you are basing things off of?  Some I would consider the price of wanting a free app (in-app purchases, ads).  While others may be considered features, depending on the app function (location, address, calendar, single sign-on).

My conclusion?  More FUD, carry on, there’s nothing to see here.

Advice From Three Years of Android Development


Three years ago I started my foray into Android development.  I had followed and played with Android off and on for a while before that, but that is when I started my first app that would eventually get published.  I’ve learned lot’s over the last three years.  Below are some of the lessons I wish I knew when I had started.

1) Iteration –

You will never get it right the first time.  There are so many factors to a really good app:
– Is it a good idea, will it resonate with people?
– Will it work on the huge variety of Android devices?
– Will it be found by potential customers that are looking for it?
– Will you make money off of it?
– Will your users take the time to rate it, write about it, and talk about it?

The fact of the matter is, if you are a single-person operation you can’t answer all those questions before you launch.  Worse yet, you’ll probably spend a lot of time thinking and stressing about them.  But, after you launch, answering those questions becomes a lot easier.  Users will quickly let you know which devices are broken.  You will also find out if it is well downloaded, enjoyed and rated.

The fear is that you’ll lose that first bump, that your app will be marred by bad reviews and never dig itself out of the hole it first started in.  But it turns out that those first days, weeks, even months aren’t really that important.  Your app’s growth will be slow and steady, and you’ll have plenty of time to fix those issues.  Even if your app is downloaded lots, it will tend to maintain that velocity and you’ll have plenty of time to overcome bad reviews and issues.

But only if you iterate.  If you let it sit, it will never get better.

2) Go small – 

Everyone says go big or go home.  This couldn’t be further from the truth as a single app developer.  The best apps are developed by large teams that contain artists, businessmen, designers, developers, and a whole lot of money.  You can not compete, no matter how hard to try.  But the app marketplace is full of customers, and that gives you an advantage that most domains don’t enjoy.  To date there are over a billion Android activations, so even if your app will only be found by 1 in a million, you are still looking at one thousand downloads.  And trust me, you can do much better than that.

The goal is to find a niche market, and build a super simple app.  Don’t add any extra features.  Don’t try to compete with the big kids.  Just keep it simple, well designed, and with a single purpose in mind.  You save time, but get to test the waters a little before investing a lot.  And if you plan to iterate it is easy to add more later, assuming it is well accepted.  Your customers know better what they want than you do, and when you give it to them they’ll be super pleased to have their voice heard.

3) Confide in experts –

No matter how good you are at one thing you are terrible at many others.  When I first started I assumed I could do it all myself.  I’m a great developer, I’ll let that part shine through, but I can also handle the art, music, and business side of things myself.  It turns out, I’m really bad at art.  I mean, my art may be passable in some circles, but the moment you see an experts art nothing else compares.

Don’t get me wrong, to some degree you’ll end up wearing all of the hats.  If you are a single-person operation with no money you don’t have any other choices.  But the moment you can defer your expertise to others.  And the moment you have money iterate with it.  Go find artists to redesign your apps, marketers to improve your listings, and even other developers to alleviate some of the workload.

Find what you are expert in, and focus on that piece.

4) Throw it away – 

Sometimes you will believe you have a great idea.  You will put time, effort, and hours into it.  And one day you’ll wake up and realize that it doesn’t jive.  Perhaps it isn’t a good idea after all.  Perhaps it is too much effort, or puts you in league with the big kids.  Perhaps the people you confided in didn’t follow through, or were as expert as you hoped.  Just throw it away.

It will be hard to do.  Because you’ll have invested so much time and effort into it that you will feel obligated to follow through.  But it turns out that the cost is much higher than the reward in those cases.  Familiarize yourself with the sunk costs principle, and try to recognize when your costs won’t be rewarded after all.

But the good news is, if you are planning to iterate, throwing away isn’t terrible.  You can throw away a piece and iterate over it again.  You can throw away an idea, and start a new one.  Throwing it away shouldn’t be looked at as a terrible idea, but rather a price you paid to improve the quality of your idea or app.  You paid it because you didn’t know the answer, but now that you do you can create a better version.

All in all I believe this experience has been overwhelmingly positive.  But I think if I would have known those four points from the beginning I would have stressed less and enjoyed more.


5) Be Patient

Of course you want your app to be successful.  And it will hurt when you only see a small number of download a day.  But those small numbers add up and will compound with time.

When I first release Palette Painter it was only getting 1 or 2 downloads a day.  That grew quite a bit as I iterated over and over.  But it capped out at about 300 downloads a day, a small number compared to many other apps, even many of my other apps.  Yet those 300 a day have slowly added up, and Palette Painter now has a grant total of 49,000 fairly active users.  While still small compared to my other apps it isn’t a tiny number.  And due to the nature of the app people spend more time in that app, and the revenue is just as high as my other more successful ones.

I almost gave up after Palette Painter.  But I now believe it is probably my most successful app so far.

ListView Customizations

ListView is one of the most useful Android layout classes, but customizing it can be tricky. Part of that is simply glossing over some of the nice features that are already included. It is easy to simply extend BaseAdapter; it is easy and takes care of most the abstract methods for you. But doing so may make you miss some of the nifty built-in features. Below are 3 features you may be missing out on.

1) Custom Types
It turns out that most really good looking ListView’s aren’t just a simple list. The items contain headers, sub-headers, different layouts for different children and so on. But if you extend BaseAdapter you lose all the ability to use custom types.

If you override:
public int getItemViewType(int position) {
return position % 4;

public int getViewTypeCount() {
return 4;

And like magic you have multiple types. The above simply iterates over each type, but real examples would have complex criteria for which type a position is. Then inside your getView simply inflate different layouts for each type and the ListView handles the data for you.

public int getView(int position View convertView, ViewGroup parent) {
int type = getItemViewType(position);
switch (...) {
case 0:
// Inflate type 0.
case 1:
// Inflate type 1.
return view;

2) Custom Separators
Next it may be useful to create custom dividers. But if you do this using items then your dividers will also be selectable. Another nifty method to override is isEnabled. By returning false the item will be visible, but will not be treated like an item but rather a divider.

public boolean getEnabled() {
return false;

public boolean areAllItemsEnabled() {
return false;

3) Setting Stable Ids
The main advantage of stable ideas is the ability to do multi-selection on an ListView, GridView or other View. As long as your ids are unique, you can easily enable this feature by overriding:
public boolean hasStableIds() {
return true;

So while it may seem convenient to simply override the BaseAdapter, don’t forget all the nifty features you may be missing out on!