Ten Day Review

Poop Tracker 2.0 has been available in the App Store for 10 days. Here are some stats and observations.

Many of these numbers may be considered too “green” for true consideration.

 

 

App Store Views

App Store Views have not changed dramatically

 

 

 

 

App Units

App Installations (downloads) are way down

 

 

 

Daily Stats

Daily Users is down* but entries per user per day are slightly up
*there are a few straggling users still using the old version of the app

 

 

 

 

 

MailChimp

After 10 days and 8 days, both of my Mail Chimp campaigns to existing users have seen similar results.

 

 

Campaign 1
MailChimp1

Campaign 2
MailChimp2

Though the sample size was small (~100 per subject line), using mail merge to customize the subject line was most effective.

 

iOS Available Fonts with Names

for (NSString *familyName in [UIFont familyNames]){

NSLog(@”Family name: %@”, familyName);

for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {

NSLog(@”–Font name: %@”, fontName);

}

}

Minimum Viable Product

In the startup community, people speak of an MVP, a Minimum Viable Product.

“The minimum viable product is that version of a new product which allows a team to collect the maximum amount of validated learning about customers with the least effort.” -Wikipedia

Time constraints force you to cut unnecessary features.

The app has been running as an MVP for the last 2 years, but I am finding I need to take version 2.0 down to its logical MVP. Coding has gone on for too long.

What’s getting cut:
1) User intro sequence. User’s can fill in their information via the Settings Tab.
2) Ability to delete an entry by swiping on the timeline

Things I can continue to fix after the app is submitted:
1) Leaderboard data
2) Calculations for daily streaks, goals, etc
3) Messaging for the Messages Screen

Enhancements for v2.1
1) Intro Sequence
2) Improve Leaderboard

Screenshots 3

screenshot

screenshot2

screenshot3

Timeline Interactions

As I have been using beta versions of the app, I have found that there are different ways of interacting with the timeline. I will outline these interactions here:

1) User records Number 1 and/or Number 2
API: record time in eventtime field

2) User records Number 1 and/or Number 2, then starts a walk within 10 minutes
API: record time in eventtime field, record starttime and endtime in same record

3) User records Number 1 and/or Number 2, then starts a walk after more than 10 minutes
API: record eventtime in a record, then record starttime in a new record

4) User starts a walk, records Number 1 and Number 2 within 10 minutes
API: record starttime, update eventtime in the same record

5) User starts a walk, records Number 1 within 10 minutes, records Number 2 after 10+ minutes
API: record starttime, record eventtime in same record, find ID for Number 2 based on the later of eventtime or endtime

6) User starts and ends a walk, then records Number 1 and/or Number 2
API: If Number 1/Number 2 is recorded within 10 minutes of endtime, use same ID

7) User records more than a single Number 1 or a single Number 2 while on a single walk
NOW: Create a new timeline row by recording the eventtime
FUTURE: Add a new Number 1/Number 2 to the existing ID, record the eventtime, and display as a 2nd row inside the same UITableViewCell

This all breaks down to a set of rules:

  • If the user STARTS WALK:
    • If newest record has eventtime and (eventtime < (NOW – 10 Minutes)), update the starttime
    • If newest record has eventtime and (eventtime > (NOW – 10 Minutes)), create a new record for the starttime
    • If the newest record has and endtime, create a new record for the starttime
  • If the user ENDS WALK:
    • find the newest starttime record, update the endtime
    • if the most recent record (endtime != nil) or if (starttime == nil), throw an error
  • If the user records an EVENT (Number 1 or Number 2):
    • If newest record has starttime and does not have endtime, and the new EVENT to the existing ID and record the eventtime (no time limit)
    • If newest record has starttime and has an endtime and (enddtime < (NOW – 10 Minutes)), and the new EVENT to the existing ID and update the ID’s eventtime
    • If newest record has starttime and has an endtime and (enddtime > (NOW – 10 Minutes)), create a new record for the new EVENT and record the eventtime
    • If newest record does not have a starttime and (eventtime < (NOW – 10 Minutes)), and the new EVENT to the existing ID and record the eventtime
    • If newest record does not have a starttime and (eventtime > (NOW – 10 Minutes)), create a new record for the new EVENT and record the eventtime