From Scratch: Introducing Routinely!
A few months ago, I began playing with the idea of developing an app. I decided to some of my nights and weekends time towards ramping up the skills, tools, and techniques that go into creating a mobile app, and getting it published on the app store.
Three months later, I’m proud to introduce Routinely: an app that helps you establish, track, understand, and be more mindful of your daily routine. You can create goals for each of the tasks or habits that make up your day, and then track how well you accomplish those goals.
Routinely lets you organize the tasks and habits that make up your daily routine as a set of Goals. Each Goal is given a full name and an abbreviation; you can use an emoji as the abbreviation to make your goals more visually distinctive.
You can create custom goals from scratch, or choose from a library of examples. Your phone will notify you when it’s time to complete each of your goals- and, you can create alternative completion targets for different days of the week.
You can go back and review how you did on specific days, and get a report of which goals were completed (and when), and which were missed.
There are a handful of other features: Routinely tracks completion streaks, allows goals to be temporarily disabled, and calculates average completion time. Goals can be marked as completed through notifications, and you can find goals by searching using spotlight. If you have an Apple Watch, notifications will flow to your watch, and allow you to complete or snooze goals from your wrist.
There’s still a ton of features that I want to add, but I figured this was a good time to get a working application into the hands of users, so that actual usage could help guide the path forward.
The road to Routinely
It’s been a fun ride, getting to this point. When I took on this effort a few months ago, I expected that learning the details and intricacies of iOS would take up the majority of the few hours that I had available to devote to this; I had also heard horror stories about dealing with App Store submissions and rejections, and had mentally prepared myself for challenges like these.
After a few weeks, I realized I was barely half right- the iOS APIs and SDKs are wonderfully designed, and a pleasure to work with. Completing features, finding documentation, and finding community examples of approaches, best practices, and solved problems was easy and fun. Given my previous dev experience, choosing Xamarin as a development platform contributed greatly to the ease of this part, but the real value comes from the breadth and depth of the vast community of amateur and professional developers that make up the iOS ecosystem. The aspect of reading examples in Objective-C or Swift and transposing them into working C# code was rarely a problem- however, the lower level obstacles based on deeper technical and philosophical incompatibilities between .Net and iOS were more significant. For example, I originally envisioned an Apple Watch extension providing many of the core interactions, but that will have to be delayed until the next release of Xamarin’s software.
Further, working with the App Store and Apple’s Developer services has (so far…) been smoother than I had expected. To be fair, there is a significant quantity of things that have to be done (certificates, provisioning profiles, build configurations, archiving, packaging, manifests, etc.); but these tasks are (relatively) well documented, and well supported by a bevy of tools and utilities. Apple’s Test Flight service, which provides a platform and pipeline for distributing and tracking apps for beta services, has been a pleasure to use. When I submitted my app to the final review, it took less than 18 hours total for Apple to review, contact me about a minor metadata issue, validate my response, and approve the app.
In retrospect, the effort that I most underestimated was the quantity of promotional material and accoutrements required to really support a public customer base. If the code is going to be open source, then it must be properly structured, commented, and factored for public scrutiny and contribution. If the code is hosted on github, then it really needs a decent readme file, a clear usage license, and proper attribution for all libraries and tools utilized. There should be a website, with screenshots and demo videos. The App Store submission itself requires descriptions, marketing links, contact links. There needs to be some mechanism for customers to submit bugs, issues, questions or enhancements requests.
I’ve been most pleasantly surprised by the ecosystem of available services that support continuous integration. It took just about a morning’s worth of work to transition to code that only ran on my machine to code that was hosted, built, signed, packaged, deployed, and delivered in the cloud- and all of these services are available for free. I have a well managed workflow in which I can author code on my machine and instantly deploy it to testers without ever leaving my dev environment, complete with package management, instrumentation, logging, and (eventually) automated unit testing.
Releasing this app isn’t an end, it’s a beginning. 😉 Now that actual customers might be relying on Routinely, I want to be more public about how the app will evolve over the coming months. Here’s what I have planned:
- Focus on User Experience: The functionality, look and feel, visual appeal, speed, and responsiveness of the app are my highest priority at this point. I think there is a ton of room for improvement in this area, and look forward to any and all feedback that customers are willing to provide.
- Apple Watch Support: Today, Routinely (and actually, any app that provides notifications) can send notifications to my Apple Watch, which I can respond to by specify actions; I can mark a goal completed, or record an earlier completion, or snooze the notification. There isn’t a way to browse through my list of goals or add new goals, though, and there isn’t a way to view goals as a complication on the watch face. Due to some recent updates to Xamarin, there is now a way to do this- and i’m looking forward to adding this functionality to Routinely.
- Other types of Goals: Today, Routinely supports target time based goals; when you create a goal, you can specify a time upon which you would like to complete the goal, and Routinely will help you accomplish that. However, there are plenty of other types of goals; to start, I can imagine goals that target completing an activity either a minimum or maximum number of times per day (e.g., drink at least 8 glasses of water, or smoke less than 2 cigarettes per day). I can also imagine duration goals (eg., spend less than 45 minutes per day commuting). I would also like goals with relative targets (e.g., have breakfast within 30 minutes of waking up). Adding things like this will certainly add value to Routinely, but will also add complexity, and that tradeoff will have to be carefully balanced.
- Location Integration: Today, when a goal is completed, Routinely saves the timestamp of the completion. If the app captured the exact location upon completion as well, that would open up new use cases and insights. For example, Routinely could come to recognize the restaurants you’re most likely to visit, and then (based on the target time of your goals) ask you if you’re about to have lunch or dinner when you get close to one of your favorites. The app could also provide a map of completions for each goal, and automatically trigger goals when you arrive at certain locations.
- Health Kit Integration: Many of the goals that I imagine folks will create with this app are related to health and fitness, and Apple already provides a great platform for collecting and sharing this data amongst different apps on your phone. If Routinely were to integrate with Health Kit, then when using any of the dozens of great exercise apps on your phone, goals in Routinely could be automatically completed.
- Sharing: After talking with a handful of beta testers, the ability to share a goal with friends or partners/spouses has come up consistently. Doing this opens up a whole new realm of uses, and also opens up a whole new world of challenges: web services, synchronization challenges, privacy, security, and encryption.
Working on Routinely has been a labor of love- I’ve learned a wealth of new skills, and hopefully have created something that will make peoples lives just a tiny bit better. If you would like to track, understand, and establish the goals that make up your daily routine, then please give Routinely a shot. Thank you!