Beware the Minimum Viable Product

The Minimum Viable Product (MVP) concept, first introduced in The Lean Startup and very popular in entrepreneur and startup culture, can be very helpful in getting started with mobile application development, but you need to be aware of a few caveats.  Your app may need to contain some very key features in order to be “viable” that may not be obvious to the absolute beginner.  By all means, if you discover that your original grand vision needs to be focused into an app that performs a core function, then you should focus on performing that function well.  Your idea was probably overly broad to begin with.  However, this approach to developing an MVP is not carte blanche to leave out application fundamentals that the user is going to be expecting.  In fact, this is probably the most critical rule to develop by:

Do not disappoint the user by leaving out simple capabilities that they have come to expect.

Case in point: The first version of my first application allowed the user to create workout routines, but it didn’t allow them to rename those same routines.  Oops!  As you can imagine this disappointed the users and led to bad reviews.  This is the cardinal sin for every app developer.  A disappointed, frustrated user is much more likely to leave you a bad review then someone who doesn’t quite agree with your choice of colors for the background or didn’t think that your icon really “popped.”  The reviews that you want to receive from your customers are of the sort, “It would be great if you added feature X…” not, “It is terrible that I cannot Y…”  Obviously, this is only partially in your control but not leaving out important features will go a long way here.

Far more important than looking snazzy (though this is important as well) is not deviating in a negative way from users’ expectations.  In short, if users expect a feature to be there, it should be.  The short list of requirements for the minimally viable app is as follows:

  • The app does not crash – The very first thing a user expects from an app is that it does not crash.  This is of course obvious but is far and away the most important feature of an app and the most difficult to attain, especially in Android with the litany of available devices and manufacturers.
  • Created data can be updated and deleted – If the user can create it, they should be able to delete it as well.  Likewise, they should be able to update it (rename it, change any of it’s important features etc.).  This means all of your CRUD (create, read, update, delete) operations should be defined in your data scheme and should be available via the user interface as well.
  • Data can be synced – If the user can save data that might be important to them, that data should be recoverable if they switch devices or if their device is lost or stolen.  As a bonus, it would be nice if that data synced across their multiple devices.
  • The app needs to have a unique icon – There is no way that I am aware of to get you app into a user’s hands without them first clicking on your icon.  It needs to look like it took someone with some skill more than 5 minutes to create, it needs to not be too busy, and it needs to convey what your app does.  People choose between high ranking apps based on their icons, and they would be silly not to.
  • The app needs to look good – It is very tempting to put this first and spend alot of time or money up front creating a beautiful looking app, and if you are going up against true professionals with large budgets, you are going to need to do this at some point.  But far more important than this is that the app not crash and not be missing obvious features. If you have the time and wherewithal to include an eye catching design in your application, this will certainly pay dividends in the success of your app. First and foremost it gives the appearance of a professionally developed application, but a nice facade on an app riddled with bugs will not get you very far.  On the other hand, a solid application with the default themes and styling at least has a chance to gain an audience.  At the very least, style your buttons and change the default colors of your themes.

With these minimum requirements, release your app and keep an eye on your ratings and reviews.  Fix bugs and add features based on what your users are asking for.  Re-release, rinse and repeat.

Tip – Hemingway Yourself Back Into High Gear

Have to leave the room for 10 min, an hour, two days (banish the thought)?  I’ve heard the Ernest Hemingway used to leave unfinished sentences on his typewriter if he had to walk away from his work.  That way  when he returned, he would be able to easily get back in the swing of writing.  I don’t really care whether this is true or not, because I think it is good advice regardless.  Before you leave, type something where you are working, such as a partially complete line of code or a note-to-self preferably in plain English but not in Java so that a big red error will appear in your IDE.  That way you will be able to pick right back up where you left off.

How to Know Whether It is Worth Your Time to Develop an App

How do you decide whether or not to develop the app that you have in mind?

To me this is basically deciding whether a problem needs to be solved, why it is you want to solve it and whether it is worth your time.

There are no hard and fast rules that tell you before hand whether your app will be successful.  However there are a few general keys that I like to go by:

  1. If you search the store and don’t find anything, that can be a bad sign.
    1. Maybe you are just using the wrong keywords, which indicates that you are either unique or that there is space available to rank for those keywords.
    2. It can also mean that no one has thought to develop the app you are looking for, but it behooves you to find some people with the particular pain point you are looking for before you spend your time.
    3. It can also mean that people have researched it and decided that there is insufficient market available to make it worth their time.  If you start to find that this is the case, walk away slowly.
  2. If you find a few apps that you think are poorly done but are still getting alot of downloads, this is a good sign.  Someone has thought this was a good idea (or multiple someones), and there is an opportunity for you to outshine them.  Be forewarned that ranking highly can take time, but it is totally satisfying.
  3. If you find a couple of really well made apps that don’t rank that well, that’s still good news for you.  Maybe the developers are not managing the apps well and not optimizing them for the same keywords you are searching for.
  4. If you find several really nice apps that do rank well, then you have some soul searching to do.  Is there a unique value proposition to your app or a reason that you think you can develop an app better or more useful than these?  If you think you can run with the big dogs, then by all means, give it a shot.  But it is not going to be easy, and you are not going to be making a return on what is going to be a significant investment for quite a long time.
  5. The holy grail is the underserved, highly searched keywords.  Perhaps this is the unicorn of app development, but it is what you are striving for nonetheless.

For researching app store keywords, tools like Mobile Action and Sensor Tower are indispensable.  Mobile Action is my favorite because it allows you to get your feet wet and to get some actual value for free.

How Do I Know When My App is Ready to Launch?

An Unexpected Dilemma

To the uninitiated the answer to this question might seem obvious, but in reality it is not.  Every app launches with bugs.  Every app launches with an app description and an icon that could be better thought out and further tested.  Every app launches with features missing that at least a segment of the user population would gain benefit from or are annoyed in their absence.  So this is a very relevant question indeed.

Faced with these issues and the fact that most solo or small company app developers do not have a strictly defined timeline for app development and release, it can be difficult to decide when the time is right.  So I have developed this list of questions:

# 1 Are you ready to share the app with close friends and family?

If so you are at least ready to release a beta version of the application for testing.  This is true whether you are releasing your first app as a hobby or whether you think you have the next Uber on your hands.

# 2 Are you ready to share the app with your extended network of friends?

Is this still true even if in the back of your mind they are more likely to judge you than to accept and support you?  If app development is a hobby or side hustle for you, you are probably ready at this point.  Politely let everyone know why you have been a recluse for the last 6 months and ask them to check out your work and provide their honest feedback.  Don’t badger them, and you will be surprised at how helpful and supportive they can be.

# 3 Are you ready to pay money to market this app to the general population?

If yes, you have a strong indication that you are ready for launch.  Be smart though and don’t sink your life savings into an unproven venture.  Make you marketing moderate and carefully targeted with an eye toward ranking for your top keywords so that your investment has strong downstream effects in the long-term.

A Justification for all of This Subjectivity

If you have noticed, these questions all stem from your subjective comfort level with the app rather than from some objectively defined criteria.  The fact is there is no such set of criteria that applies to all apps and all situations, and before release no one is more familiar with your app than you.  Further, if you are not willing to answer these questions in the affirmative, then you are not likely to make hard decisions or do the timely work that it requires to make sure your app is a success all the way to the finish line.  You will evade the difficult tasks and may not take full ownership in the consequences, feeling safe in the knowledge that the app was not your best work and not ready for prime time from the beginning.  Responding to frustrated customers is hard enough for something that you believe strongly in.  If you are not properly prepared, it can be very easy to give up, admit defeat and move on to the next project.

If you answer question 3 in the affirmative, be careful that you can also answer yes to 1 and 2.  In some ways it is easier to push an app out to strangers that you would not share with people you haven’t seen since high school.  It is surprisingly easy to hide in the comfort of the obscurity provided by the enormity of the app marketplace.

If you are asking yourself or your team this question, take a moment for some soul searching, and remember to always keep moving forward.

Tip – Resist the Temptation to Put EditTexts Inside ListViews

You may be tempted to put EditTexts within ListViews.  In some very rare instances, this may be a good idea (if the data to be entered is very short, like a number or a phrase). However, it is quite difficult to code and is cumbersome on medium to small screens.  Resist the temptation and opt instead to put data entry in a dedicated dialog, fragment or activity.  This is a common theme of things I have found in Android:  If the designers didn’t make a solid plan for it, and I needed to do alot of thinking/hacking in order to make it work, then it usually turned out to be a bad idea in the first place.  You can have one of two mentalities:

    1. You can buck the trends and assume that the developers at Google are stupid and not paying attention and that you know better (occasionally you might).
    2. Or you can get with the program and save yourself a ton of headaches.

The Perils of Hunt-and-Peck Style Programming

My grandfather is 81 years old, and he can hunt-and-peck on the keyboard with the best of them.  That’s fine for him.  He didn’t learn to use a computer until he was in his 70’s, and he is getting along just fine.  However I would not recommend to my nephew that he learn to type without a systematic understanding of the keyboard.  As I explained in my last post, it is not best practice to jump right in to the development process.  It is very easy to learn enough to be dangerous (to yourself and others) and go down the following path:

  1. Download Android Studio
  2. Go to Stack Overflow and ask:
    1. What does onCreate() mean?
    2. What is a Fragment?
    3. How do I make a button do something when I click it?
  3. Copy and paste the resulting code into your project and change the variable names.
  4. Smoke test your application on the emulator or on your device.
  5. Read the Stack Trace and paste the error into Google
  6. Rinse and Repeat

Knowing the Grammar of the Android Development framework will go a long way towards speeding your applications development, just as learning to type without looking at the keys will help you bang out that crime novel.  Don’t fall into this trap.  Learn the fundamentals of Android development and get off on the right foot.

Tip – Draw Everything Out on Paper

Draw everything.  Got an idea for a new app?  Sketch out the screens and how the activities will work with each other.  What data will be stored and how will its components be related to each other and to the user interface?  Want to switch up the design of an app you have currently?  For Pete’s sake before you start writing code, sketch out the new layout.  Just as importantly keep these drawings in organized storage to refer back to later!!! This will save your bacon when you come back to make updates after 3 months of working on something else, because I almost guarantee that the code you wrote is not as intuitive as you currently think.

Don’t Just Jump Right In to Android Development

This is going to be controversial, but if I could give you just one piece of advice for starting out on your mobile app development journey it would be this:

Don’t jump right in to the development process.

I am a firm believer that the best way to learn is by doing – by involving yourself in a project and getting your hands dirty.  So my advice may seem paradoxical, but having gotten myself out on the wrong foot, I can testify that obtaining a minimum level of proficiency in Android development skills is essential in reaching your goals.

As lifehackers and self development gurus have noted, there is a distinct difference between Just-in-case learning and Just-in-time learning, with the later being considered (rather naively in my opinion) the hands-down winner in terms of efficiency and effectiveness.  As usual, it is prudent to take a more nuanced perspective.

There is a trade off between Just-in-time learning and Just-in-case learning.  A delicate balance must be struck in programming, because not knowing the fundamentals can really waste your time and/or get you in trouble.  On the other hand, you can easily delay getting started by reading just one more blog post or doing just one more tutorial just in case it might contain something you might need to know.  The best strategy is to learn the basics, then jump in to a project and figure out which of the details you need to pick up along the way.  Trust me, you will thank me for this tip!

It is attractive to think that you can download the Android SDK, watch a couple of tutorials, download and peruse a handful of samples, and get started building your own applications.  You can certainly do this, but what you create is going to be a messy, confused, hacky peice of crap that isn’t going to do you much good in the long run.  If you are a persistent person who has a hard time letting go of bad investments, then you are going to want to fix this Frankenstein monster as you slowly and painfully learn by experience the right way to do things.  Don’t get me wrong, no matter what you do you are doing to end up with a mess on your hands, but this one is going to be hard to move on from.

In reality there is a system of knowledge, that once you have it, changes the way you absorb the information that you are presented and vastly improves your ability to integrate it into your development repertoire. In the language of the medieval Trivium, you must first understand the Grammar associated with Android development before you can properly understand the Logic and subsequently synthesize an application (Rhetoric).

This is a list of what I consider the minimum requirements for getting started developing android applications.  This can be thought of as the Grammar:

  • Java – I highly recommend buying a book and/or going through the lessons and tutorials on howtoprogramwithjava in order to get started.  You need to be able to answer at least these fundamental questions:
    • What is Object-Oriented Programming?
    • What is a Class?
    • What is a method?
    • What is meant by the following terms?
      • Static
      • Protected
      • Private
      • Public
      • Package
      • void
      • null
      • String, float, int, double, List, Map
    • You need to know what these magic words can do:
      • if/else
      • switch/case
      • for
      • while
      • break
      • return
  • XML – You should know in general how it is structured and specifically what it is used for within Android.
  • Android – On Top of Java and XML sets the Android system, which integrates these two into the actual application.  You should be able to answer these questions before starting out.
    • What is the manifest and what does it do?
    • What is the relationship between the Java files and the XML files?
    • What is an Activity?
    • What is a Fragment?
    • What’s the point of the strings.xml file, and why should I put strings there instead of hard-coded into my application files?
    • What is the application lifecycle?
  • Android Studio – I highly recommend getting started with Android Studio instead of Eclipse.  You should at least know what Gradle is and how the associated files are used to manage your apps dependencies and how you can incorporate different build variants of your application.

You also need to know where to go when you get stuck.  First of all, and I realize that this sounds low-tech, I recommend buying a book to learn the basics of Android development.  My personal favorite is The Big Nerd Ranch Guide, but there are many great ones out there I am sure.

The Google Documentation is a very helpful place to start and is the definitive source for information about Android Development that gets better every time I go there.  But do keep in mind that you need to know the basics of Java and XML in order to comprehend the documentation.  Be careful of the Reference documentation, which is well and good for those who know very well what they are doing and nearly useless for the beginner.

Stack Overflow is a powerful tool and a terrible master.  Use it wisely.  It is the definitive place to go if you know the ropes pretty well but have a very specific problem that you are trying to solve.  I myself have been there hundreds of times, and without fail, someone has already asked the question that I am looking for.  The major caveat with Stack Overflow is that, by its nature, it is not an integrative approach to solving your particular problem.  If you don’t fully understand the code solution that is presented there and blindly paste it into your app, get ready to experience some problems sometime between today and 6 months from now when you have forgotten the details of the problem.

I also highly recommend bookmarking a few tutorial sites for your reference.  Vogella is my personal favorite, but again there are many good options out there.

The App that Will Hit It Big and Other Unicorns

I know you.  You are like me and you think that you are going to release a beautiful, world-changing app onto the market and it is going to allow you to hit it big.  It is going to be practically devoid of bugs (you are a realist after all).  It is going to have an intuitive user experience, and it is going to allow the user to do everything they could possibly want.  You are going to rank at the top of your target keywords, have thousands of retained downloads per day and make a bundle with ads and well-crafted in-app purchases.  Everyone is going to ask where this one-app wonder came from, but in your mind this is just the beginning.

Let me tell you another tale.  You have never gone fishing, but how hard could it be?  You are going to take a pole, the best one you can find.  You will ask local fishermen for their advice on the best bait to use and the best time of day to fish.  You are going to scout for the perfect hole and once there, you are going to get busy.  So you carefully cast your bait into the water and wait patiently for the big one to bite.  Nothing happens.  You wait.  You cast and cast and cast into the hole again and again.  Still nothing happens.  What do you do?  You’ve geared  your entire trip to this bait, this pole, this spot, but you have come up empty.  You need to increase your chances.  Sure, your persistence could pay off, but if the fish aren’t there or they aren’t biting that day or you were given bad advice about the bait, you’re stuck.  This is why you need to prepare for your fishing trip.  You need to bring multiple lures, maybe even multiple poles.  You need to scout out different holes and move from one to the next if you are not having any luck.  You may need to show up on multiple days, at different times of year or under different weather conditions.  All you need to know is that people are pulling fish out of this body of water, and you can devise a strategy for success.

So let’s come up with a factor called line-hours that is simply the number of lines you have in the water multiplied by the number of hours you have them in.  Obviously, as you rack up more line-hours, you can expect your likelihood of catching fish to go up.  If possible, you should devise a way to put multiple lines in the water at once!  This doesn’t work for all manner of fishing, but fortunately it does apply to app development.  The more apps you have on the store, the more users you can reach.  The more keywords you try to target in the more varied niches, the more likely you are going to rank well for one or more of them.  So your objective starting out has to be the development of a system that will allow you to put out good quality content at a regular clip.  Given a handful of ideas for apps that you think should be simple to develop, you should be able to evaluate the one most likely to succeed and have a minimally viable version of it ready for launch in 2 week’s work.  Unless you have a team of developers, you are not going to compete with Facebook, Twitter or Instagram in form or functionality.  While you may have the skills and the time to do so, your chances of success are so slim that it does not behoove you to overdevelop a single strategy out of the gate.

Don’t go to one hole with one bait and expect to pull out the fish.

Why Do You Want to Develop Android Applications?

Before starting, it is critical to establish, at least in your own mind, why you are interested in developing Android applications.  For this purpose, I think it is helpful to separate the crowd into a two main categories:

  • Category 1 – Those starting for their own reasons:
    • I want to start my own business
    • I want to learn a new skill to put on my resume
    • I want to delve into a new career path (I hear people are hiring Android developers)
  • Category 2 – Those starting for exogenous reasons:
    • I am a high school or college student creating applications as part of my coursework
    • I am a programmer at my day job, and my boss really wants me to learn to develop applications for a project.
    • I’m homeschooled and my Mom thinks this will look good on college applications.  Kudos to you by the way, and good luck with your applications.

If you fall in Category 2, then my job is pretty easy.  Either you are motivated to learn Android, or you are not.  Either way you’re going to grin and bare it.  If this is you, feel free to stop reading this and go on about your day.  We’ll catch you next time.

Likewise if you are starting a new career or if you are gathering skills for your resume.  You’ll do well to follow future posts, but the motivational aspects bringing you here are pretty cut and dry.

The only subcategory remaining is the App Entrepreneur wanna-be.  You my friend are a horse of an entirely different color, and we are going to have alot of fun together.  You are an unreasonable dreamer, and you feel like an imposter just mentioning the idea to friends and family.  Do you know how unreasonable you are?  There are X million apps out there, everything that you could possibly want to do on your phone has been done already.  And on top of that, Y% of all new small businesses fail within 2 years (or 1 year or 6 months, whatever the statistic of the day is).

You may fail, that much is certain.  But imagine a game of darts where you get to pick off your bad shots and keep throwing them until you get them in the bullseye.  That’s what we’re dealing with here.  Day after day, app after app, release after release, you get to pick your shots.

Now you need to think about your reasons for going down this path, even if you are a good ways along it already.  Write them down if only for your own edification.  If you are comfortable, I would like you to share your reasons and motivations with the community in the comments to this post.  Alternatively, I would love it if you emailed them to me, and we can have a one-to-one on the topic.