Thursday, May 22, 2014

Plans for the future

Hi guys! Thanks for visiting my blog again. Today, I'd like to reveal some of my plans for the next couple of months. I know I haven't been very active recently, but hopefully it's going to change next week. I've been studying for a very important job interview, which is going to be on Monday. Please, keep your fingers crossed. No matter the result though, I'll definitely be going back to Android work and here's a list of stuff that I'm going to focus on.

Crashlytics

I really want to try this crash reporting system. I'm using Crittercism right now, but I only have a limited free version, which doesn't let me do more sophisticated stuff like sending information about caught exceptions. The reports don't look too pretty as well. I was hoping that Crashlytics might be the way to go, especially that it's used by such companies like PayPal, Walmart, Dominos or Groupon. Oh, and I forgot the best thing - it's totally free (even the enterprise features).

Mastermind Group

Recently, I came to the conclusion that I need a group of people who would help me make my apps better and share their experiences with me. I don't mean just giving me good ratings on Google Play. I mean giving me information on what I could do better, which app kinds are working and which are not, what ad networks bring the most revenue, etc. Of course I would help them as well, sharing as much of my knowledge as I can. I'm in the process of contacting some of the people I know, who are on the similar stage as I am. I think 5-8 members would be optimal. If you'd like to join and meet with us once a week or two (on Skype or Google Hangout), you can write me an email at bartas [dot] wesolowski [at] gmail [dot] com.

Map apps

I really like the tool that I created, which transforms SVG images into Android Drawables. I'm thinking about creating new apps similar to Milan Metro - just with different maps. People in other cities would probably be happy as well to see a high quality version of their metro map for Android. There are also trams, buses, university campuses, parks, and other places just waiting to be transformed into vector images and published as an app. I already have the necessary code base. Why not replace the map itself, the icon and the screenshots and put it on Google Play?

Blogger Stats

Some time ago I experimented with Google APIs and tried to write an app which would fetch my blog statistics without the need of logging in (it would use the Google account stored on the device). After the initial struggle I managed to get it working. The only bad thing is that the Blogger API doesn't let you see very detailed statistics - it just shows weekly, monthly, and all time views. It might change in the future though. Anyway, I just need to remove my hardcoded blog name, add Google account selection, and make the app pretty to be ready to release it. I use it from time to time, why not let other people do the same.

Video ads and alternative ad networks

Since I already have quite a lot of users of my apps (around 15,000), I should probably start thinking about monetizing them better. The CPM of around $0.5 which I'm seeing now is not the highest I could dream of. Other people have been advising me to start using ad networks other than AdMob. I also receive email offers from less known networks from time to time. I definitely want to try video ads and experiment with ad types and their placement. I hope it can increase my income and perhaps allow me to go full time at some point (although I'm quite far away from it right now).

Google Analytics for Android

I hate the fact that I don't know anything about my apps' usage. How many people play my games daily? How many of them make it through the whole game? Are the difficulty levels ok? What are the most common settings? I've been looking for a solution and I think I finally found one - Google Analytics. It's supposed to let you get all the answers you want. Having the data available, it should be much easier to make adjustments to your apps/games, place the ads, detect bugs and create new features. I'll definitely give it a shot.

Blobby Volley multiplayer

Being able to play with other human beings is what's missing in my game. Although my AI is quite strong and I'm quite proud of it, it can't compare with the possibility of kicking your friend's ass. I'm not sure how I'm going to do it yet. I don't have much experience in implementing multiplayer games, but I have to find a way to do it. For now, I'm considering AndEngine Multiplayer Extension and Google Play Services. I can't wait to see it in action!

Updating old apps

It's been a while since I created my first apps and they got quite old in the meantime. Not only at the time of writing them did I have the knowledge I have now, but some of the more sophisticated libraries simply didn't exist. There was no way of easily downloading, caching and showing online images. There were no pretty gallery views. No one even heard about Android 4.0. That's why I think my Raczkowski na dziś and Galeria Andrzeja Mleczki need a general rewrite. I'm not giving this task the highest priority, but I'd like to make those apps more user friendly and less buggy. They are part of my portfolio and I feel bad every time someone gives them a bad rating.


That's more or less what I have planned for the summer, unless something unexpected happens. If you want to see the results of my work, visit me again and check out the progress. I can't wait to see what the future will bring. Wish me luck.

Thursday, May 8, 2014

5 things that are working for me right now

Hi there! Today I'd like to share with you the results of my recent actions and experiments. Even if I don't create new apps, I try to at least update the ones already existing, with some new features, bug fixes and enhancements. Here's the list of five items that I consider the most successful/promising/helpful. I'm sure you can find there something that will work for you as well.

1. Online crash reporting solutions

Since I started using sites like BugSense or Crittercism, I think they are a must for every app. The Google Play's crash and ANR's section lets you see only a fraction on errors. It doesn't show any nice reports either. External systems like the ones mentioned earlier are much more powerful. They let you mark at which version each bug was fixed, they can give you additional exception information, they let you send reports about caught exceptions, they send you email reports, and their look-and-feel is much nicer.

In the past I used ACRA as well. It gives you more flexibility when it comes to data storage - you can even code your own adapter doing whatever you like with the exception that was caught. For me it was too complicated and I preferred other solutions, but I just took a look at their website and it seems that a lot has change in the past couple of months. Perhaps you will want to give them a try as well.

What I want to test in the near future is Crashlytics. Since Twitter acquired it, it has become completely free and I've heard a lot of good words about it. It looks quite pretty and professional as well. BugSense and Crittercism offer free plans, which usually are quite sufficient for indie developers, but to use their pro versions you have to pay, which is not an option for me right now.

Anyway, start using online crash reporting, if you aren't already doing it. It takes one line of code to add them and they let you avoid a lot of bad ratings and reviews.

And when it comes to user feedback, let's take a look at the next point.

2. Discreet App Rate

As the name suggests, it a neat library displaying a small banner asking the user to rate the app. The banner only shows up after the app has been opened a specific number of times or when the app has been installed for a while. It's easy to dismiss and it doesn't take the whole screen, which can annoy users and actually make them give you one star. If you're interested in the motivation behind it, you can read the article Nicolas Ponepuy (the author of the library) wrote.

I found out about Discreet App Rate through the Android Weekly newsletter. It's a great source of information about new Android libraries, tools and learning resources. You might want to sign up for it as well. Btw, my interviews got featured on it a couple of times at the beginning of its existence, which I'm extremely proud of.

But back to the main subject. Since I installed Discreet App Rate in my Milan Metro app (more than 3 weeks ago), the number of ratings has practically doubled and the average rating has increased from 3.8 to 4.24. It caused a 20% rise in downloads as well, although I changed the icon, screenshots and some app details as well, so the positive trend might have been caused by those as well.

3. Ad networks other than AdMob

I really like AdMob for its reliability, transparency, on-time payouts and in-depth statistics. Nevertheless, I don't think you should be using only their ads, because they don't give you the highest CPMs and possible ad types are definitely not up to date with the industry standards. My AdMob average CPM is only $0.58, which is not very high, although I do get up to $3.69 on a banner (!) in my Toothbrush app (I still can't explain this anomaly).

Anyway, I have been using Airpush and AdBuddiz for some time extensively and they give me average CPMs of $1.44 and $1.01 respectively. I use both of them with my Blobby Volley game, so the results should be representative. I have Airpush in one of my other apps - Supermarkets in Milan and it has a CPM of $2.58 (unfortunately with much fewer impressions).

In conclusion, if you experiment with alternative ad networks, they can basically triple your income. I'm probably not doing it well enough anyway, as Matey Nenoff mentioned in the comments on my last income report. There are video ads and other specialized ad networks that migh give me better rates. I will definitely commit some time in the future to experimenting some more.

Just as a remark, using too many ad networks might not be good either. They usually pay you after you've reached a certain level of income (like $100), so if you don't make too much, you may never see the money or you'll have to wait for it longer. Also, they don't always give you access to full statistics (I calculated the AdBuddiz CPM on a calculator), so it's not easy for you to analyze the traffic. Finally, they have limited payment options, so if you're used to being paid via PayPal or wire transfer, you might get disappointed and be forced to create an account on a third party money transfer site.

4. Transforming SVG images to Android Drawables

This point will be more technical, but it really changed a lot for me. Remember February 2013 and my post about using SVG images in Android apps? Probably not :) Just as a quick reminder then. Vector images are very nice to use, because they don't lose quality while magnified. They also usually take up much less space and memory than bitmaps. Sometimes they are the only way to go, when an image is very big and can't be loaded into memory. That was the case with my Milan Metro app.

Unfortunately Android does not support SVG images natively, so you have to use an external library to transform them into instances of the Drawable class. The existing libraries are not of very high quality though - some of them only support a subset of the SVG standard, others don't let you use text, different ones just transform the image into a bitmap, which may not be what you want. All of them have to parse the SVG file first, which takes quite some time (up to a couple of seconds). These disadvantages make it quite hard to use SVG images.

What I did was as follows. I used the svg-android-2 library (an updated version of the svg-android library I was using previously) not to parse SVG files and make Drawables out of them, but to print the code that would be executed in the process. This way I had the whole image in Java code, looking more or less like this:

public class MapPicture extends Picture {
    private final Canvas canvas;
    private final Paint fillPaint = new Paint();
    private final Paint strokePaint = new Paint();
    public MapPicture() {
        canvas = beginRecording(530, 415);
        fillPaint.setLinearText(true);
        fillPaint.setStyle(Paint.Style.FILL);
        fillPaint.setAntiAlias(true);
        fillPaint.setColor(Color.TRANSPARENT);
        strokePaint.setLinearText(true);
        strokePaint.setAntiAlias(true);
        strokePaint.setStyle(Paint.Style.STROKE);
        canvas.save();
        canvas.concat(/* some matrix transformation */);
        fillPaint.setColor(-14917974);
        fillPaint.setAlpha(255);
        fillPaint.setTextSize(4.0f);
        strokePaint.setColor(Color.TRANSPARENT);
        canvas.drawText("PORTA ROMANA FS", 0.0f, 0.0f, fillPaint);
        canvas.restore();
        /* other shapes and text */
        endRecording();
    }
}

I didn't have to add the SVG parsing library any more, the image loading time was practically unnoticeable and the map looked just as before. It wasn't as easy as I first thought to print the Java code instead of executing it, but it was totally worth trying. I started even thinking about creating a tool for other developers to do the same thing, and start using vector images without the necessity of adding external libraries and wasting time on svg file parsing. If you are interested in such a tool, please let me know in the comments section.

5. Simple apps

Many people think that by making a mobile app they can get extremely rich. Sometimes they spend a lot of time and money to create one, just to find out that it's a total flop. I believe such an approach to be wrong, at least for indie developers like me.

Making something small and simple is usually what works for me. I don't get bored and frustrated during the development process, I don't need to commit half a year of my free time to finishing the app, I can see if it has a potential of being popular much faster and then perhaps add more features.

I still can't believe that my Toilet Sounds game, which was basically a practice excercise for me, when I was trying to learn how to play sounds on a physical device, has been downloaded 40,000 times. I guess sometimes you just can't guess what people will like.

Another thing is, I'm quite ok with having 10 simpler apps, each making me a smaller amount of money. Complexity brings a lot of trouble - tons of crashes and pissed off users, long development time, investment in design and graphic resources, etc. Remember that if you create a map app or a simple point-and-click game, you can always make another one based on the existing code, e.g. make a map of something else, reskin the game to be played in another environment. This way every bug can be corrected in the common code base and not cause trouble in every derived version.

To put it in short once again, my extremely simple apps have probably the same amount of downloads as the more complex ones, although they took 1/10 of their development time. They made me realize what may or may not be successful (live wallpapers suck), they usually crash much less, they build up my portfolio. I'm definitely going to be making more of them in the future.



I hope you liked my list. I might make another one in the future, because I quite enjoyed the process of creating it. In the meantime, feel free to let me know what's working for you.