Network Connection Required

One thing I see time and again in mobile app development is bugs caused by syncing a local persistent data store with centralized data on a server accessed via API calls. An incredible amount of software development time goes into making the sync process smooth, elegant, and robust. Yet, in a mobile world with nearly-always-on network connections, we need to ask ourselves if the effort makes sense for all apps, especially for MVPs (Minimum Viable Products) of apps focused on content consumption.

Why is sync hard? Generally, it's a matter of the server and the client having radically different data store technologies. The translation that needs to mediate that disconnect can be complicated. A common scenario is for a mobile app developer to use a BaaS (Backend as a Service) like Parse. To take the example and run with it, Parse has an arguably excellent, easy-to-use API. Yet once the mobile app pulls data down from Parse, which will be in the form of Parse objects (PFObjects), he needs to translate it into a format suitable for storage in something like Core Data or SQLite.

This translation needs to happen in two directions (SQLite -> Parse and Parse -> SQLite). Further, consider the situation where the client accesses the application from two different devices simultaneously. Perhaps device one makes changes to the same piece of data as device two in their respective local data stores, and then both are synced with the Parse data store. Which revision should take priority? There are solutions to this problem (of course), and they're not necessarily complicated - but they are intricate when one considers corner cases.

Parse together with SQLite was just one example - perhaps the server-side is using an ORM wrapping around MySQL and the client-side is using Realm. Perhaps the client-side is just using NSUserDefaults... It really doesn't matter. The bottom line is it gets complicated. So complicated in fact that the well-known and highly regarded Mac/iOS developer Brent Simmons wrote a "diary" about his experience implementing sync for the note taking app Vesper.

Is it worth it? I don't believe so for the majority of apps, especially when they're in the get traction phase. It's not worth the potential bugs and it's not worth the development time. What's the alternative? Keeping the local data in a more flexible in-memory store - essentially a cache - and requiring a network connection to do any content creation.

The advantage here is that it takes away a step in the translation process. After the data is deserialized from the remote server, it can be used instantly and we're not beholden to worrying about multiple devices. The copy on the server is always the canonical copy when it's the only permanent data store. If the user tries to post a comment/post a rating when not connected to the net, we simply tell him he needs a network connection. Keep it simple. It's not ideal, but in a content consumption app, it's probably a minor annoyance rather than a deal breaker.

This doesn't work for apps that feature long form content creation (such as a note taking app like Vesper - or perhaps a video sharing app). They need something robust that ensures even if the network connection dies the user will not lose his work. But for apps that are all about consumption of content not produced by the user, or where the user's data input will never be more than a short blurb, perhaps the syncing madness is unjustified. I rather the user have the risk of once in a blue moon losing a star rating than be subject to a crash-prone MVP.

It goes without saying that as apps move from the MVP phase to the "we have more resources" phase, syncing becomes a much larger priority. The point here is that early on, sometimes syncing is just too much of a distraction.

Put a Date on Your Blog Post

There's nothing more irritating than reading a blog post, looking for a date, and being utterly unable to find a trace of one. There's a good reason for associating a time-stamp with a piece of writing, and that's context.

A lot of writing is a product of the time period from which it was created. That time period encompasses trends, motifs, and current events that fluctuate. Understanding those fluctuations helps one understand the motivation and biases of the author. It also informs an understanding of the author's conclusions and opinions.

Can you imagine reading Joseph Conrad's Heart of Darkness, not knowing it was published over a century ago, and questioning where the author's racial attitudes come from? No, because every book is dated and therefore you don't have to ask yourself that question. Knowing when it was published, helps you better understand Heart of Darkness through your understanding of the world from whence it came based on your outside knowledge.

Now consider a blog post about a technical subject, politics, or science. Its value is directly correlated with the context from which we understand it. We may not have any prior knowledge of the author, so that's a piece of context we may have to go without. He should at least give us a date!

Will Caffeinated Beverages One Day Be Judged Like Cigarettes?

How was it not obvious to generations of people that taking part in an activity that fills one's lungs with something other than air (smoke) might not be healthy? Actually, it was obvious to some, but the majority chose to live in ignorant bliss and not think through the issue. The public chose to be so ignorant that the tobacco industry had the gall to create corporate sponsored health studies showing the safety of cigarettes.

Never mind that there were obvious signs of smoking's unhealthiness that didn't need a study (or cancer) to become apparent. Didn't people have friends who were smokers who's voice changed? Who's exercise capacity diminished? Who coughed nastily?

Americans are now waking up to the dangers of refined sugar. It's not a secret that sugar is responsible for most of the current public health crises in America. Eat a lot of sugar, and you may very well get a chronic disease. Stop eating sugar and that disease may go away.

What do refined sugar, caffeine and tobacco all have in common? They all became widespread in Western society after the age of exploration (in other words their widespread use in the West is fairly recent, occurring over the past five hundred years and becoming pervasive in the past two hundred). They were all once trade commodities that wars were fought over. They are all addictive. And they all have had centuries of profit seeking corporations pushing them on the public.

Is caffeine as severe a drug as nicotine? Probably not. It may even have some health benefits (actually nicotine has some health benefits too). What it certainly does do to most people is raise their heart rates. That's obvious. Everyone knows that. It also, when taken in excess, makes a lot of people jittery. It probably doesn't give people cancer, but is it a good idea for people to drink several cups of caffeinated beverages a day and perpetually keep their heart rates unnaturally high and possibly affect their nervous systems?

Is a cup of coffee as bad as a cigarette? Almost certainly not. Doing either once in a while probably isn't a big deal. Will it one day be discovered that drinking a lot of caffeine, which has obvious side effects that everyone knows about, is connected with the development of a chronic disease. Maybe. This is not health advice, but for the record, I don't drink caffeine and I encourage all of my family not to either, although they don't listen.

A Time When Having No Business Model is a Business Model

The New York Times has a fascinating account of Google's purchase of Waze.  Waze does not make a significant profit.  The purchase by Google is clearly a strategic acquisition.  It seems increasingly common for large American technology companies to purchase small startups for incredibly high prices  for one of two reasons:

Niche
The startup provides an important technology missing from the company's portfolio.  This technology may serve a distinct, but important, set of customers (including developers); or the technology provides an important service for all customers.  An example of this would be Apple's acquisition of Siri in 2010, or Facebook's recent purchase of Parse.

Mindshare
Despite not having a business model (or at least a profit model) the startup has managed to attract a large base of followers.  This was the case with Facebook's purchase of Instagram in 2012, and Yahoo's purchase of Tumblr in 2013.  It was not as if Instagram held the keys to some incredible patented algorithm that Facebook's engineers could not figure out.  It simply had amassed a large amount of users in a space that Facebook was already interested in.  It remains to be seen in Four Square's case, if attracting a significant amount of loyal/influential users is as meaningful as the raw total number accumulated.

Anecdotally, it seems mindshare trumps niche when evaluating the size of these purchases.  The latter mentioned examples are an order of magnitude larger in dollars than the former.  Waze may check both the niche and mindshare boxes.

Of course, companies always made strategic acquisitions of unprofitable colleagues.  What is new is the incredible evaluations used when relatively tiny (but attractive) tech startups find their way onto the acquisition block.  This creates a whole new landscape for successful entrepreneurs to traverse.  One where acquiring users (or technologies) maybe ultimately as valuable as acquiring dollars.  So, perhaps it is not that these startups have no business model - it is just that they have no profit model.

Being Perennially Late Is Perennially Disrespectful

The old schoolchild maxim goes:
If you're early, you're on time.
If you're on time, you're late.
It's basically saying that if you respect other peoples' time (and time is the most precious resource of all, isn't it?) then you don't cut it close when showing up for an appointment. Unpunctual friends and business associates generally fall into three categories:


  • Disrespectful without care
  • Aloof to the disrespectfulness
  • Aware of the disrespectfulness but claim to be trying their best

Yes, the second category really does exist. There are people of such privilege, and other people with such a laid back 'hippyish' attitude towards life, that they really don't understand how frustrating it is to be waited on. This is because they hardly ever have to wait on other people, or live such an unstructured life that they have few precisely timed appointments. These people must be forgiven and gently educated.

It is the third category of offenders that deserves the most scorn, because the first category is a lost cause. If a friend is continually late, and doesn't put enough of an effort not to be, even if he apologizes, he is implicitly saying, "My time is more valuable than yours." Such arrogance is very ugly, even when it's true. A polite person, however important he may be, would never expose such an ugly side of himself. These individuals need firm reinforcement if one is ever going to feel like he is in a mutually respectful relationship with them.

Tell a perennially late and apologetic individual that you were on time and that you have been waiting. Say it nicely, but let him feel guilty, even if he apologized.

About Me

I teach Computer Science to college students, develop indie apps, podcast, and write books about programming including the Classic Computer Science Problems series and Computer Science from Scratch. I'm the publisher of the hyper local newsletter BTV Daily.

You can find me on X and GitHub. Check out my podcasts Kopec Explains Software and Business Books & Co. You can subscribe to my very low volume newsletter to find out about my future book, media, or software projects.

Copyright

©2012-2026 David Kopec. As an Amazon Associate I earn from qualifying purchases.

Based on tdSimple originally by Lasantha Bandara and released under the CC By 3.0.