Lets say 75% of the people in the United States make lists or use a similar organizational method to remember stuff. I had trouble figuring out an exact number - try searching for “percentage of people who use lists” - 3 of the top 10 responses have to do with making lists of people you’ve had sex with. Not exactly what Jottpad is for, but hey, however you want to use it is fine with me.

Anyway, if 75% of people are using lists and the number of iPhone users in the US is around 18.5 million as of March 2011. The potential user base of a list type app is about 14 million. You do the math - Jottpad is not breaking any download records in the App Store.

But, I am not discouraged. There is a potential market in the United States of 14 million iPhone users and worldwide that number is significantly more. Nearly 75% of iPhones are in use outside the US.

Why then, if the potential market is so big are the sales so small…

  • The market is saturated with list apps
  • The market is really saturated with list apps
  • The market is really really saturated with list apps
  • The market is really really really saturated with list apps
  • Jottpad is on version 1
  • Jottpad is feature-light
  • Jottpad has no marketing, except me, and I’ve never done this

The list app market seems to be the hello world of the App Store. Hello world essentially meaning the sort of app one would build to learn programming on the iPhone. Tekpub, a video based instructional site, used a list app to explain iPhone development.

Every day you’ll see 5+ new apps show up in the Productivity category that essentially do what Jottpad does but without one key element - Syncing & Sharing via Jottpad.com - not Dropbox or a third party website. Jottpad.com gives me the ability to control my own destiny.

How to Measure Success

Ok, big potential market, Jottpad has control over its destiny, that’s all great but how does it equal more downloads and sales. Well, downloads and sales are just one metric of success. Granted it is THE metric of success used for the App Store but there are other ways to measure success.

My goal is to get enough downloads/sales to justify all the work I’ve put in & sustain future development. While I’m building the user base to that point I need other metrics to keep from getting discouraged.

  1. Happy Users. Build an initial base of people using Jottpad on a daily or weekly basis. These early users will hopefully tell other people about Jottpad.
  2. It Just Works. Ben Brooks wrote a good explanation of “It Just Works”. My take on it… Don’t make users feel stupid.
  3. Build a useful product. No amount of numbers 1 & 2 will matter if Jottpad is not useful.

If I execute on these three points I’ll consider Jottpad a success. And hopefully the downloads and sales will follow.

What Comes Next

Go really fast. until a big decision needs to be made then slow down to do it right. Add worthwhile features, in a way that makes sense, which contribute to the overall vision of Jottpad.

“Everything should be made as simple as possible, but no simpler.” Albert Einstein

I don’t usually believe in mission type statements having much value but for a one person product like Jottpad I refer to this motto. In practice this means taking a highly requested feature like adding date & time reminders to items - getting it in the hands of my users as quickly as possible, but not until it’s ready. In other words, work on the highest priority, get it done as fast as I can, and make it really good. Repeat.

Posted
AuthorRichard Hochstetler
CategoriesUncategorized

I made a bone-headed move getting the word out about Jottpad and it’s been eating at me for the past week.

Being a 5by5 listener I knew Dan was in the middle of a move to Austin, Texas. So I sent him a tweet with a couple promo codes to check it out.

Bone-head Marketing 101

It might not seem like that big of a deal. I honestly thought he might find some use in Jottpad for sharing information with his wife while during the move to Austin. Obviously I was also trying to market Jottpad. If Dan liked the app and found it useful he might mention it on one of his 5by5 shows.

But, I have two issues with what I did.
1. As Dan pointed out putting Promo Codes in a public tweet made me look like an idiot.
2. I hastily composed this tweet - somebody in the middle of a move doesn’t need bothered with this sorta thing. I am in the middle of a move myself & the less you have to deal with the better.

Why is this seemingly simple thing still bothering me? Well I respect what Dan has done. I listen to a 5by5 show just about every day. I don’t want Dan thinking I’m a bone-head. And I don’t just want to blindly spam people with Jottpad. I don’t think I did that in this case but it could have come across that way.

So lesson learned. Don’t send quickly composed, not completely thought out tweets when promoting your app - you’ll look like a bone-head.

Posted
AuthorRichard Hochstetler
CategoriesUncategorized

In episode 23 of Build and Analyze, a 5by5 podcast with Dan Benjamin and Marco Arment. Marco answers a question about syncing and hosting for a mobile app with a web/hosted back-end.

Around minute 23 Marco reads a question from Ryan and starts talking about syncing issues.

“The reason why most apps that could use sync don’t have it, isn’t because hosting is expensive, it’s because syncing is hard. Syncing is really hard, to do syncing properly…”

Marco knows what he’s talking about, his experience creating Instapaper adds great insight.

Syncing is the feature I struggled with building Jottpad. Jottpad is a simple iPhone app, only 5 screens - Login/Register, Lists, Items, Settings, and Sharing. Without syncing this app would have taken around a month, with syncing, about 6 months. I was building the API on the web side & consuming the API for the iPhone app. This is also my first foray into iPhone development & the first time I’ve built this level of syncing logic.

Now would be a good time to point out that while composing this post I discovered writing about why Syncing is Hard… is hard, so grab a beer & keep reading.

Why is Syncing so Hard?

  1. 3 Step process
  2. Smallest amount of data possible
  3. Multiple devices
  4. Delete is not as simple as you think
  5. Conflicts

3 Step Process
Any sync action requires at least 3 steps. I’ll illustrate with a simple Add List action from the iPhone to Jottpad.com

  1. Add List “payload” sent from iPhone to Jottpad.com. Jottpad.com creates List record to match what was added on iPhone. Also creates a DeviceSync record to store the current status of the List for all Device/User combinations.
  2. Response from Jottpad.com to iPhone including additional data from Jottpad.com such as Id of List record created on Jottpad.com. iPhone updates with ListId from Jottpad.com & marks a SyncDateTime timestamp on the List.
  3. Acknowledge the response (send a SyncAck) to Jottpad.com. This SyncAck closes the loop and assures Jottpad.com is in sync with the iPhone. Jottpad.com marks a SyncDateTime timestamp on the DeviceSync record.

The SyncAck step might seem like overkill but I found it necessary to ensure knowing Jottpad.com & the iPhone were in sync. This step helps facilitate the next step by keeping a snapshot of the current Sync state on the iPhone & Jottpad.com.

Smallest Amount of Data
Speed is a feature. Sync the smallest amount of data & only when needed. This is common sense, but in practice requires a lot more work than syncing everything, every time. Only sending the smallest subset of data on each sync requires tracking the status of all data elements that could potentially need synced. In the case of Jottpad this means each List & Item have individual Sync status per device/user combination the DeviceSync record.

My wife walks into the grocery store and opens Jottpad on her iPhone. This initial syncing when you launch Jottpad I’ll call “Munging” - basically figuring out everything that has changed since the last time you launched Jottpad on the iPhone. The idea here is to only send data from the iPhone to Jottpad.com which has not been synced & only send data from Jottpad.com to the iPhone which has not been synced. This initial Munge, each time you launch Jottpad, is by far the most logic (lines of code) & data intensive (amount of data elements to compare) operation so it needs to be fast, reliable, & most importantly just work.

  • In this case everything on the iPhone has been synced to Jottpad.com so the initial Munge is asking for anything that might have changed since the last sync on Jottpad.com
  • Jottpad.com gets the Munge request.

    • Check the payload from the iPhone for any changes - in this case nothing.
    • Determine if anything has changed on Jottpad.com that needs synced to this iPhone. Yes - we have a new List - this needs sent back down.
  • iPhone gets response from Jottpad.com with info about new List. Do the add and send the SyncAck back to Jottpad.com.

  • Jottpad.com receives SyncAck & marks the new List as synced.

This is a simple Munging scenario but the underlying logic is the same regardless - only send the data elements which have been modified, added, or deleted since the last sync.

Multiple Devices
Syncing with one device is easy - you can hack in a couple extra columns on the List & Item records for LastSyncDate and call it a day. When you start syncing with multiple devices the complexity grows quickly. Along with that complexity comes a bunch of potential bugs & edge cases. Again, this seems like common sense, but it bit me in the ass when my first design for syncing fell apart.

Delete
Delete, it seems so easy. Swipe right on the iPhone, tap Delete. I found Delete Sync logic to be the most convoluted of the three Sync actions - Add, Modify, Delete.

Syncing a Delete action is backwards. The problem being once you Delete an Item, it’s gone. How can you sync something that is gone? What about all the other devices that have already synced the Item you just deleted?

Let’s look at another example to try and clarify…

I share a List with my wife - Things We Need. I go to the store, check the list & see we need a new coffee grinder. I buy the coffee grinder and instead of just checking it off the list, I delete. Why? Well I’m pretty sure we won’t be buying another coffee grinder anytime soon so there is no reason to keep this on the list. My iPhone Syncs with Jottpad.com, the coffee grinder is deleted, gone on my iPhone and gone on Jottpad.com.

Meanwhile my wife is also on her way home from work and stops at the store. She opens up Jottpad, sees we need a coffee grinder, buys the coffee grinder and also deletes it. Uh-oh, she gets an error trying to Sync - something something “object reference not set to an instance of an object”. She makes a mental note to tell me about Jottpad having issues, gets in the car and goes home.

Not only do we now have 2 coffee grinders but Jottpad has a serious issue - deleting from my iPhone is not getting synced to her iPhone - what happened & how do we fix this?

Well I started with not actually deleting the Item that was deleted - you put it into a MarkedForDelete status. Think of MarkedForDelete as putting something into the Trash on your computer. It’s still there but not really. Jottpad.com needs to be the master record - I can’t delete from Jottpad.com until all devices that have synced the Item coffee grinder have been synced. At this point the MarkedForDelete Item can be safely deleted.

Conflicts
Conflicts happen when two people Modify the same item before the other person has synced the changes. In other words, syncing a modified item from the iPhone with a modified item on Jottpad.com.

The simple fix is create a ModifiedDateTime timestamp on each record, do a compare on ModifiedDateTime whenever you munge and the newest, most recently modified item wins. Essentially this works, although it can be a little weird if you modify an item, sync, and the item comes back as a different value then what you just modified and synced. This is definitely an edge case and in an ideal world I would have built some sort of merge dialog which would ask the user which value they want to use - but I copped out for Version 1 cause at some point you have to ship the product.

Wrap it up
Syncing is hard, writing about it is hard, and if you’re still reading this you are either:

a. Writing syncing logic and looking for somebody else to share in your pain
b. My wife graciously proof reading this Opus

Posted
AuthorRichard Hochstetler
CategoriesUncategorized

Let’s start with what it’s not - task management. Jottpad is not a task manager. Well at least not yet. If you want a task manager get Omnifocus or Things.

jot
verb (used with object) jot¬ted jot¬ting
1. to write down quickly or briefly

Jottpad is for quickly recording any thought & organizing those thoughts into lists. Or, another way to think about it, creating lists of things that you need to remember or don’t want to forget.

For Example…

Need to Remember

  • garlic for the garlic mashed potatoes
  • mundane weekly shopping list items such as dog food or garbage bags

Don’t Want to Forget

  • that new restaurant which is opening next weekend
  • planning a trip to Portland & you just discovered an amazing hotel
  • blog idea about “syncing is hard”
  • the name of the sweet new app you just read about

How I Use Jottpad

My thoughts are organized into 4 lists…

  1. Things We Need - a list I share with my wife for groceries and misc shopping related items
  2. Portland - a list I share with another couple, we are planning a week long vacation
  3. Blog Ideas - random topics that pop into my head for this blog
  4. Remember Me - misc stuff I don’t want to forget and will act on later

Basically, Jottpad is simple, you jott down thoughts & organize however you want. It’s not a full-featured task manager. It’s not a full-featured shopping list. It’s a Jottpad. I’ve kept it simple on purpose. Sure, I’ll be adding more features - but always with the idea to keep Jottpad easy to use & fast.

Posted
AuthorRichard Hochstetler
CategoriesUncategorized

It’s been about 3 months since I started something, www.jottpad.com. Exactly ZERO people signed up aside from myself and the 10 beta testers for my soon to be released iPhone app.

What are we to learn from this…

  1. Jottpad is not very compelling in the current form - we live in a mobile app world where all the potential users want this optimized for their mobile device.
  2. If the only reason I’m using it on a daily/weekly basis is because I wrote it - we need to bump up the useful quotient a little more.

When the point of Jottpad is to jott down anything you don’t want to forget - the obvious solution to all these problems is make a native, mobile iPhone app. iPhone users always have their phone - it’s the one thing I won’t leave home without. I rarely even walk around the house without the iPhone in my pocket or in my hands.

Alright, let’s make an easy to use, great looking, fast iPhone app that supports all the functionality and syncs with www.jottpad.com. So I did.. I bought my first Mac since college on January 14, 2011 & I got to work. I’m happy to say that with a week or so more of beta testing Jottpad will be ready for submission to the app store.

Few screenshots of Jottpad…

5632419715_94f3169394.jpg5633002610_a09d66a479.jpg5632419785_9e775fdced.jpg5633002530_313e3ba00c.jpg5632419627_ba4aa9fc54.jpg

Posted
AuthorRichard Hochstetler
CategoriesUncategorized