Don’t Design Your Own Graphics

You are going to be tempted to save money, and one way to do that is to make your own graphics.  Everyone thinks they can do this themselves, but only a select few are good at it.  The intersecting portion of the venn diagram of coders and graphic designers is relatively small, so be careful not to delude yourself into thinking you belong there when you don’t.  Even if you are pretty good, I recommend treading lightly here.  Your time is probably not best spent creating the graphics for your app icon and  your feature graphic, especially if it is not going to look professionally done.  If you’re not 100% confident that you are going to nail it, or if you don’t have the time (trust me, you don’t), outsource your graphic design.  Use a site like 99designs for something professional or something like Fiverr for something quick and passable.

 

Tip – Get to Know Collections.sort

Get to know Collections.sort and how to implement custom Comparators.  This might seem like a bore, but if you ever attempt to sort something by yourself or to figure out how to return the indices of something else that has been sorted, then you will thank me.  

For example, imagine that you have an ArrayList that contains lists of an object we will call WorkSet.  Now imagine that each WorkSet item contains a Date that can be grabbed with getDate().  Imagine that you want to sort the ArrayList of lists by the Date of the last element within each of the lists.  Sound like a nightmare?  Not with a custom comparator, it is actually quite simple.

Define a custom Comparator and Override its compare method such that it accepts two instance of List<WorkSet> and returns the following values:

  • Return a negative value if object1 is smaller than object2
  • Return 0 (zero) if object1 is equal to object2.
  • Return a positive value if object1 is larger than object2.

Then call Collections.sort, passing in the ArrayList of List<WorkSet> and the custom comparator.

ArrayList<List<WorkSet>> arrayListArrayListWorksets = new ArrayList<List<WorkSet>>();
...

// Sort the List<WorkSet> by the date of the last value in each list
Comparator<List<WorkSet>> comparator_workset = new Comparator<List<WorkSet>>() {
 @Override
 public int compare(List<WorkSet> set1, List<WorkSet> set2) {
 int last1 = set1.size() - 1;
 int last2 = set2.size() - 1;
 return -1 * set1.get(last1).getDate().compareTo(set2.get(last2).getDate());
 }

};

Collections.sort(arrayListArrayListWorksets, comparator_workset);

Always Include Device Art with Your Screenshots

This is going to be a short post, but it is an easy to miss no-brainer.  Always, always, always include device art with your screenshots before uploading them to your app store page.  If you don’t already know how to do this, you are probably asking yourself, “What the heck is device art?”  “Device Art” is simply a representation of a device, inside of which one can place a screenshot taken from an actual device.  This gives your screenshots the appearance of a high resolution photograph taken of an actual phone or tablet running your app, which would be very difficult to do well in reality.  This is easier to show with images than it is to explain with words, so here you go.  This is a screenshot without device art:

Screenshot_2015-07-11-15-59-39

And this is one with Device Art, in this case Nexus 5:

Screenshot_2015-07-11-15-59-39_framed

This makes your screenshots look 1000% more professional, which I have to imagine could not possibly hurt your conversion rate on the Play Store.  These can easily be created using the device art generator in the Google Developer Console.

Tip – Create a System of SOPs

Create a system of Standard Operating Procedures (SOPs) for yourself for anything that you think you may ever repeated or that you will need to train someone on.  The act of putting it together will slow you down in the short term, but it will speed you up in the long run and drastically increase your understanding of the subject, which cannot be overstressed.  The following are some examples of SOPs that can and should be generated:

  • Gathering User Requirements
  • Gathering User Feedback
  • Launching a new App on The Store
  • Launching an App Update
  • Icon Development and Testing
  • Social Media Strategy
  • Assessing App Analytics
  • Testing New App Features

What to expect when you’re expecting to update your app on the store.

This can be a scary time, especially if you currently have an app on the store getting good reviews.  One mistake in the upload process can send you home crying, or more accurately frantically back to the keyboard, trying to figure out what the problem is.  Now of course you have tested your app on every conceivable device in every possible condition that it might encounter in the wild.  Wait…what?  You haven’t?  Yea, that’s what I thought.  Here are some of the worst things that I can think of happening.  Not that they are the worst things, but they are the worst things that happened to me.  

Early on in my app building career, I didn’t realize that you can and should test both the Debug and Release builds of your application (Android Studio makes this much easier by the way – another great reason to switch if you haven’t already).  I know, a thousand apologies, I didn’t know much when I started out.  Well anyway I tested the Debug version, and everything looked great.  So I uploaded it to Google Play.  Everything looked good.  I uploaded it to Amazon and went to bed.  I got up, made breakfast, took a shower and made the trek to work.  On the shuttle between my parking garage and work, I read an email from Amazon telling me that my app had failed their tests and would not be launched (by the way Amazon actually tests each release before putting it up, something that Google does not do).  The reason:  the app crashes upon loading.  Now you can imagine my panic and how difficult it was to focus on work all day.  At the end of the day I rushed home to figure out what the problem was.  Now, you can’t roll back to a previous version on the store (oh if you could!).  So my only option was to figure out the problem and upload a new version as soon as possible.  Luckily I figured out relatively quickly that the problem was with Proguard and was able to fix it pretty quickly (if you have a Debug version that works flawlessly and a Release build that crashes from the getgo, dollars to donuts that Proguard is your problem).  By the time I released the new build I had had a day of one person updating the app, having it crash and immediately uninstalling it after another.  I don’t blame them, that’s what I would do.  

A simple tweak or upgrade to your UI can also have sneaky little consequences, sometimes only on a particular type of device (this is what really makes Android development a bear).  Once I snazzed up the UI on one of my apps by adding some simple background beyond the default theme.  Turns out that on some devices the code that I used causes the entire background of the view to be black regardless of the color specified.  Luckily, some saint online had figured this out, and I was able to solve the issue quickly.  But not before a 1-star review and who knows how many frustrated would-be users who quietly downloaded the app.  

Bottom Line:  Don’t take launching an update on the store lightly.  Subject every release build that is to be uploaded to the same level of rigorous testing, regardless of how trivial you think the update to be.  

Cultivate a Low Information Diet

Tim Ferris lays out the principles of the low information diet in his extraordinary book The 4-Hour Workweek.  It is highly recommended reading so long as it does not distract you from your primary goal of learning the ropes of Android.  Which brings me to the purpose of the low information diet: eliminate distracting activities from your life, as fun and as critical as you now think they may be.  If you are working a full time job, reading the newspaper, following blogs, checking your email 437 times per day, watching the morning and nightly news and listening to talk radio on your way to work, you may be experiencing information overload as well as just distracting yourself from time that you could be spending thinking about you application projects.

I’ve heard that Thomas Edison would completely devote himself to a single project until it was complete, not working on anything else until he found a solution.  Now of course this may not be an option for you if you are not independently wealthy, the proprietor of General Electric or just plain have other life responsibilities.  But still I think this is a valuable mindset when embarking on a project of considerable complexity.

The following are some examples (none of them particularly original) of how you might begin to cultivate a low information diet:

  • Take a break from the news, including on television, in newspapers and on the radio.  Just try it for a limited period.  If anything particularly groundbreaking occurs in the next two weeks, your friends and family will let you know.
  • Take a break from television altogether, or at least commit to a strict time limit every day.  Streaming services are great ways to limit your time as they prevent you from mindlessly checking to see what is on.  Beware of binge watching however.
  • Similarly, limit your time spend on social media.
  • Use Evernote to create a Media Queue for the internet content you consume on a regular basis (even this blog, it’s ok).  Devote some time each week to catch up on the items that will really add to your life and skip the rest.  You will be surprised how much more productive you will be if you incorporate just this one tool!

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.

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.