What deliverables you should expect from a mobile developer

I’m not going to be talking about nice to have things like documentation, user stories, etc. Let’s talk about absolutely essential, nonnegotiable things.

Source code

I had clients who didn’t even know what source code was and why they needed to have it. Let me explain what it is. If you know it already, just skip this part of the article.

Basically, source code is the text of the program that a programmer writes. Usually it comes in the form of a folder with a bunch of subfolders and text files. Not txt files, but you can open them as text files and read the code. From time to time while working on your project your developer would make a build and send it to you for testing. A build is just a binary file. Binary means that the file contains just zeros and ones and you can’t read it as you would a text file. For Android app it is an APK file, for iOS it is an IPA file (although for iOS they would probably send you a download link, so you wouldn’t even see the actual file).

Those files are just builds, they are not source code. You can run them on your phone, but you cannot publish them. And if your current developer quits on you, you can’t just take the build file to another developer and ask him to continue the work on your project. You’d need to have source code for that.

One of my clients didn’t know about it or rather didn’t think it was important. A freelance developer did some work on his app, published the app and then didn’t provide the source code. After some time when my client needed to do some more work on his project he found out that the freelancer wouldn’t respond. So, he had to hire another developer, but since their was no source code for the previous part of the work, he had to send the new developer the older version of the source code and pay him to basically do everything that has already been done by the previous developer.

Keys for app-signing

The troubles of my client didn’t end with having to do the same work two times and pay double price for it. When the job was done for the second time the new developer started asking for some “key”, because he couldn’t upload the app to the Google Play store. Obviously this developer was not very experienced because he didn’t propose any solutions but just kept on asking for the key. So my client had to ask me for help.

Turned out that the previous developer generated an upload key and didn’t provide it to the client. What is the key? Basically, every time you upload a version of your app to the Google Play store you need to sign it. There are two ways you can do it. You can sign it yourself with your app signing key (not recommended) or you can enrol in app signing by Google (recommended). In the latter case you still need a key, but instead of an app signing key you need an upload key. 

If you signed your app manually with an app signing key, published it and then lost your key, you wouldn’t be able to update your app in the Google Play store. You’d have to publish an update as a separate app.

In our case my client’s app was enrolled in app signing with Google. So we only needed an upload key. Fortunately, it is possible to register a new upload key if you loose or compromise your current key. That’s why it is recommended to use app signing by Google. So, I just generated a new upload key, then wrote to the Google support asking to register the new key. They did it the next day, but said that the new key will be active 1 or 2 days later (I don’t remember exactly, but activation wasn’t immediate). The problem was solved, but my client had to actually pay me some money for my help. This could have been avoided it he knew about app signing beforehand and asked his previous developer to provide the key.

You only need one upload key for your account. Then you can use it to upload any number of apps and app updates. So if you hire a developer to do your first android app, make sure they give you your upload key. What you need to get from your developer is a keystore – a file with jks extension, and two passwords: keystore password and key password. Alternatively, if you know how, you can generate this key yourself and then send it to your developer, so they can publish your app. 

For the iOS app you need to get a distribution certificate with a private key. Your developer should send it to you in the form of a p12 file. Check that the private key is actually there. Double click the file and it should be imported into your Keychain (make sure you are using a Mac computer). You should see the private key there. Again, as with android you can generate this key beforehand if you know how, and then send it to your developer. 

With iOS apps it is not that important to actually get that key from your developer, because you can revoke the certificate and create a new one anytime you want. You don’t need to contact Apple’s support for that.

There is one caveat though, but it most likely doesn’t concern you. If you have an enterprise Apple developer account and you have an in-house app (an app published on your server and not on the App Store), then you should be careful with your distribution certificates and keys. If you revoke a certificate with which your in-house app has been signed that will kill the app. You’d have to republish it.

Ideal situation

If you want to be an Appreneur and publish a lot of small apps, you’d be better off if you learned a few things first.

Learn how to use git. Use GitHub or Bitbucket. That will allow you to have your own code repositories. So instead of receiving archived source code from your developers and then dealing with multiple archives you’d be able to invite developers to your repository. They will push the changes to your repository as they work on your project.

Another useful skill would be the ability to build code from sources. That will allow you to check that the code actually works. You should be able to pull the code from your repository to your computer and then run it on your simulator or an actual device.

And also learn to publish your apps yourself. You can invite developers to your Google Play console and let them publish your app for you, but Apple doesn’t provide such option unless you have an enterprise account ($299 a year). If you have an individual account ($99 per year) you’d have to give your developer login and password from your account. Do you want to entrust your account to some random freelancers? What if they go crazy and delete all your apps?

I had a client who was an appreneur. He had a lot of small apps. And he had a system in place. I just did the coding and pushed the code to his repository. I didn’t have to create builds for testing because he would build from the source himself, and I never had to publish his apps, because he was doing it himself.

From iOS development to full stack development

It looks like I haven’t been posting for almost two years! Here is a short post on what I’ve been doing all this time.

I quit my iOS development (remote) job in the end of February 2018. Since then I’ve been freelancing on Upwork. The first 6 months were dedicated to building up my profile. 

Then I realised something. The jobs I was getting even after I had enough reviews on my profile were small and not very interesting. Mostly bug fixes. The only way to make decent money was to join some existing team. But I didn’t want to do that. I didn’t quit my job just to find me another job with managers, time tracking and all the other ‘goodies’. So, I though, maybe if I create a team myself, I’ll be able to get large and interesting projects. Because after all clients who have those big projects usually want all at once: iOS app, Android app, and server. 

So I started hiring freelancers. Actually the first project that I did this way, was a fake project. It was an app for an imaginary company, that helps managers and employees communicate with each other. I wasn’t sure how easy it would be for me to find decent freelancers, so I didn’t want to start with a real project and a real client, and risk a big failure. So I just made up the task and hired freelancers for design work, backend development and android development. iOS app I developed myself.

After the fake project I did a couple of real projects with my newly created team. What I found out is that with my hourly rate that I had at the time, and the rates of my freelancers, I only made money when I was coding myself (I was still doing iOS development myself). All the management work was basically a downtime for me, when I made no money at all. And managing took a lot of my time. There were days after days, when I simply didn’t have time for coding because I was communicating with my team and clients all the time. 

All in all this team building endeavour took me another 6 months, after which I finally realised that this business model was not sustainable. So from May 2019 I started learning cross-platform development using React Native. It took me one month to learn it enough to get my first paid React Native project. It was a simple serverless app (coin catalogue). I ended up making two similar apps with minor differences.

While I was working on those apps I also started learning back end development with Node.js, Express and MongoDB. In August I got a big project on which I’m working right now. Basically it’s a social network that will theoretically serve millions of people. So I have to learn a lot about scaling mobile apps. 

My goals for 2020 are:

  • Build and publish a few apps all by myself (with help only from a designer).  
  • Raise my rate to at least $30/hour.
  • Market my services outside of Upwork (social networks, blogging)
  • Figure out a way to accept money directly from clients. I have all the processes set up for receiving money through Upwork. But to legally receive money in other ways, I’d need to develop new processes (like creating a template contract in such a way that my bank accepts it). 
  • Create materials for teaching other people front end development with React Native.

Why do I need the last one? By the end of 2020 I’d like to start creating my own mobile development company, with an office and full-time employees. I’d need to somehow teach people to code, because I won’t be able to find experienced developers where I live. Also it’s much cheaper to teach a newbie as opposed to hiring a senior developer. 

So these are all the news I have right now.

Too many app downloads from China. What is going on?

Recently I had quite a few downloads from China. As I later found out, those downloads were fake. I decided to write this post to share my experience with you. And if someone have already had the same experience maybe they’ll share their knowledge with me about what is going on and how to deal with it.

How it all started

First of all let me show you what my app downloads normally look like. This is my stats for the month of April 2017. As you can see, I normally have around 10 downloads per day.

Lets see what happened the next month

In May 2017 it was the same until the end of month when the number of downloads rose from 10 downloads per day to 50-60 downloads per day. I learned that the extra downloads were from China. OK – I thought – Chinese people have discovered my apps at last. And there are a lot of Chinese people out there so nothing surprising. By the way, the app that was downloaded the most at that time was 3Do.

Third month

The number of daily downloads was about the same for the next month. But in the very end of June I experienced a surge of downloads. One day it was 568 downloads total. The next day it was 6,54K. The day after – 7,50K. Now it was my other app – Stream Journal – that was downloaded the most. And all these downloads were once again from China.   

This time I decided to check my stats in Google Analytics, since I have implemented Google Analytics in Stream Journal but haven’t done it in 3Do yet. What I found out is that with all those downloads there was not a single app launch from China.

The possible explanation

I tried to find the explanation to this fake downloads mystery on the internet. But all I could find was other people complaining about having similar experiences with app downloads from China and other asian countries. It all reminded me of a video I once saw on Youtube about Chinese like farms. A like farm or click farm looks something like this.

You just pay for your fake Facebook likes and they give you your likes. But as the video explained they can’t just like only the stuff they were paid for, because in that case they would be easily found out. So they also like some other random stuff.

So, my hypothesis is that exactly the same thing has happened with my app downloads. It may be that one of those click farms found out my apps and used them to make their statistics look unsuspicious to Apple.

Here is the said video, by the way:

What I did about it

At first I put a price of $1 on my Stream Journal app just for one day to see what happens. What happened is that nobody bought my app that day. I made it free the next day. And there was about 100 downloads. Eventually I decided to make all my free apps unavailable in China. Sorry, Chinese people, I just don’t want your click farms to mess up my stats.

Now I enjoy the usual 10 app downloads per day. 

What happened?

I stopped blogging once again. For almost a month. This is just a quick post to tell you what’s going on.

In a couple of weeks I will go to Moscow for several days. I need to make a presentation at the main office of the company I currently work for. When I learned that I was to give this presentation, it sort of messed up all my plans, which resulted in two things. First, I stopped working on my app – ImpApp.

Second, for the last several weeks I couldn’t find time for blogging, because I was preparing for the presentation.

But I totally plan to resume both of these activities soon.

Also, now I have an email list. Leave your email to get updates from this blog. And when I release ImpApp you’ll be among the first people to download it.


Creating my new app – ImpApp

I’m going to build a new app. Actually I’m already working on it. I just thought why not document the process of its creation here on the blog. It turns out I have already started documenting the process. My previous post was about incorporating ads into an app. Guess what. That post came as a result of me working on my new app.

What’s the idea

Have you seen Memento movie? It’s about a man who can’t form new memories as a result of past trauma. He is searching for people who attacked him and killed his wife. But he keeps forgetting everything he learns during his investigation. So he has to use a system of Polaroid photos, notes, and tattoos to track information he can’t remember.

When I was watching this movie I kept thinking to myself that the movie wasn’t just portraying some curious condition of a traumatised mind. It also kept reminding me of the fact that we (by we I mean all humans) have a universal tendency to forget things.

There were moments in this movie which reminded my of some moments in my own life. Like when the main character found out that the girl who he thought was helping him, was actually using him, taking advantage of his condition (she told him about it herself laughing at his face, knowing that in a couple of minutes he will forget about it). And the guy was frantically looking for his notes to write down this new information.

There were moments in my life when I knew if I didn’t write down that genius idea at the very moment I had it, I would forget about it forever. Sometimes I would get out of bed in the middle of the night just to write something down.

Tattoos as reminders

This is Casey Neistat. He has a tattoo saying “Do more” to remind himself to do more, obviously. When I saw this tattoo I thought that it was actually  a good idea to use tattoos to remind yourself of something important. Also it reminded me of Memento movie. And that’s how the idea for my new app was born. Me, personally, I have a bunch of things I want to be reminded of every day. Only I don’t want to have tattoos. So I thought to myself, can an app substitute a tattoo?

By now you have figured out the idea of my new app: it’s going to be an app that you use instead of a tattoo to remind yourself of important things (thoughts, ideas, quotes) every day. I couldn’t think of a good name for it, so I decided to call it ImpApp. Imp – means important, because the app is all about remembering the important things. 

Basically it will look like a list. But it’s not enough to just write things down. You actually need to read them every day. That’s the main problem with most productivity apps, like diaries and journals: you don’t read your own notes very often. So, my app will remind you to open it every day via local notifications.

You might be wondering how this app is going to be different from Apple’s Reminders. Actually it won’t be very different. In fact when I first had the idea for this app many months ago, I created a list in Reminders called “Always remember” and set an alarm for 9:03 PM every day named “Read Always remember”. Here is what this list looks like.

And I’ve already been using this list for months. So, if you want to benefit from this idea you don’t actually need to wait for me to release my app. Just use Reminders and set an alarm.

Problem with Reminders

But there is (or will be) one downside to using Reminders instead of my future app. With time your list grows. And although all the things in the list are important to you they are not all equally important. Basically your list gets cluttered with less important stuff, making it hard to pay attention to the more important stuff.

So I thought it would be nice to have let’s say three lists. In the first one you can store up to 5 items. In the second one you store 20 items. And the third list is limitless. This arrangement will force you to sort your items according to their importance to you. Theoretically you could still do this in Reminders using multiple lists, only it is a little complicated.

What the app will look like

Here is what I came up with in terms of design.

Mind you that it is not finished. I will work on the design some more. The dark green area at the bottom of the screen will be occupied by a banner ad.

Monetisation of the app

I think that if a person starts using this app he or she will continue to use it. And the reason is not the fact that I will use notifications to remind users to open the app (many apps do the same thing). The real reason is that the notification will remind users to read the list of things that they believe are important. They won’t mind the notification. They won’t be annoyed by it. So, I predict high retention rate for this app.

People will be using it every day (hopefully). An that means that it makes sense to monetise the app through ads. I will be using just a little banner at the bottom of the screen to avoid annoying people too much. I think it is not the kind of app where people will tolerate full screen ads.

Also there will be an option to remove ads with one small payment. I think this is the kind of app where you should have such option. There are other apps where it is not as important. Like a cooking timer. When I use a cooking timer app I just set a couple of timers and then go on with my cooking. I don’t look at the screen. So I don’t care if the ads are showing. And I would never buy a paid version to remove the ads in this case. But when you read a list of very important things, and do it every day, you should have an option to remove the ads. It’s just humane to provide such an option.

When the app will be released

I already incorporated ads and figured out how to use local notifications. Right now I’m in the process of implementing in-app purchases. I guess I’ll finish them tomorrow. Then I will need one or two days to work some more on the design. After that I will start actually building the app. It shouldn’t take too long. The app itself should be easy to build. Also a lot will depend on my day job. Recently I had to put a lot of extra hours into it. It definitely slows me down.

I would say that the app will be ready in 2 weeks to 1 month. If you want to be notified when it is released write me an email. If you have a suggestion about my new app, leave a comment below.