seedling · planted · tended

Building a product on someone else's API

All notes, by stage

Notebud was my 2016 side project: OneNote as a planner, with tasks from your to-do manager written onto each day's page, and later two-way sync of tags and tasks. It ran on the OneNote API. The platform was the product's foundation and I didn't control any of it.

What the API did to me

  • Moved sections get new IDs. Move a section in OneNote and, to the API, it's a different section. Anything you stored against the old ID is now pointing at nothing.
  • "The server is too busy." Page sync broke often with error 10007: too busy, try again later. Your product inherits every outage and every throttle.
  • Ordering. Pages come back sorted by last modified, not in the order the user sees them in their notebook. Rebuilding the user's structure is your job.
  • Unknowns. Do IDs differ per user in shared notebooks? What about tags?

What the survey said

I put a survey behind the sign-up form after a conference talk, in November 2016. People loved the idea. The recurring wishes: get tasks from Outlook into OneNote, reminders that work on a phone, task dependencies, an end-of-day review of plan against reality.

And two warnings I should have weighed more:

My greatest frustration with OneNote is the sync (terrible) speed. If I was to add a new application or add-on to my workflow it'd need to not have a significant impact on syncing.

I don't like the two-way synchronization because you risk using a lot of time just keeping two places synchronized with each other.

The very thing I was building, two-way sync, rested on the platform's weakest part.

What I'd do differently

Before building a sync engine on someone else's API, list what the API can't do, and find out whether anyone will pay for what's left. Enthusiasm in a free survey is not a paid appetite.

Background: a productivity tool based on OneNote, OneNote API and PHP, and the planning system it automated, life planning and journaling with OneNote.