My journey building an iPhone app for kids

TL;DR I set out to build something that solved one of my own problems. I wanted to build something that I would use every single day. I learned swift to build an iOS app. It’s happening.

Library’s Closed

As a father of three, I spend a lot of time trying to find things to do with my kids. Most recently I’ve found that a rewarding and relatively cheap way to spend quality time with my kids is through reading books.

Me and my little ones take weekly trips to our neighborhood library where we hunt for and find the next great books to bring home. Everynight before bed we now have a ritual where I read a couple books per child. The order of books is chosen by a jostling and intense negotiation. Most often my daughter wins out and has her book read last. My son is satisfied with having his book read first. A good comporomise.

Over the past two months of this experiment I’ve learned that there is great satisfaction in your parenting abilities if your children like spending time with you (duh!). For me, having my kids demand that I “read a book now” brings me great joy!

It was around two months ago when I found myself hauling a giant bag of books to the Library. The library was unfortunately closed. I set the bag down and prepared to push the 25 borrowed books through the door. While doing this I realized I had forgotten which of the books I had just returned! I felt a momentary sense of loss. I wondered if other parents and their children are forgetting what they’ve read to their kids? These highly rewarding, albeit fleeting, moments spent together were now lost! With a handful of books left. I thought to myself, “Wait, I’ll save them on Goodreads!”

I stood hunched over on the steps of the building. In one hand I held a copy of “Nighty Night, Little Green Monster” and in the other I waved my iPhone over a bar code. I eventually struggled through scanning each book. Returned each book and headed home with my now empty book bag.

A Simple Reading Diary… You Know, For Kids

That evening and into the next day I spent time gathering thoughts:

  • How common is it for parents to track these memories?
  • Do parents want to track what they read?
  • Would there be value if I could track the things I read to my kids? Could I track anything else?
  • What could I learn from this information?
  • Could I further involve my kids in the activity?
  • What if I built a mobile reading diary? Would my kids use it?
  • What if every parent I knew shared what they read to their kids?
  • Would I be able highlight particularly fun experiences shared together?
  • Would my kids find value in what we were doing? How could I show them?
  • Could I use something like this everyday?
  • Would my friends do this?
  • Could I build something that grew with my children?
  • Is there any value in sharing what my kids love?
  • Could I do this in a way that protects my and other kids?
  • Could I help parents transfer their love of reading to their children?
  • Would I learn something new if I built something?

I let these ideas bounce around.

I then did some research:

  • It is common knowledge that reading to your children is important for early mental development.
  • Parents are also extremely busy. Recent studies have shown that parents spend less than one hour a day with their children! One hour!
  • It is common for poor families to 1) not read to their children 2) to not own any books! :(
  • I learned that the way our brains processes printed books and digital books are different.
  • Younger people [16-26] prefer print over ebooks. cite
  • Understanding the effect Print vs eBooks have on the brain cite
  • Your ability to recall chronological events changes when reading on print vs electronic cite
  • I’ve found that people I surveyed with children prefer physical books over digital books for night time reading. We also try to limit or completely remove access to iPads and digital devices before bed.

I thought through other options parents like me have:

  • Yes, Goodreads exists. But their UX is poor and could be heavily simplified.
  • Yes, I could do it with a piece of pen and paper. But I wouldn’t want to lose that information.
  • Yes, I could simply not track it. But from my anecdotal evidence if I track something I am more likely to continue to do the activity. Social is nice, but context is more important. How can I learn from parents of similarly aged children without having to ask them? Could passively gathered information provide enough signal to help me decide what we buy, borrow and read next? Maybe.
  • As I age I will continue to forget more things, so gathering this information now will help me recall it in future.

I left the idea alone until later that evening.

I found myself wedged between my 5 year old and my 3 year old. We were reading “Bobo the Sailor Man” – one particular page in the book drives them into fits of laughter! I knew then and there that I wanted to be able to remember that moment!

To put it plainly, I have not been able to stop thinking about this idea.

Asking Some Friends

I next worked to validate some of my assumptions 1) that my peers read to their kids and 2) they track what they read.

I set up a quick poll on FB.

What I learned was interesting:

Most of the people (12 responses) I know with kids value reading to their children. They make time to read to their kids. I could not find a pattern in consistency – some simply read when they can. One person even reads to their children over 16 years old!

The reading tends to be the job of the primary caregiver. Moms and dads can both be primary reader, but dads read the least consistently or only on weekends.

With this bit of information I confirmed that the behavior was something that people valued, and was not a completely alien activity.

OK. So, If I build something, people might use it.

Imaginary Users

Since I have already experienced this problem, it was easy for me to come up with a conceptual idea. To move it further than myself I needed to think through other types of use cases. To help with this exercise I imagined a couple ideal user personas based on myself, my wife, and my mother.

The 3 types: A mom, dad, and grandparent.

Kara, a busy, working mother of two. She has two children Jackson 3, and Ella 5. They read one or two books a night. Her husband is named Rick. Kara takes her kids to the library once a month. She is also part of a local mother’s group that meets at a park near her house on Saturdays. Kara loves a few things: mocha latte’s, Tory Burch, and brunch at Tartine. She currently gets book recommendations from her group in person or on FB, pins on Pinterest, and through recommendations on Amazon.

Rick works long hours as a Product Manager at a startup in San Francisco. When not traveling or speaking at conferences, Chris’ weekends are spent with his family. He likes taking his kids to Dolores park, the Academy of Science, and SF MoMa. He tries to get a couple readings in on the weekends. Rick finds new books via word of mouth from friends, from Twitter, or when traveling through airports. Chris prefers finding books that emphasize gender neutral stories, illustration style and design, over the traditional stories.

Al is Kara’s father. Al is 65, retired and lives in Irvine California. Al mails books to his grandchildren either through Amazon or by mailing a package every 3 months. He gets book recommendations from NPR, Good Morning America, Goodreads, and while visiting his neighborhood book store.

Armed with these imaginary users I thought through the next step.

Here Goes Something

I’ve been in the startup game since 2006. I know I can build products. I know I can build a team. I know I can design. I know I can code. I have some time. And most important… I know that if I don’t build this It’ll drive me nuts.

So I began building my app.

I loaded up Keynotopia and built a rough prototype in Keynote.

Over the course of the next week I manually prototyped with my kids.

Each night I would snap a photo of their faces followed by each book’s ISBN. After reading each book I would ask them if they loved the books or not. I would also ask them to tell the story back to me in their own words.

When a book is new they quickly determine if they like a book. My kids quickly have an opinion about whether or not they like a book, but if they truly like a book, then they will request it be read several days in a row. A “favorite” in my opinion is a book that is requested 3 or more times. I adjusted my designs to let each kid voice their love for a particular book reading and also track frequency of reads.

Being willing to test out ideas and assumptions can be humbling. Finding the confidence in yourself that you can build something to completion takes a certain type of personal honesty that is hard to come by.

Not Too Swift

Once I nailed down my prototype I started building the actual app.

I taught myself Swift by building a couple test apps to test out core functions. My first app was a QRcode scanning app built from an online tutorial. I then modified it to scan ISBN bar codes (also known as EANs). I had an a-ha moment when the app functioned as expected. The app idea was feasible, and the hardest technical piece was not so hard to accomplish.

Next, I wrote a server side script to call an API with book data. My server script identifies books by ISBN and returns back information like author, illustrator, titlem and a couple other bits of useful information.

After I built this I focused on server methods for creating what I call “readings”. This allows tying multiple readers to a single book. An interesting observation I had was that one of my testers added himself as a reader. This allowed him to track which parent read which book to his child. I immediately copied him by adding myself to all the readings I had done and my wife to the readings she had done. I am now in the process of making the reader flows for parents and children more intuitive.

Overall, this took me longer than I expected. Having to learn Swift while also interacting with new libraries and a new backend system. The biggest challenges were in understanding the way delegate functions, classes, and the Storyboard builder work together in iOS. The departure from Objective-C naming syntax, no longer needing to manage memory (ARC), and decent syntax auto completion has made building an app much easier than any time in the past 6 years.

Picking up the Swift is much easier if you already know Javascript. Lots of language similarities. You can cut out extra development by building on top of a platform like Parse. There are risk/benefits that should be considered when doing so.

Where I am Now

I am extremely thankful to the 20 testers currently using the app. Every email I receive with any feedback makes me very happy!

Some early testers joined on when things were much rougher. I’ve seen those people fall off, as can be expected. I hope to improve the application further so if they return they have a much better experience!

I currently try to release a new build everyday. My hit rate is about 2 per week. I’m making steady progress and should be getting closer to more frequent releases once I nail down a couple very challenging elements.

What’s Left?

The next steps are to nail down about 7 core elements before expanding to a wider set of testing and enentually heading to the app store!

The Easy stuff

  • Allow editing dates - this one seems easy, but boy has it been challenging to nail down. I'm nearly there.
  • Activity indicators when waiting for the server - Right now users can double trigger certain events, an activity indicator would prevent them from doing so. The main benefit to an activity indicator is that the user knows something is happening in the background. A small spinning animation will show up at the center of the screen.
  • Improve the add reader flow - The add reader button immediately adds a user. I've had complaints from users that this is jarring.
    • do not automatically create on button press, but on save
  • Allow deleting readers - I didn't build this because I didn't have time, but some people have multiple readers clogging their screens.
    • Verify with question only an adult can answer - I want to add a verification step to ask a question only a parent or child > 7 can decipher.
    • Decide if removing a reader means removing them from readings and letting the user manually remove readings themselves
    • Remove from relatedReadings
  • A more efficient method for calculating favorites - I currently use a very inefficient method for pulling a user’s favorites. I have another aproach that could make this faster and more useful in the future.

The Challenging stuff

  • Show onboarding graphics - I have some screens, but haven't figured out the right way to display them
  • How to better handle social networks, friends/follower? - This one is a huge one I need to nail down.
    • Double opt-in vs public by default feeds?
    • An activity stream?
  • Improve system settings page from static table and manual buttons to enumerated dynamic table T_T
    • Enumerated list
    • A full list of scrollable reader list
  • Add emails for periodic messages about their reader activity
    • Should I send automated emails?
    • Allow controlling frequency or disabling