10 things we've learned developing our first Android game

Not easy, but fun

With this post we want to tell our short experience of two programmers who have made their first approach in game development, we'd like to give some tips that hopefully will serve to all those who want to take their first step and get into the exciting world of Android game development.
Developing a game is hard work and you'd better don't count on downloads falling from the sky. The first tip is do not despair, it is difficult, but here is the challenge. We hope these tips will smooth your way ;)
Also, it's not all doom and gloom, the balance is worth it. When you have the game published on the Play Store and see your downloads growing (slowly at first, and only because your friends and family) you will see that the effort was well worth it and you'll love it as a son (trust me, I know what I'm talking about)
Measure twice before cutting

Soak up all the information before you start. Compare development environments (for example, take a look at Android Studio, before starting a love/hate relationship with Eclipse). Watch videos and tutorials: in 'developer.android.com' there is a lot of useful information to start working with. In general, the android documentation and development environments greatly simplify things. Good planning can save you months of work in the wrong direction.
As an example: after measuring one and a half (note that missing half), we decided that the android framework for creating displays and drawing (quite elegant in design, extremely usable) covered all our needs.
Our first-great-development-crisis was running into the draconian memory limits of an Android application: 24MB of memory for the entire application, including images! (little bit more than my old Spectrum :P). We work miracles to get everything into those 24MB, uploading and downloading images according to our needs. We felt like the Sputnik programmers. So, we overcame the first-great-development-crisis (we are amazing) and almost have our game ready to go.
OpenGL or not OpenGL

Our second-great-development-crisis arose a few weeks before finishing the first release-candidate version. Everything was programmed with the Android framework and running like clockwork... on our phones. Then we test the game on a Nexus 10 (in theory, a fancy phone), and everything was laggy (WTF!): the problem was that the tablet's CPU couldn't manage such large images efficiently.
There was only one solution for this big problem: Turn back and start with a new graphics OpenGL-based engine (See tip #1 :D)
So we entered into the exciting world of OpenGL. We compared several graphic engines, but none seem very mature, so we decided to make our own. It could not be that difficult.
The first 2 weeks were hard, very hard. The frustration reached new heights. The learning curve was too slow. Being used to the elegance of Java libraries, we found OpenGL way to primitive. Why was everything so low-coded? Also, querying the OpenGL forum's gurus we found out that they have to be people smoking a pipe and not writing code, just words. It was frustrating to see someone with a problem like ours and abstractly a guru replied without code samples and the first one, who asked the question, answered: It works like a charm!. You think: you son of a bitch...
But with perseverance everything came gradually, and we got to tame OpenGL (tip #0: do not despair). Everything was super-fine on the tablet and we didn't have memory problems because the images are stored in video memory. So many things were simplified.
Soon we'll liberate our engine, when we have a code not to be ashamed of.
What are you doing to be so handsome? Wash, rinse, and repeat
We all feel better when we put on fancy clothes, in the video game world, graphics are an essential part of development. Look up a good graphic designer who can capture the style of the game and make graphics consistent. Keep in mind the audience you are targeting and sketch, sketch and sketch again, seek for feedback and work hard until you find something that really makes you say: "this is what I was looking for". As Picasso said "Inspiration exists, but it has to find you working.".
Calculate development time being generous and multiply it by 10
First calculate the development time thinking about solving the bigger problems: how to paint this color blending this layer, how to move this graphic by easing and force the GC not to yank, etc.. This is what we thought is 90% of the work, actually it will mean no more than 10%, not because everything is easier than we thought, but because all the other small things which you didn't think about, an ocean of time spent that never ends: Set the button text size a little bit larger, export, test... oh, no, 3 pixels further down, export, test, change font, size snaps back,... and so on to infinity (and beyond...)
Calculate development time to be longer than initially thought if you don't want to fall into the frustration of seeing how your thousand outstanding tasks never ends. Very important, make a list of things to do and give them priority, finish them one by one until there is nothing left and when you least expect it, you'll be exporting a signed version ready to publish.
Backstage work

Not all are cool and colorful graphics. The most important work is behind the scenes (although the average user ignores, most programmers are misunderstood). What you don't see but assume: if you're a programming god and everything runs smoothly, users think that this is how it has to be, however, if you let a small leak, releasing a force close at level 30 when the planets align against you: the user will uninstall your game and will send you the bill for his broken phone thrown out of the window in frustration, or worse, he can put a bad comment on Google play. Beware O_O
Focus. The Devil is in the details
At first, you have a general idea of what you want to do, then you finally start developing and programming. So new ideas come to you mind. You start playing with your game and new "needs" come out. This could be awesome... Look, we can add this feature... Well this would be very funny...
Eventually we realize that development has no end, and continue week by week (maybe months... we lost track of time). Our friends do not take us seriously when we said that we had it almost finished ... We have to put an end to this. Get back to the roots of the original idea and stick to it all you can. New occurrences and features can be implemented in future versions.

Exaltation of friendship
As they say, children and drunks always speak the truth. You, as a developer, can spend weeks testing the game but in the first five minutes of your 7 year old nephew's testing we'll rise 20 bugs that never had gone through your head.
Also it's always good a little push to start, and that's what friends are for. Grab all your Whatsapp contacts and tell them to install your game, that's the best thing they have ever try :D, when you see download flowing (the first 100 are pure adrenaline) you will love them more than ever.
Promotion: Google is not evil, but does not help
Then one day you decide you're done. Everything goes like silk. You have a killer app that will be the bombshell after Angry Birds, not to get rich, but by simple narcissism. Then publish your app and get 4 downloads, including yours... Something is wrong, no one is finding our application.
So consult the Top New at Google Play Store and desolation pervades all your being. New downloads have +1.000.000 most. Even an application of a miserable fart (if I know it I had not invested a year of my spare time). The last uploaded applications does not appear anywhere. Your brand new game is lost in infinity and no one knows where it is. Google will not help, the promotion goes on your own (bank account?). You have to make a living.
Create a blog with "10 Tips"
So we come to the last tip. Create a blog to promote your game. With the bank account in the red there are not many alternatives, and self-promotion gets you to exploit all resources you find so that your game is known.
We can only say that we hope you enjoy playing our game as much as we have developing it.
Thanks for playing and get the best time!