Hello everybody! For a long time already was going to write history of the project on Habr, moreover, even
promised . And nevertheless, this moment was postponed until later: when the new release comes out, when the design update ends, when everything works as intended. The reason is one - laziness, hiding behind the lack of time.

But the
competition of one company on the subject of development forced me to return to their selection again and again in anticipation of new articles. And then I spat and decided not to wait for other people's work, but to get my once-started opus,
edit the rewrite and share it with you.
')
Stock up on a mug of hot milk and cookies. Well, or beer with crackers, which is closer to you.

This post is about my mobile development experience. I am new to this business (both as a developer and as a writer) and, perhaps, my experience will seem to someone funny or insignificant. Usually, either indie game developers or experienced cross-platform application developers for their services review their results. Everything is easier for me - a small mobile application for Android, originally conceived to help itself, turned out to be in demand by a somewhat larger audience than expected.
Disclaimer
Here you will not see cunning cycling or nailing with a microscope. I did not rediscover obvious things and did not set the task to write a purely technical article. I want to show how you can develop a self-demanded application (500K + installations) and still get a little more than just pleasure.In its category of applications, the application confidently holds in the second ten paid, received a free mention on w3bsit3-dns.com in the selection of the best and the current daily number of installations 300-900 per day. Sometimes up to 2500. And by the way, I have not resorted to any progress - no advertising, no reviews on thematic resources - anywhere, by any means, in general. Consider breaking the cover.
I do not think that my results can be attributed to the success-story - but when the hobby project starts to bring in a monthly income more than the main one, there is reason to think.
Prehistory
It was getting dark ... no, well, honestly, it was already late evening. Having read on Habré successful stories on mobile development, I thought - why am I worse? I have free time (late evenings and sometimes weekends), I have a laptop, I have access to the network. Even some Android devices can be found.
It is rightly said that the newly created software should solve existing problems, but not imaginary ones. My desire to "write something" was strengthened and formed in detail when the eyes fell on a pile of checks from a gas station. Well, I have some weakness - to monitor the car, including through the level of its fuel consumption. These checks were collected in the glove compartment, and a little later, having gained critical mass, they moved into the house and were slowly driven into Excel. In general, I decided to write a program for calculating fuel consumption. As shown by a cursory search on Google Play (ended the cold winter of 2013), there are competitors. Well, as competitors, not such, on the result of which you look and give up, realizing that it is impossible to go it alone. Immediately there was a desire to do better, with their own ... (here they usually like to write something about courtesans and card games) advantages, here.
There were no questions under which platform to write - only Android, only native. To my delight on the net, there are plenty of lessons on installing, configuring and using ADT tools (then Eclipse is our everything). Many of them are repeated, but several resources with the number of lessons exceeding one hundred helped me a lot.
I am a recent graduate engineer with no commercial programming experience. My knowledge was limited to Pascal / Delphi from the first general education courses of the university and ... everything. Why am I this? If you aim to learn how to write for Android, this is easily achievable. Do not believe anyone. Sometimes it even seems that my cat can conduct a code-review of my writings. Her attempts to prevent the laptop from cooling in the cold evenings of her carcass were hardly wasted for her.

For about a month, I fiddled with the simplest lessons on Android. Initially, very painstakingly, then fluently, the last one was generally missed, looking diagonally. This superficial review allowed me to understand the basic Android primitives I have, how to store data, how to display it and what to do with it.
Two months later, I had a prototype.
Alpha test
And how else can you proudly call harassment to all friends and colleagues who have a personal car? I briefly outlined what the program does and asked her to “use” with me. All comments recorded. I have not received such a number of practical advice either before (the cat agreed with everything) or after. And most of the comments were fair and caused a desire to scratch my head and ask: "And how did I not think of it myself?". This suggests another captain's conclusion - more often to submit his creation to an external, unbiased court.
Beta test
Another month has passed. As soon as all the indicated shoals were eliminated, I thought about the release on Google Play. It was somewhat alarming - right away, take it and start distributing your software. Until the end of the month, almost a week remained and I decided to first lay out my program on w3bsit3-dns.com. Not in vain. Surprisingly, the first users were even more tactful than my friends and the list of improvements / improvements was small. I got ready for release.
Here we should digress and describe the tasks that I set for myself, and the theses that guided:
- The application is fully functional, free and without ads.
- In case of success (I do not remember what I set goals) I add several additional options and release a parallel version in parallel.
- The quality of the application comes first, try to solve all the problems as soon as possible.
With these ideas, I published an app on July 1, 2013 (how the hell was this a long time ago).
Release
Now I found screenshots of the first versions of the program, shed a mean male tear. The truth did not understand, whether from emotion, or from shame.



Now the following rule is obvious to me - when working on my own project, it is necessary the week before the release for the latest checks and the week after for answering reviews, solving possible problems that will come out unequivocally.
There are rules in games. These rules are invented by the developer of the game, and he just beat off the disgruntled, calling the bugs of their crooked creations features of the gameplay. In an application that deals with money and exact figures, it doesn’t work like that - everything has to be the same to the penny / milliliter. My application for car owners, which automatically adds an age filter to my audience - 18+ (send to KDPV). Since the desire to control finances speaks about the practicality and accuracy of the user. I can say that I have an ideal audience - adult, secured, calculating.
Again, I digress. Of course there were comments, there were many comments. I released an update almost every week. And I was looking forward to the evening, when the counters that downloaded were updated.
On Google Play there is a division into categories, one of which is Transport, where I got. Inside the categories there is a division by Tops - Free / Paid / New Free / New Paid.
The first 30 days after the publication I can be in the Top of the new free. On the 10th day I was there. The number of downloads per day jumped sharply and stayed that way until the end of the month. Agree, for a niche application - for adult uncles who have a car and collect checks at gas stations - more than one and a half thousand races a day is a good indicator. For a whole month I drank in graphs and indicators. Judge for yourself:

In fairness it should be noted that the number of deletions also jumped and was about 50-80%. I associate this again with the feature of the application.
A month has passed and the number of daytime installations has fallen. Five times. It was 1500, it was 300. Moreover, the number of deletions lagged behind for some time and soon also fell, leaving a natural increase of 40-50 users per day. To say that I was surprised - to say nothing. However, the enlightenment caught up almost immediately - the application from the Top of new free has already taken off. By the way, I noticed an interesting way to promote some trash applications - every month to reload and hang in new ones. And such found and in auto-applications, and in games, and in utilities.
PRO - Release
After a couple of months (November 2013), I finally realized what functionality can be displayed in a separate application without offending existing users:
- adding more than one car (if the state intends to introduce an additional tax for car owners of several cars, which is embarrassing)
- extended widgets.
- in-depth fuel consumption reports.
It would seem that here it is - there is a good application with good organic traffic for the application (200-300 installations per day). Pro is published, on the forum of like-minded people it is written about this, I'm waiting. To be honest, the night waiting for the statistics was restless - at least five times I checked to see if the statistics had been updated. AND…

On the first day, the program was installed by 14 people, then 6, then 5, after 2-3 months, at best, a day after another, the purchase jumped. Three months later, about $ 95 dangled on the Google Play account. It would seem, what else to expect - throw the project, get up on skis. Try something new. But I’m also hurt, but I’m ashamed in front of a cat, which I painted pictures of a happy near future. I analyzed the user’s behavior (well, in the sense I thought hard when looking at Google’s analytics conversion charts in the application), slapped myself on the forehead and understood another common truth - the user, who may even wish to thank the author of the application, simply does not know about this possibility. I, as a very polite developer, never annoyed the user with self-advertising and that was my mistake. The biggest mistake would be if I still annoyed.
I redid several items. If earlier, when updating, I always had a list of “What's new” changes, now a full-fledged dialogue is to praise / complain / view the development history / upgrade to pro / tea / coffee, if you wish.
Bragging about the list of what I did is not shameful, but at the same time you can offer to thank by supporting the project.
The situation has improved a little.

The number of daily purchases has increased to 5-8, and the monthly profit has increased from $ 20-30 to $ 140 - 170, fully subject to transfer to the card. I understood the dependency and began with new forces to prepare updates to surprise users not with a list of cured bugs, but with the number of new features.
Everybody probably knows the saying about eating appetite while eating. My application is a universal expense calculation calculator. I was able to combine all the known approaches to the calculation of fuel consumption, I learned to predict the run-down and the balance in the tank. Over time, users completely strayed from their hands and began to demand more and more features that could not be conceptually in such a program. Accounting all costs for cars wanted. I thought ...
Release a new project - accounting for all vehicle costs
Wise with my own experience, I did not rush into the development right there and with my head. I started doing research. Damn, it turns out my chaotic preparatory activities can be called so true and accurate. What I did:
- I downloaded all the applications of a similar theme, I launched everything, set it up, in the process I wrote out a list of minimal functionality and interesting ideas that I am not ashamed to borrow. The choice between usability and own bicycles fortunately fell on the first option.
- I also conducted (and am) close correspondence with active users (almost followers) of the application. I asked them questions - what they want to see, what they want to do in the application.
- In the original theme of the first application, I began to tease with screenshots of a new one, along the way listing the claimed functionality and tracking opinions.
- I even asked foreign users about the most appropriate name.
In the end, by the time I started writing the code, I was fully prepared - all the data tables for the database, all the transitions between the screens were documented and reconciled. Of course, I did not foresee everything, and later the structure of the database underwent changes, but there were no shocks that required reinstalling the application from scratch.



Definitely, the advent of Material Design benefited from the latest versions of the application. The functionality, which I originally conceived for the application and which is currently implemented by 80% - a comprehensive hodgepodge of the best that you can only think of. I am risking to incur the wrath of a UFO by bringing a list of features here, but without it my story would be incomplete:
- Drawing up categories of spending and income
- Creating templates (subcategories) with different settings for frequency and accounting in the content.
- Accounting for balances on the list of own parts.
- Composite waste (for example - MOT, including a number of works)
- Flexible configuration of accounting of expenses as content (OSAGO is spread a year in advance, and a tax a year ago, a THAT 15 thousand km after, etc.)
- A bunch of different graphs (I was lucky to make friends with one library).
- Flexible interface customization with just a giant set of card reports.
- And of course, the dual-fuel metering module, which came from the first application with prediction of residues and coasting
All this functionality required almost a year and a half of gradual work and integration. The topic on the forum of the new application is calculated in 2200+ messages. Monetization of the application is necessary at least in order to have excuses for his wife for his free time. Without further ado, in the new application I added one recoverable In-App, unlocking all the features of the basic application (accounting for several vehicles, widgets, statistics, tire calculator).
Cannibalam note
If you are releasing an application that includes the functionality of another, at least partially be prepared to see a decrease in the audience of the first application in favor of the second.Separately, I would like to highlight a few points in my design that may be useful to others.
User data storage and transfer
In programs that work with user data there is always the question of storing them locally, remotely on the server, or mixed mode, which synchronizes between the device and the server. The first way is good with full autonomy of the application and independence from communication with the network. Traffic in the end also costs money. The organization of storage and synchronization on the server in addition to the obvious advantages (platform-independent, the ability to independently edit user data) adds a bunch of tasks and problems that can not be pulled alone. As you already understood, I chose the first method, which is simpler and more predictable. I encountered the following problems with him:
- Remote debugging. To help the user with his data, it is necessary to explain to him how to get and send me the data. With the first releases, I added data import / export to the csv file, and now when I write a letter from the application I always automatically stick the last auto backup.
- Synchronization. Over time, I added data synchronization via Dropbox API. To use a text file in the exchange between devices and disassemble it each time during synchronization - it somehow smacks, doesn't it? Therefore, I drive the entire SQLite file and settings file over the network and simply replace them if there are more recent ones in the cloud.
In the early stages of developing export / import of data, I went to meet some users and added a data parser from other applications - some were no longer supported, some were just curves, the reasons were different - but the desire was one: to become a user of my program and save all story from other apps. But here's the bad luck: if I not only made the export file format as simple as possible, but described it in detail on the project site, other developers saw this as their vulnerability and quickly hid all the export tools from public access, changed the format. It seems everything is correct, but the sediment remained. Well, I decided not to add similar functionality in the future :)
In order not to get stuck in the description of all the already described aspects of mobile development in every possible way, I will try to present my experience and advice in a thesis. Separately, I note that many tips are applicable only for a single developer. For a team where the roles of the programmer, designer, localizer and support services are spaced, the tips may even be harmful.
1. Treat the user as you would like to be treated

In the picture - a pie.Wife disown pies of such a strange shape and denies involvement in such culinary creations.
All pictures are drawn personally on the phone and can not always reveal the original artistic intent.
As a long-time user of Android phones, I already know in advance which applications may linger on with me - either indispensable or convenient and beautiful (it often coincides).
There are no irreplaceable applications - this was the lot of the pioneers back in 2009, when the OS was just getting settled in and trying to move around with iOS, WinMobile and Simbian. Two complementary criteria remain - convenience and “design” of the application.
2. The community of beta users is very valuable. Treasure them.

I have two groups of users who are actively involved in the test and program development.
W3bsit3-dns.com
From the very beginning I opened the topic on the forum and honestly admitted my intentions and plans. And so far the current task list is replenished primarily from there. Most of the participants in the topic are sophisticated users of mobile applications, regularly updated by defectors from other applications. They bring a mountain of experience and functionality requirements. Naturally, the topic should be monitored and track all new messages. Random inattention is very easy to offend a person who is completely disinterestedly involved in a project that brings you income.
Google+
In the fall of 2013, Google introduced the ability to create groups of beta users to gain early access to pre-release versions of the program. I posted a link to this group on w3bsit3-dns.com and the number of subscribers is slowly growing. Honestly, I do not use it.
Those. support note
The most loyal users are the most fastidious.3. Do not delay the project for more than a couple of days

If you do not return to the project for a long time, it can glue fins together. Tracking new trends in mobile design, competent functional competition, those. support
4. Respond to letters within three days

Otherwise, the user may be desperate to wait for an answer and simply forget about the application, as some annoying randomness.
5. Respond to bad emails for one day.
It is even more important to answer either immediately with a solution to the problem, or with an action plan - what to undertake, what to clarify. It often happens that from one letter “Nichrome nicho does not work! What have you piled up? ”You can pull a lead to a problem that manifests itself only in certain conditions and with a specific user.
6. Translate the application into as many other languages ​​as possible.

After the first releases, I almost immediately added a standalone English translation of all string resources into English. Of course, it was a clumsy result of Google-translator, requiring revisions and proofreading.
Over the next year, I received letters requesting that the program be translated into their native language, some offered help. Not really studying the finished proposals for joint localization, I invented my bicycle, described in detail in my article from the sandbox. In short, I reduced all the lines for all possible languages ​​into one big Google-table, made it accessible to all by allowing edits and adding languages. Before the release, I just download the resulting table, parse it with my own parser (I didn’t manage without a bicycle), and the output is a neat daddy with resources spread out in languages. Small developers would highly recommend giving the opportunity to help you with the translation. Moreover, many users will only be happy to do this and get a program with high-quality translation, in which they participated.7. The best program tester is yourself. After your cat. Then a wife.
We must remember this always. It is very difficult to make a product that you do not use, you do not have your own experience with it. All the data that was sent to me for analysis, those that are particularly complex or large (car history for 12 years, 3000 records for six months, etc.) settle on my test devices and are always used when preparing a new release. By the way, the cat really found me one mistake. The application, remaining in the background, did something (considered, considered, and it seemed to be fixated). Android slowly, efficiently, with the arrangement, ate up the battery lying on the table phone. And only a certain persistence of the cat to lay its arrogant face across the phone - issued the unit, turned into a mini-stove.There are after finding a complex interface solution you show your wife two kinds of the same screen. The response “And what is the difference?” Immediately makes you wonder if you were engaged in the previous three hours. And this is always the case - without an external, unclouded look and opinion it is very difficult to lose focus and get off on the way of working out. That is why it is necessary for everyone to show their offspring. Who frivolously agreed to this.8. Competitors - our all.
Nothing is eternal under the Moon. The software market is attracting its seemingly easy way out. Thousands of new developers, millions of new applications all the time cheering, not giving a stop on the spot. If you do not go forward, someone will definitely pass you functionally, interfacing, ergonomically. Only those who believe in their positions can afford to cook in their own juice. But the history of the development of the same Windows Phone proves the opposite. You should always look around. What is invented, what is added is competing offers. And to do better, or add a new hitherto unseen, but extremely useful feature.Here, before my applications, no one offered accounting for two types of fuel, only to merge into a common tank. After my release, there are already attempts and other applications to close this issue. There was no other cost accounting, and they began to move. I blinked, did not notice the new trend in your industry, and you are already everything, recorded in the catch-up.9. If strong nerves and a small vacation is planned with no definite plans.
You can add gray hair to yourself - by releasing a release with a large number of innovations not in a soft step-by-step mode (where you can control the number of devices updated per day - 1%, 2%, 5%, 10% ...), but immediately and suddenly. Unforgettable hours of communication per ton of letters you provided. Even if you are lucky, the program will be tested and verified, a very nasty bug will definitely come out and spoil everything, forcing you to first show this bug for several hours, and then cure it.And if innovations are not cardinal, you will simply warm yourself up with a light reading in the form of questions and answers. When some questions began to be repeated, and I already became confused in the prepared templates for answers in the mail - I created a site-FAQ for the project, where I brought all the detailed instructions and tips. Moreover, one user from Germany helped me translate the main articles into both English and German. More used such users!Oh yeah, I saved the most interesting graphics and numbers for last.The general schedule of installations of the first and second application.
Number of day installations

Again about cannibalismAccording to the dynamics of recent months, the outflow of users from the first application to the second one is particularly visible. As I have already noted, "advanced" users have already grown out of just accounting for fuel consumption, this is not enough for them. Yes, and my more active work in testing the latest beta builds based precisely on the second application (with a smaller audience) does not add to my popularity.
Profit, which was received by my neighbor for the exact same applications (including 30% commission). Like the same neighbor as PapaBubaDiop .
At the moment, the net monthly income of a neighbor is about $ 350-450. With the current rate this is a very nice addition to the basic earnings, which is often lower. Not a dime was invested in the development and promotion; moreover, no free channels were even used for promotion. Total 500K installations, 70K active users, 4K unique visits daily. 400 to 1000 daytime installations.As we approach the ideals drawn in the sore imagination, it’s more and more itching to take more concrete actions:- Closely to do analytics, which is now used no more than to collect error reports and statistics of the most popular application sites.
- Publish several reviews in thematic blogs (video blogs?), View feedback.
- Create several mini-applications on auto-themes for internal advertising of mainstream applications.
But it will be a completely different story ...Addition
The comments were asked to clarify the list of useful resources that guided. Correcting omission:- startandroid.ru - a huge list of lessons with an increasing level of immersion.
- Asset Studio is a very convenient web tool for cutting icons, several sliders - and all, folders with drawable - *** are ready.
- A set of Material icons - from Google itself. Convenient preview and comprehensive amount.
- Google Material Design is a structured representation of Google’s material design philosophy. You can use at least as a cheat sheet color palette.
- Udacity.com - here you can take a few free courses on the design, development and promotion of Android applications.