Launch Day!!

So today is BIG news. I finally got my latest app finished and launched on the Apple app store. I thought for this month I would do a retrospective on how this went and lessons I have learned along the way (even though the final chapters of this project are still to be written).

So what is it? It's name is "My-Habits" and the idea was to create a "simple" habit tracker app to compliment my "bullet" journaling (which is something I had started a couple of years ago) and to keep my skills up with iOS development (mainly to keep up with the newest versions of Swift, learn Firebase, and how to do in-app subscriptions among other things). There is a lot more information about the app on the website.

So how did it go. Well let me explain the history. Back in late 2017, I was heavy into "Bullet Journaling" but I found as each month turned over it was tedious to set everything up again. Not to mention my arm "issues" which I talked about in a previous post were well debilitating. But I needed to press on, so one of my goals for 2018 was to code one hour each day and since I had an idea for a project (that seemed simple) I figured, even despite the arm, I could know this thing out in six months, tops!

Not so fast! I was very good in 2018 and still in 2019 about getting my hour of code in each day (except for vacations and family obligations), but I didn't get the app done in all of 2018. Why? Let me list a few:

  • WWDC 2018
  • Swift 4.0 (and then 5)
  • Firestore (in beta only)
  • Other side projects (Competition Manager, Docker, ReactJS, Website rewrite, etc)
  • My arm
  • Having no clue how to do auto-renewing subscriptions (I may still not)
  • GDPR (yes THAT GDPR)

Needless to say, there were a lot of distractions and redirects on this trip. Here are some of my thoughts:

WWDC 2018

Each year Apple comes out with the shiny new and updated API's. It's like Christmas in June, we get hardware, new technologies, everything an Apple nerd could want all in one week. It is so hard not to chase the latest "shiny thing" laying around everywhere. I did an ok job focussing on what I thought was important to learn at the time and still try to stay on track, but Apple puts out A LOT of content from WWDC. The funny thing is I've never privileged to go, and yet after that week is over I am spent. I can't imagine how it would be if I ever got to go.

Swift 4.0 (and then 5)

This falls under the "chasing shiny things" category. This is how it goes: You get a new version of XCode, you explore all the bells and whistles added (and a fair number of bugs, argghh!!). Then you start to get warnings about deprecated constructs and methods in Swift. Well, "we can't have yellow highlights through out our code", you tell yourself, so off you go to fix the obvious ones. Once the easy ones are fixed you are looking at a handful that you don't understand. Off to the Internet to learn stuff. A few weeks go by learning this stuff, then late 2018 or early 2019 (I forget when that happened, it's all just a blur now) Swift 5.0 comes out. Rinse and repeat!! More time lost.

Firestore (in beta only)

I spent a few weeks in this project (remember I was only working on it at most one hour a day) contemplating how to do the database part. This ran the gambit of asking myself questions like, do I roll my own, do I use technologies I have used in the past, Realm and/or CloudKit, or do I learn something new. Shockingly, ha ha, I chose to learn something new. Why? Sync is hard, my last app used a combination of Realm for local storage and CloudKit for server storage. I didn't like that solution, it seemed convoluted. Then Realm came out with their Platform solution and I set up some test apps, but there were a couple of things around authentication I didn't like (and don't remember now, so don't ask). I'm encouraged (and discouraged) about them selling to MongoDB. It is definitely a tech I will keep an eye on, but for now I don't feel it is for me.

Why didn't I roll my own? Did I mention sync is hard. I actually went a long way down that road and had a working sync engine going, but not for My-Habits. It was going to take a while and I would never feel like I had it right. So I figured, since my "jobby job" uses Javascript, I should at least learn something that had a large following and support across different technologies. That led me to Firebase and by extension Firestore. I settled on Firestore. It was easy to get started, but I was always uneasy as it stayed in beta so long. But eventually it saw the light of day and here we are and I am glad I went there (at least on launch day).

Other side projects

Where do I even begin. I had committed to rewriting Competition Manager in 2018 into ReactJS. Problem was I had this other project, My-Habits, I was more interested in. As "Winter 2018" turned into "Spring 2018" and eventually "Summer 2018" I never really got started. I got to August and was told they needed Competition Manager up by October. WHAT???!!! I went heavy on it, but in the end just couldn't get it there. I actually tried to do both Competition Manager and My-Habits at the same time. . . it didn't work.

On top of that, I felt the need to learn Docker well enough to be able to do whatever learning and development I needed on Docker containers. I felt that doing that, I could develop the EXACT same way I went into production. I wasn't disappointed. It is a wonderful place to be where both environments are the same even if they are on different host machines. But that took time to learn. It was fun, but it took time.

Oh did I mention, with all this new shiny stuff, I also felt the need to rewrite my website (this website)? One of the goals I had for that was to host my own blog the way I wanted to show it, and not deal with proprietary platforms or have to pay out money for hosting. I mean, I can do that right? Well, it took longer than expected, are you seeing a trend?

My arm

Did I mention I had a broken wing? Yeah I did. Enough said. On the plus side I can type better . . . now.

Having no clue how to do auto-renewing subscriptions (I may still not)

Oh boy, where do I even start on this one. auto-renewing subscriptions (and server side validation) is hard and confusing. REALLY HARD AND CONFUSING!! I would say 90% of my development time for 2019 has been spent on coding and testing this part of the solution. I'm sure, in fact I know, I don't have it right yet, but I'm learning.


This one sent me into a tailspin when it first came up. I did a lot of reading about what it meant to my fledgling "indie" business. I even considered hanging it all up. Talk about government red tape. I understand the intent of the regulations, and I have all the intent in my dealings with everyone to treat their data right and private to them, but man what a bunch of legal mumbo jumbo. I did my best, given the constraints I have, to comply.

What worked well?

  • The goal of coding one hour a day was helpful. I felt like I had accomplished something after an hour of work (even if after that hour I ended up gutting all the code I had just written).
  • The effort to learn Docker and it's technologies has paid off and will continue to pay off

What did I learn?

  1. Don't take on too much work!!!! Again, DON'T TAKE ON TOO MUCH!!!
  2. Focus on one project at a time (don't try to double dip!!)
  3. Pick carefully what projects you do - VERY CAREFULLY

    • Time is your most valuable commodity. You can only spend it in one place, so know what you are getting into.
  4. When you do start a project plan it's architecture out BEFORE you start coding.

    • Figure out what you don't know (and know will need). Learn "enough" of that.
    • Estimate EVERYTHING, and revisit your estimates to make sure you are on track.
    • Ask yourself, "will this feature make the version 1.0 app significantly better?"
    • Don't be afraid to hang up the project if it goes in a direction you don't want. Of course if you planned correctly it won't
    • Know your competitors
  5. The work will be hard, REALLY HARD (and tiring)
  6. Understand - EARLY - how you will monetize your app.

    • If you think you want to to go auto-renew subscriptions - DON'T - unless something changes. Note: I may change my mind on this one if My-Habits works out, but I doubt it.
    • Don't be wishy-washy about this. If you plan to go "free with ads", you better be sure you will have north of 1000 users to make it worth your effort.
  7. Breathe deeply when the pressure hits (it will, trust me) and keep going.

The Aftermath

Like I said earlier, I started My-Habits at the beginning of 2018. As you might surmise, several technology changes and "blips" occurred along the way. I really, I mean REALLY, wanted to have the app out by the start of 2019.

When I started going down the auto-renewable subscription route that's when it REALLY got bogged down. My plan is to blog about that design in a future post. I can say I first submitted the app on April 21st, got my rejection on April 22nd.

This sent me for a loop. How? It turns out I did not have a "Terms of Service" link on the purchase page. Whoops! That took a week to get one of those. Of course it had to be linked in the app store metadata as well, which meant it had to go on my website.

So basically, I ran head into all this boiler-plate text that has to be in your app on the app store and on your web page. What a mess. Of course that gave me time to do more IAP testing and beef up my server. Which I took advantage of. I really thought the turn around on submission would have been one to two weeks. Turns out it was more like a month!

My second submission went much smoother. I submitted on Friday, got approved on Saturday and pushed the button to release on Sunday. So as of today, Monday, My-Habits is live!!

Till next time.

make a comment