After spending the last four or five years building and coding hardware devices and becoming an IoT expert, its time for a new challenge and a return to designing and building apps for users again. I first started writing code in the late 1970’s in FORTRAN on punch cards and over the years I’ve made a living from Shareware and creating my own Software companies which helped me learn a lot about users and business and prepared me for doing Startup companies and despite the success of creating almost a billion dollars worth of companies, I didn’t enjoy it as clearly the emphasis is on making money and not much else and its often a Survivor like game when the money hits the table which was enough to end my involvement in start-ups.
I love creating stuff, and the process of taking an idea to a finished product in the hands of users, is my thrill, so after spending years building IoT devices I wanted to get back to pure software again. I decided after looking at Windows 10, and the rapidly maturing UWP (Universal Windows Platform) and development tools (Visual Studio 2015 and beyond), that writing apps for the Microsoft App Store would be an interesting, toss in that I really love my Windows Phone (currently a Lumia 950XL) that building UWP apps which have a phone slant would be worthy and fun adventure and just be a great learning adventure.
Now I’ve been a Microsoft MVP winner for 13 years and in a number of different areas over the years as my interests change, so this year I’m ‘Visual Studio and Development Technologies’. NOTE I’m not a Microsoft employee, nor does Microsoft tell me what to do (other then my wife not many people do), but I’m awarded my MVP usually because I spend a lot of time giving presentations to various user groups, or teaching, or just sharing my knowledge and experiences with others as I’m a huge believer in the power of developer communities, and its for that purpose that I’m writing this blog entry.
One of the challenges I had when considering building apps for any app store is the lack of information as to what to expect as an app developer and in particular how much money do they make. I’m not particularly motivated by money, but I understand that you need money to live, to pay for a roof over your head and put food on your table and such. I’m not interested in driving a Lamborghini, but I am interested in making a reasonable living which is likely less then what some people consider making a living as I’m trend to live a more minimalistic lifestyle to reduce the amount of control that stuff has on me. The question is, how much money does a person need to make and can you do that as an app store developer? I can’t tell you how much money you need to make as it has been my experience that everyone is different, but I will tell you about how much money my first app has made in its first month and share some of my experiences and learning thus far.
Some important points concerning this first and please read these so you understand what I’m doing and what my objectives are.
- In Calgary, we are currently around 10.3% unemployment and office space vacancy downtown is about 30% as the collapse of the petroleum business has hit hard and so some folks are scrambling to find alternate employment. So my first objective is to see if it is possible to make a living from or a reasonable income supplement or at least a self sustain hobby writing apps for the App Store.
- The IT industry is very discriminatory and so a lot of qualified and capable people are without suitable employment for all the wrong reasons, could be gender, could be race, could be age, education or whatever, but in my experience of writing Shareware or apps for other app stores, users don’t discriminate, they just want quality software that does something they want done, or something that otherwise they like. An App Store is a great equalizer where as long as you don’t name your company something inflammatory, it comes down to who makes the customer happy and not much else other then some basic business skills.
- There are other App Stores, but I’m only interested in Microsoft’s App Store so my focus is apps written using UWP just for Microsoft’s Windows 10 App Store. Reasons for this are both personal (I’ve been writing Windows code since 1990 and to paraphrase Roberto Clemente, Windows has been very good to me). I also believe that Microsoft is onto something with its Universal Windows Platform as it’s a logical extension to the concept of cross platform languages as it enables cross device development where I can write the same code and using Adaptive Display have it run on different devices and be able to take advantages of each device’s capabilities. Not only is this a powerful development tool, but will also simplify future maintenance which is very important to an Independent Software Vendor (ISV) as there are only so many hours in a day.
- Microsoft seems to be working a long plan that the other platform vendors aren’t and that plan seems to be coming together (they still have some work in the mobile side, but they are making good progress but quietly). The platform, tools, devices, are all making great strides, and if they juice the App Store like they have Groove (and it appears they are), then jumping on to this now might be just good business timing.
- I’ve been impressed with the user community and while it might be small they seem willing to support app developers and that is very important.
- I want to write at least four apps in different areas in order to build up some expertise and hence be able to evaluate the concept as being viable or not or how to make it viable as I’m not a believer that one app does an expert make (there are some in IT who think reading one article makes you an expert).
First App, First Month
As the idea man behind a number of companies I have lots of ideas for apps, but I chose the Weather Barometer app as my first app as I wanted something simple where I could focus on the processes and such of getting an app into the store and my Pioneer Farmer Grandfather left me with a love of Barometers. Reading tips from other developers like Atley Hunter I also wanted to focus a bit on features which help build a developer user relationship like feedback. I also wanted to try HockeyApp for beta testing so the app took three months to write (not full time), so I could explore some different features and such and this is time while spent as every app I write will have features and such that I researched and built during this time.
There were a number of things that I tried and certainly Template10 was a huge find as it gave me an excellent UWP foundation to build on and with the Template10 courses on Microsoft Virtual Academy I was very confident in using Template10 as my starting point.
HockeyApp I liked and I’ll talk more about why you should use HockeyApp below but my first impressions were its very useful for testing but still has some work to do for Phone Apps. For example deploying an app to my beta testers could be problematic if the app was using components/dependencies my testers didn’t already have installed as sending out the .appx file made the app installable by clicking on it, it didn’t install any of the dependencies, so I lost a few testers because of this complexity. If I deploy everything to my testers then they had to install a zip extractor and then work their way through the .appx files to install everything including the dependencies. I did find HockeyApp to be useful for finding problems during beta testing and will use it again and especially that I believe that they are constantly improving it and are addressing some of the issues I ran into.
Initial Release
Once I had completed beta testing the submission and release process is pretty straight forward and my app hit the store for download on Nov 2nd which was good as I was attending a MVP Summit Meeting at Microsoft starting on Nov 4th. I had included a way for user to email me suggestions, comments etc which some users used to send me messages about the units not displaying correctly. I had some code in the app which was supposed to check the user’s region/language setting and return if they used Metric or Imperial units and while I tested this for Canada and the USA, but it didn’t work for some countries/regions in Europe for example. I posted the problem in the developer forums and Microsoft jumped on it and are working on a fix for some language/regions where IsMetric doesn’t return the correct measurement units. That said however I had some users send me some feedback explaining cases where they might want to use the other units, so I planned to add the ability to select the measurement units in the app settings in the next release.
The other comment that I heard from a number of users was they didn’t like the ad banner. As I mentioned the idea of these app is to see if a developer could make a living doing this so I started with monetization via ad banners, which are pretty much trivial to add to your app and manage, so it allowed me to give the app away for free and yet hopefully make a small revenue stream. Users were ready, willing and wanting to ‘buy’ the app so they wouldn’t have to look at advertising.
The other comment I heard fairly often was around updating the Live Tile which I thought was interesting as users really like that so upon returning from the MVP Summit I had an update to work on which included adding unit of measure preference to settings, In App Purchase of an ad free version, updating the Live Tile, using Feedback Hub and a small bug fix as when a user changes their font size it can change the screen width and/or height and messed up my adaptive display for rotating the screen.
Coding the Update
One thing that I should mention is Microsoft has made In App Purchases very easy to code and manage, but testing it is a bit of fuzzy area. Now there are two options for in app purchases in terms of what library you use, one library is old and in the process of being depreciated and the other new. I choose the new library as while it requires at least the Anniversary Update I could tell looking at my Store Reports that most of my users were running the Anniversary Update so it wouldn’t be much of a problem. The old library had better testing as it allowed you to connect to a ‘test’ store where you could test having, not having made the purchase etc, but the new version is pretty much a black and white affair so I tested all sorts of negative conditions first like no network access to the store etc, not purchased, canceled purchase etc as once you have purchased the ad in, its yours and the there is no going back to not having the purchase so plan your testing accordingly. I also created a testing Add-on just for testing so I could test an actual purchase of the no ads Add-On once it had gone live in the store. The store process for the user is pretty good as once they select to purchase the Add-On in the app, they are taken to the store where they have to login and then approve the purchase and then the Add-On works immediately so they can be fairly confident that they are ultimately in control of the purchase process and get their purchased Add-On immediately.
Live Tiles and toast messages are also fairly simple and I’d highly recommend using the UWP Community Toolkit as it made this fairly simple. The UWP Community Toolkit should be in front and center in your toolbox as its full of coder goodness and will save you many hours of coding and testing as its intent is make your apps better and your life easier, what's not to like about that?
Releasing the Update
Again the store is pretty good for submitting and releasing your apps, but in my case my store reported crashes went up immediately which wasn’t good (the Developer Dashboard for the store gives you access to lots of reports so you can track how your application is doing). Looking at the crash data reported in the store I could see that the crash was happening in some countries but not others but I wasn’t getting enough information to figure out the cause of the crash, enter HockeyApp and some great users to the rescue. I built a version of the app using HockeyApp and then made the it available to some users who were having the problem and didn’t mind running the HockeyApp version which returned crash data to me immediately and from the stack I could see where in the code it was blowing up and with a little testing I found the exact cause of the crash, so now I could start on a fix. I sent the issue to Microsoft as if you called DateTimeFormatter.Format(DateTimeOffset.MaxValue) (which gives you a localized date time string) with some language/region combination, it would crash. I looked at the one case where because of threading I might pass a DateTimeOffse.MaxValue to the DateTimeFormatter.Format and determined that a correction for that which removed the problem from my app.
Releasing the Fix
Again the release process went very well and I took advantage of a store feature for promotions where you can generate free promo codes for apps and add-ons so that I could send those users who helped me find this bug a free add-on to remove the ads from their app, which was the right thing to do and again the promo codes were easy to generate and use so points again to the store there.
The Numbers
Downloads
You can certainly see the value of being mentioned on AppRaisin and WindowsCentral so when you release an app don’t forget to let the news sites know about it. So other then the opening rush, I’m seeing about 35 downloads a day, which isn’t a lot but really this doesn’t have a large market size as its Windows Mobile 10 and only for Lumia 950 and 950XL phones as they are the only ones with a barometer sensor so I wasn’t expecting huge download numbers.
Revenue
As you can see from the initial flat line, this app wasn’t making much from ads, but once the option to purchase an ad free version was released, revenue improved. This app made approximately $34.89 CAD for the month of November where about $1.48 CAD was from advertising and the rest $33.41 CAD was from users buying the ad free option over the last eight days of the month. So clearly, I should have had the ad free option available from the start, but the ad free option is generating about $4 CAD a day, which is more then I expected as I my target was about $3 a day so I’m happy.
Conclusions
For the first month, I’ve learned a ton and my revenue targets were passed by about 20% so I’d have to call this a good start. I’m currently working on another app and then once its released I’m thinking about going back and adding languages to this app to see what impact that will have. Currently this app is in 242 markets which are English only but available in a lot of countries and I see a lot of downloads in foreign countries so adding support for those countries likely makes sense and I have had users offer to help me with the translation, so once again Windows Phone users show that they are just a better class of user. I suspect that downloads and purchases will tail off in the future as there are only so many 950 and 950XL’s out there, but perhaps in the future someone will release a new Windows Phone which features a barometer sensor, or perhaps a Surface or other devices will a barometer, in which case it would be simple to support those with this app.
I do have a bunch more features that I want to add to this app which is good as it will help to keep the app fresh, so I’ll work on those as I get time between other apps that I’m writing, but otherwise I’m happy with the progress thus far and working on my next app which will work on a few more devices then just the phone and should be quite unique.