Guru Session: Android Design Patterns (and tools!)

I already gave 2 Guru Sessions with Appsterdam, one Introduction to Android and one about Tools for Android Game Development. Since the last one was in March, it was about time to prepare a new one.

This time it is going to be about Android Design Patterns and Tools on Oct 20th.

Android Design Patterns is something I am very interested in. I think it is very important for a platform to have a personal look and feel, and that the apps in that platform actually DO follow that.

In Android we were left in our own for a while, the guidelines were brief and you had to implement them on your own. Since the release of Ice Cream Sandwich, there are much more clear guidelines and patterns, and Google even set up the Android Design site. Much better than the old guidelines.

The problem is that this design patterns can be applied on devices running ICS, but the tools are missing on the older versions and Gingerbread STILL has more than 50% of the chart. Take a look at the official charts if you don’t believe me.

So, we have tools and guidelines, but not available to older versions.

The solution is to use the android support library, which bring many of the features back to 1.6, and on top of that ActionBarSherlock, which is an amazing library written by Jake Wharton (only compatible up to 2.0 but should be enough)

The session will cover the most important patterns and how to configure the libraries to continue with a hands-on where the attendants can either do a small demo project to get to know the tools or migrate one of their existing apps to use this paradigms. Finishing with pizza and beer as usual.

Go to the meetup page of the Guru session to RSVP, be quick, there are few spots left already.

V Hack Android Recap

This weekend (15-16 September) the Dutch edition of “V Hack Android” event was held at Bouncespace in Amsterdam.

This event in particular was organized by the Dutch Android User Group, which made a great job at everything over the weekend, and co-organized by Appsterdam which helped with the location. Being an active member of both communities I was pretty much forced to attend it :)

The Team: Apps’R’Us

Each team was composed by 3 members. My partners for the weekend were Ronald van der Lingen, who I knew from the time I freelanced at Layar and is a very enthusiastic Android developer and Ron Jones, who I knew from some Appsterdam meetups and is a designer with lots of interest in mobile apps.

Since all the names start with R, the name of the team became Apps’R’Us, which turned out to be quite popular name when I searched it on the Internet after the Hackathon.

The Project: Appy Birthday

At the hackathon we were presented 4 topics (Birthday, NFC, Health and European Culture) and we were given time to brainstorm about it and pitch on Friday.

We tried to think of an idea that combined NFC and birthdays, but we could not come up with anything interesting. Then we went for Culture + Birthday and we were almost decided to make an app that showcases famous people that have a birthday today and what have they done, but then decided to change it completely.

The final idea is an App that shows you people that have installed the app that has the birthday today, and you can say “Appy Birthday” to them. The other person will receive a push notification and will be able to see all the people that send a birthday wish to them.

We really liked the idea of an act of kindness to random people that have Android phones as you do. We thought it fit the theme of the Android birthday and it was fun.

The Hackaton

I really liked that we cut it down to a Minimum Viable Product and that we could finish the basic functionality over the weekend. Appy Birthday is even published on Google Play, although it is a bit rough around the edges.

It was very nice to work with my teammates, both are people I knew but never had the chance to work closely with them.

Lots of work, but also fun and inspiring… and lots of unhealthy food over the weekend.

The Result

We ended up in second place, although the idea was fun and well executed, there was no way you could make a business plan out of it.

The winning project was “Food!” from Team Wasabi. It is an app where you can put your food preferences (what you like to eat and what you can’t eat) and when you are going to have a group meal you do a sync of all the people involved via NFC and get a common list of ingredients to decide over the menu.

Their demo was really awesome. Although I like our project and I am very happy with it, the way they implemented the idea was really cool and fun and they deserved the victory.

Well done Team Wasabi! Make us proud in London!

Thanks DutchAUG for making this possible!

The photos used on this entry and more photos of Geeks eating unhealthy food and working non-stop can be found at the official page of the event in Google Plus.

AppAffinity: Find apps you’ll love

The problem with visibility

Visibility is really a big issue on the mobile app industry, specially on Android. In other words: There is a lack of proper discovery mechanisms to find new apps.

As a developer you can minimize the impact of this by targeting a niche and then promote your app “outside” the app store. That works. But if you want to create something for the mass market -as a game- this issue is really important.

As a user you can rely on the featured section of Google Play, which, many times, will not be interesting for you. Alternatively you can browse all the 7 tabs of Google Play trying to find something interesting. Not very appealing, right? You can also follow some specialized blogs, which takes lots of time.

So, the lack of visibility on Android is a big issue, and that is what AppAffinity tries to address. Many people are working on solving this. Why is our solution better?

What is exactly AppAffinity?

AppAffinity is an app that recommends other apps.

Not just “any” apps. We believe Personalized Recommendations are the solution.

The apps you keep installed are the ones you really like and use, and we use them to generate a list of recommended apps. A personalized list for you.

We did not want to create yet another app store. We wanted to create a tool to help you discover new exciting apps. Think of AppAffinity as the “Recommended for you” tab you always missed on Google Play.

We believe that less is more, so AppAffinity does ONE thing: Show you a list of new apps recommended for you. And we focus on do it in a delightful and efficient way.

Excited about AppAffinity? Register for the beta on this page.

AppAffinity is a collaboration project of PlattySoft and LoopBit.

[AppCrafting] Design Vs Development

I say in one of my talks that development is not the most important part of making apps since design is at least at the same level. In this post I want to give some insights of what I mean. Let’s imagine that there is something I want to do with my phone and I check if there is an app for that.

Your first problem should be some sort of SEO equivalent: You want to appear high in the lists for the common related search terms. But lets imagine you have that sorted out.

The user has a problem, searches for a solution and finds two (or more) suitable options. Obviously people are going to install one first, and if that app works fine for them, they are very likely to stick with it and not even try the second one. They will only seek for a replacement if they are not completely happy with the initial choice.

The first choice

Which app will users install? The one they expect the most from. I don’t know how the decision is done for sure, but there are two important factors:

  • Average rating & number of ratings
  • Visual aspect

These two factors can combine in many ways, and that will depend of each user. This means that a not very good looking app with lots of good ratings has a chance of being installed and an app with gorgeous screenshots and few ratings has a chance as well.

Since the ratings are not under your reach, your safer bet is to attract users with a great design.

If the first choice they make looks pretty enough and works nice enough they are not going to bother trying other app, but what will happen when one of them is not sufficient?

The seek for a replacement

You may get more reviews if you were there first (a.k.a no other option) but if your app has a clumsy UI users will not be completely happy and from time to time they will look for an app with the same functionality but better looking. In this case the design is important to keep a leader position by not making people want to look for a replacement.

On the other hand, let’s imagine that you have the best looking app. You have a lot done. A bunch of people is going to install it based on the featured graphic, screenshots and so on, but here is when development comes into play.

A nice design is going to bring you users, but it is the functionality of the app which is going to keep them with it. Again, if your app looks pretty and works nice they are not going to bother trying other app, but what will happen if the app is slow, crashes, misbehaves or misses key features?

The delusional moment

What happens in that the app does not fit the expectations and then the users are going to be frustrated. It is very clear to me that two things will follow:

  • They are going to try the other app
  • They are going to give you bad ratings

A nice design puts high expectations (as a high rating does it as well) and if your screenshots put the stakes high and the development is not on par then the frustration is going to be much bigger.

A user that has an app that works and replaces it with other that is better looking will give a good review to the second one (he is not necessary frustrated), while a user that replaces a bad developed app with another one that works is more likely to leave a bad review on the first one. A frustrated user is very likely to give a 1 star rating.

People want apps that look nice and work fine, there are thresholds for both characteristics. But while in one case you may be giving a good review to a competitor, in the other you are risking a bad review to yourself. It is harder to frustrate a user with a mediocre design that works than with a nice design that fails.

And then the snowball effect of bad reviews will roll and the design will be more and more irrelevant in the decision process of being the first choice.

That’s why you should care a lot about the design, but never, ever, put development in a lower place.

Note: This post was inspired by the official Magic the Gathering(r) app and how it states to already existing apps such M:tG Tracker.

Tools for developing Android Games: The Slides

The session of yesterday co-organized by Appsterdam.rs and the Dutch Android User Group was a great success. We had over 20 people showing there, many of them told me that it was interesting and fun, and they also learned new stuff, so mission accomplished!

During the Hackaton we had quite some game ideas that were developed to a certain extent (we only had 5 hours). These projects even did a demo at the end:

  • A fast paced 2D scrolling combining tilting controls and jumping. We had a demo with the basic gameplay.
  • A Space flight simulator in 3D using the free NASA 3D models. We saw it working with touch, control it with the sensors was the next step.
  • 3D pong, it was almost working, all the scenery was there and displayed and the ball was moving.
  • 2D Real time strategy. They had the tiled map working and all the game logic implemented (but not displayed). They promised to finish it by next week.
  • 2D Billiard with fling controls. Almost completed, you had to hit the other 2 balls with yours, they you get the point.
And, as the title for the post says, here are the slides:

Latest talks: Microsoft GeekNight & Delft University

Over the past months I have given some talks. The last ones have been at Microsoft TechDays and Delf University. Very different environment and public.

On February 15th there were the Microsoft TechDays. There  I presented “The importance of Visibility” during the GeekNight. I am going to update that talk soon with the latest results from SpaceCat (and the levels of being featured) and probably change the title to “Fly or Die: App Visibility”

And on March 20th I have spoken at Delft University as part of the App Symposium presenting “The Road to Publishing”, trying to motivate students to build their own product.

And of course, this Saturday there is the Tools for developing Android Games.

Photo by Erik Romijn

Featured Levels on Android Market

I stated many times (like in this slides) that between being featured or not on Android Market (now Google Play) means to Fly or Die.

Previously, there were 2 levels of featured; each week new titles ware added and the oldest ones ware shifted out. First you were into the top list -appearing on the header- and into the featured list, that was sorted at random. After the first week you were pushed out of the top, and after one month you were pushed out also from the featured list. It looked like this when Chalk Ball was featured past year:

This changed with the update of Android Market that presents the apps as “tiles”. Now there is a main screen, then another one for most of the categories and, in the case of games, there is another one for the genre. After that you still can browse the normal lists. It looks like this now that SpaceCat is featured:

While I believe that Android Market has too many screens and lists to the point that is confusing to the users and many of these screens are too many clicks and swipes away that they are barely reached, that is not the topic of this post.

Today I want to talk about the stages in being featured inherent to this hierarchical structure. It goes from more to less. I have classified them according to Dragon Ball Saiyan states, to emphasize the power gap.

Featured in Home Screen: Super Saiyan 3

When new featured titles appear, they are usually put on the big banner of the web and also the main screen of the app. This is the first screen users see when they open the market and -I suspect- it has a huge impact.

Needless to say, when you are featured on the home page, you are also featured in the category and subcategories and you appear in the Staff Picks list.

Unfortunately I can’t give you figures about this because SpaceCat was featured directly under Games, but feel free to extrapolate the results from the other cases.

Featured in Category: Super Saiyan 2

This is the screen when users go to find something specific. Fortunately for us Games has an entry from the homepage and it is one of the most visited screens of all the market. SpaceCat was placed there for around 2 weeks, sometimes as a big banner, sometimes as a small one.

Being there we averaged 50k downloads per day. Mind you, SpaceCat is a Free to Play game, a paid app will have a lot less downloads -as we experienced with Chalk Ball-. Still, 50K downloads a day is totally massive. To put it in context SpaceCat had 50K downloads in total from the previous 6 months, including more than 10 blogs reviews, so yes: WOW.

Of course, during this time you are also listed on the subcategory and in the Staff Picks, which just adds to the number of downloads.

Once you had your time here, it is time for some fresh meat, so you will logically be pushed to be only in your subcategory and the staff picks list.

Featured in Subcategory: Super Saiyan Full Power

During this period we averaged 15k downloads a day. That is half what we got per day when Rabbit and Eggs (an Easter themed free game) was featured on the Main Page during Easter 2011.

The number of Android devices out there has grown a lot over the past year. With the figures of past Easter and now I can say that the number of potential users definitely has grown in the same proportion.

Then, after the standard month period, your app will be removed from the Staff Picks list, but will remain on the subcategory for a while longer. Thankfully there are more spots now on Android Market and you are not pushed completely out at that moment.

Featured in Subcategory: Super Saiyan

This was a bit surprising bit for me. When the app was pushed out of the Staff Picks, but still on the subcategory, we observed a drop to “just” 5k daily installs. I was expecting the importance of Staff Picks and subcategory to be the opposite.

Although that is just 10% of what we got on the first stage, it means a lot of downloads and as an indie developer I appreciate this slow decrease in popularity and downloads instead of the sharp drop we experienced a year ago with Chalk Ball.

Although 5k downloads a day sounds small when you come from being on the top, it is still a very good amount of downloads you are very unlikely to get from any other place.

Note: Platty Soft is the current company responsible for the games of The Pill Tree.

Guru Session: Tools for Android Game Development

On March 24th, I will be giving a guru session at Mediamatic Bank (Amsterdam) about tools to build games for Android. This session is organized partly by Appsterdam and partly by the Dutch Android User Group, that’s why we have half of the seats on the Appsterdam meetup page and the other half in the DutchAUG page

There are a few spots left, and I believe it is going to be an interesting one, so go and get one!

I will publish the slides on this blog once the session is done.

Abstract

When thinking about building a game for Android, one can write it from scratch. Or you can look for tools, libraries and engines that already exist so you don’t have to reinvent the wheel.

We did that at The Pill Tree for both Chalk Ball and Space Cat, both games have different requirements and the solutions we found were also different. In this session I will summarize the strong and weak points of AndEngine and jPCT-AE and the uses you can make of them.
I will also give a brief explanation of other libraries that are interesting, such as ScoreLoop / OpenFeint for scores and awards and give a short introduction to virtual currency and incentivated ads.
After the talk, I will provide the people with the samples of both engines and we will play around with them.

How to get into a good mess

Over the past weekend the online shop of SpaceCat stopped working.

That was the result of some unfortunate decisions and the fortunate situation of being featured. Anyway, that should have never happened, but I re-learned a few lessons.

Problem #1: The shop is our own implementation

I always defend to not reinvent the wheel, but in this case we did. Should we had used a 3rd system such TapJoy or ScoreLoop -which are already integrated-, this should have never happened, partly because their code is more tested, partly because it relies on their servers.

Why did we did it?

Because we wanted to have a shop that was not bounded to just Android Market to be able to distribute the game over other channels such as Amazon AppStore. We integrated PayPal for that. And we had to implement tracking of purchases per user, which is done for you when you use Android Market IAB .

ScoreLoop did not support it. We could have done it with TapJoy, but the initial release did not include that library, since this was originaly designed for Chalk Ball.

In summary, that was the result of legacy decisions that could have been changed later on but we did not want to throw out work away.

Was it worth it?

Hell no! Paypal is a nightmare from the accounting point of view (not entering other discussions about PayPal here) and at the end we did not delivered SpaceCat through other channels, so 100% not worth it.

Problem #2: The shop was hosted on a shared server

Yes, we just put it in on a server we used for hosting other websites. At the time it looked like a good idea and it was not like we were making too many requests. After all, users don’t open the shop that often, they do play, and that does not require the server.

Why did we did it?

Because we did not have a dedicated server out there and setting it up for this sounded like an overkill.

Was it worth it?

Yes, until the moment SpaceCat was featured. We did spare the cost of a dedicated server for 6 months, while the game was not popular enough.

We should have prepared the migration at the very moment SpaceCat was featured, but honestly I did not see this comming.

Problem #3: The URL of the API was hardcoded

Yes it was. What else do you want me to say?

It required an update of the game to get it fixed. Should this happened to an iOS game we could have been unable to fix it for days.

Why did we did it?

Good question. Because I did not think of it at the moment. No excuse.

Was it worth it?

No, it could have been a much worst scenario. I am glad it just required to do an update and that the continuous integration system was properly setup so we could do it quickly.

What happened exactly?

Once SpaceCat got featured, we started having around 50,000 new users a day, 50% of them opened the shop. So after a week, that database had grown from 50,000 to 300,000 rows.

In addition to that, we started having more than 4 requests per second hitting that table. While this should not be that bad, it was too much for a shared server and the account was suspended.

The fix

The solution was to set up a dedicated hosting so we can have total control and maybe install other tools that are not mySQL in the future if it is required.

Once the host was delivered (and the company did a very good job by completing it in less than 5 hours) installing the code of the shop and migrate the data was done in less than an hour.

Then, we had to reconfigure SpaceCat and publish an update on Android Market. I’m glad to have jenkins in place.

All in all the system was down only for 12 hours, which is not that bad.

Even more

In addition to that, once the dedicated server was up, I noticed that the table was being slow even if the server was not heavily loaded. I looked again at everything and I noticed that it was missing one index.

How did that happen? I don’t know, I was sure to have it in place. Probably because we lacked a proper deploy method and that index was only on the dev environment. Probably because of the lack of stress tests; until 300.000 entries & 4 request per second the table was not performing that bad and we never noticed it. This is, again, a problem of implementing your own solution.

Now the system is good and working, but it has given me too many headaches over the past days so, again, if you are going to create an app that uses a service and it has the potential to be used by many people, use a 3rd party solution if it is available.

Why there are no good mtg free apps for Android?

This lack of good apps for this game may be astonishing at first. Magic is a popular game and Android is a popular platform. You should expect a few good mtg apps. WotC (Wizards of the coast, the makers of the game) is going to release an official app soon, but that has not been the case for the past years, so why there are no good free mtg apps?

Well, the fact is that there were good Android mtg apps, not to long ago M:tG Tracker was a free app and you could upgrade to the paid version. The app was as good as to get 3rd place on the Best Reference category of Best App Ever 

And that was not the only one. There were a few more, like MtG Tutor with a lot of features including a very good advanced search or MtG Depot with a very nice interface. Also, on the paid side there was Deck Forge, which had a lot of features and, I’ll admit it, took the lead of innovation in many aspects before I did.

But all those apps are no longer there, and the reason is that WotC have sent copyright infringement notices to google, asking  to remove them. Why now? The only reason I can think of is that they are going to release their own app and they want to wipe out competition.

Why making a better product if you can have “the only alternative”?

Let me clarify that.

Don’t take me wrong, there were material from WotC and is their right to claim the suspension of apps, but up to now this apps were made with good will, and were adding value to their product. Also, there was never the intention to talk, none of the developers of those apps were warned or given a chance to remove the copyrighted material from their apps.

Also, I’ve seen the screenshots and the app looks promising, so I don’t think they are going to do a bad product. But why should you risk your market share anyway? Maybe for the sake of more than 200.000 people that were using apps that are no longer available while the official alternative has not been released yet.

Make no mistake, WotC is not releasing the official app to help players, it is going to do it to make money. That is the only conclusion I can reach from their actions.

At this point: Why is M:tG Tracker (formerly pro version) still available?

When I got the free version suspended, I went through the app and I removed all the copyrighted material, the fonts, the mana icons, the tap icons, etc. with the hope that it will prevent that one from being suspended… it has worked so far.

I am trying to clarify what exactly can be put and what can not, and also asking for the procedure of licensing the material so I don’t have to worry about it in the future. While this is not settled, I can not afford to continue with the features I had in mind, risking that all that work may be trashed at anytime.

Thanks to all the users that have been supporting me and the other developers. If someone asks you “Why are no good mtg free apps for Android?” you can now tell them why.