Software Is Hard: What It Takes

I recently wrote about why I?m glad I?m no longer a full-time developer. In my eyes, my life is more at ease without having to worry about the stringent demands that an app producer must adhere to in this world. I?m free to be the tinkerer that I?ve always been at heart. All in all, this realization has been a positive one for me.

That isn?t the full story, however. There is one factor that outweighs all the others.

This other factor isn?t pretty. It?s negative and unpopular. Taken out of context, it has the capacity to alienate the very people that matter in any marketplace (the consumers). At the end of the day, though, any developer who doesn?t feel it on his shoulders is either lying or delusional.

That one factor? I call it the disconnect. It has a simple premise: no matter the level of effort you give to your app, it is nearly impossible to convince Average Joe Consumer that what you do is just plain hard. You are the keeper of a privileged set of knowledge, and in that lonely realm, your users? demands far outweigh their understanding of what it takes.

An Expanded Horizon

The ?age of apps? has done something fundamental to society. Reliance upon smartphones has increased, as has the expectation that the technology will work in a manner befitting the user?s expectations. In a short span of time, users have become accustomed to a certain user ?app experience.? Smooth animations, effective interactions, and flawless experiences have become the norm.

Those norms, however, are not easy on developers. A simple example is text entry. Here?s what a user might see:

1. I touch on a text field to begin entering a phone number.
2. I touch the appropriate numbers on the keypad: 1234567890

As I type, the phone number appears in the text field: (123) 456?7890

3. If #2 takes longer than a microsecond, I become frustrated.

A completely valid interaction. However, consider what that same interaction looks like from a high-level developer?s eyes:

  1. I write code the draws the text area on the screen (including the text area?s position, size, etc.).
  2. I write code that detects when a user touches on this text area. In that event handler, more code is written to pop up a keyboard (which, thank God, my framework includes by default; otherwise, I?d have to do it all myself).
  3. I write code that detects when a key is pressed while my text area is in focus. With each keypress, I do three things:
    1. I store the value in a variable (so that it may be used in its raw form later).
    2. I create a string of text that formats the phone number appropriately. This involves keeping track of how many numbers I have so that I can put parentheses and a dash in the right place.
    3. Each keypress also carries code to validate the text thus far; if at any point I detect that the user has entered an invalid phone number, my code presents a warning to the user.
  4. I ensure my code is written in such a way that it will not bog down any other process created by the app.

Yikes. That?s a large operation just to allow a user to enter a phone number.

I don?t even want to get into what it takes for the smartphone to actually render all of this in pixels.

The hard truth is that users have come to expect perfect operations without knowing what they?re asking for. The ?app revolution? happened too quickly; 99% of users never gained an appreciation for what such a production takes. No longer does society marvel at technological wonders; empowerment has created a world of expectation.

Such a schism has only contributed to the disconnect.

When Something Goes Wrong

There is a time, however, when the average user is inclined to notice the efforts of the developer: when they don?t work.

There are some errors that are particularly jarring, such as the uncaught exception that crashes the app completely. Those, however, aren?t the only issues to draw the ire of users; because of their heightened expectations, even simple issues ? like a menu taking a second too long to load, or a data list outputting its elements in the wrong order ? invite disappointment and anger.

Unfortunately, only a small portion of users report their frustrations to developers directly. The majority do the worst thing possible: they leave a negative review on the appropriate app store, and because of the rules those app stores enforce ? no way to dispute bad reviews, review palettes that start from scratch with each app release, etc. ? developers are punished, many times unfairly.

The disconnect is widened in an environment where users? high expectations ? and lacking understanding of what it takes to develop software ? are mixed with an all-too-easy-to-be-flippant review system. One has to wonder how many hard working, enterprising developers have been stung with one-star reviews that read, ?I don?t like this app; it?s a waste of $0.99.?

The Way Forward

Developers work their tails off. In my time away from professional software development, I?ve come to respect them more ? even when their apps inevitably fail.

The question remains: what can you, dear user, do to help? The way forward is, I believe, simple:

  1. In using your daily apps, consider what it took to build them. You don?t have to be a programmer to appreciate an easy user experience, a beautiful design, and clean, simple functionality. Allow your viewpoint to include an appreciation of their efforts.
  2. When apps have issues ? and they will, I promise ? contact the developer directly (Twitter, email, etc.). Give them a chance to work with you directly.
  3. If you feel the need to write a review in an app store, don?t be flippant about it. Save your 1- or 2-star reviews for those apps that truly deserve it.
  4. When you truly enjoy an app, share those feelings with the developer; use those same ?personal? channels, like Twitter or email, if you can.
  5. Take time to understand how the app stores rank their apps. Don?t use this for nefarious means; rather, let it influence more potency in your decisions.

The disconnect helped to remove me from the development game; although I am at peace with my decision, I want to see future developers grow, succeed, and thrive. Your decisions ? and your outlook on their craft ? matters a lot and is worthy of your attention.


This is a guest post by Aaron Bach. Find more of his great insights on his blog over at:


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>