Update 10/18/2024
My app is finished!! I plan to submit it for review on Saturday. Yes, it has been almost seven months since I first started my journey, but I have learned so, so much invaluable information that will guide me for years to come. Let me start with a little reflection on my journey, though.
In March I stated that my plan was to create an app which would intelligently suggest other ways to spend one’s time doing a task on a device (for example, writing thoughts down on paper instead of on a digital notebook). I really did not want to create a “restriction” app such as those which block other apps. It had to be friendly and inviting.
In order to master the app creation process, I decided to take some time to look into design. Specifically, I read part of a book written by MIT professor Daniel Jackson: The Essence of Software. I also watched (perhaps) too many clips of Jony Ive speaking about the design of new products and software. Then I watched an hour-long Apple session on design linked here: The Qualities of Great Design - WWDC18 - Videos - Apple Developer. I came down to the conclusion that concentration, not reduction is the path to great design; and simplicity is essential. Great design is hard.
Finally I went through a rather early design phase for my app (called Grow back then). I really wanted to create a flower of some sort that grew as the user completed their tasks or completed certain goals. After trying to implement something remotely close to a Lotus using SwiftUI Paths (so I could have perfect animations between states), I decided that this wasn’t practical yet.
Now, I encountered my first hurdles in May when I began to realize I was getting too far ahead of myself; I hadn’t even worked out the main features of my app and yet I was already designing it! Besides all this, I sort of lost motivation. Not only was summer in full swing, but my app idea was seriously unstable. Without a good foundation for what I wanted to create, I was lost. Within all of this, I did think about much deeper questions such as: How can I create an app that is not a distraction? And: How can technology be used as a tool and not a time-waster?
Ok, ok, Michael. So I guess I just really want to create an app that helps humanity in general? That was where I was going in mid-May. I read a LOT of App Store reviews. It was fun and informative (I think I included a few screenshots with highlights). I really looked into which concepts were infinitely helpful and indispensable to users, and some that were “requested.” I actually have included a few of these “requested” features in my final build. My perspective here was that “Form Follows Function” as I learned over and over in my architecture classes. I did manage to make a few UI elements!
Already by June, I had a plan. It was a pretty comprehensive plan, but quite exhaustive, so I lost motivation. I researched a lot of competitors and that got me into the mindset, I think, that I have to match up to their strengths. Also during this month I watch WWDC24. It was very cool. What amazed (and still amazes) me is how Apple had a very organized plan for how developers can open up their apps to AI: just add App Intents and support for SiriKit and AI will decide, based on the options your app exposes, which action to carry out.
In June I just created a timer app to experiment. It was super cool to actually do something rather than just research something. This is actually basically the same timer method that I am using in my final build of my app! It worked so well.
After the summer, I hadn’t made much more progress, but I had done some more research. I found out how it is important for people to focus on one thing at a time (this was my inspiration for naming my app Shadow Task). I came up with a list of different concepts that work well to keep users focused.
On August 22, 2024, I created a road map so that I could set a hard launch date. Of course, I am writing this after the anticipated October 1 launch date, but it was necessary looking back on it. Needless to say, his road map really did motivate me to work hard and I got a lot done. I did think of releasing my app to TestFlight first, but at this point that probably won’t happen.
During the next week I created apps for the Foundations, Networking, and Databases courses. Foundations: Apple Devices app to display several Apple devices with information. Networking: an app to view photos from Mars (taken by rovers). This Networking app inspired some of my final design decisions for Shadow Task. Databases: I created a ToDo app (interesting, right?). This ToDo app is probably part of the reason why I allow users to create several different tasks in my Shadow Task app.
My app icon was created in mid-September. This was the start of my Shadow Task design language. But just a day later, I came out with a breakthrough idea which never took off; it was one of those very flashy brain explosion moments, not really something realistic. Anyways, I did come up with a pretty good focused timer layout which I am now using. This was also the first introduction of my ProgressView() I think.
I came up with a “final” design for Shadow Task about a month ago. This actually introduced a lot of design elements which I have since incorporated such as the task cards and the progress for Day, Week, Month, and Year.
I began building in Xcode almost immediately. There were so many UI elements to figure out, but because I took the time to create concrete designs in a Figma file, I didn’t have to create ideas on the fly.
And yes, I lost motivation again. This time I had actually created my app (basically), but the difficulty I had encountered was running the timer in iOS where an app is terminated when it goes into the background. This cost me many nights of lost sleep when (hint, hint) the answer was using the timer I created several months ago which already calculates based on a saved date and is very accurate.
Today
With all this history and effort and experience under my belt, I have combined it all into a single app: Shadow Task. This is the peak of the mountain, and yet there is still a ways to climb. I’ll include a list of features and a list of different edge-cases I am dealing with. Here are the features:
- Create timed tasks with timer durations for breaks and sessions which can be repeated up to six times in a single focus session
- Time your tasks using the Pomodoro method by selecting a timed task
- Display time spent actively working (the sessions) on a graph with labels for each task
- Display historical working values for Day, Week, Month, and Year
That’s basically it! Next, here are just some of the edge-cases I took care of:
- Save timer duration when user closes app and load it when app appears again without affecting the count-down
- Allow users to pause app and leave without timer being affected
- Users can reset timer duration when it is running or paused and it will be set to the initialTimerDuration saved at start
- Cancel timer when user exits timed task and save data to Chart when the timeUp view is shown and the user presses on the “flag” button
- Set a line limit for all timer titles
- Set a max and min duration for timer values
- Handle multiple fast button presses in a row
- Only schedule notifications if timer is running and adjust when notifications are sent based on the time left
I have an official website for my app here! Almost all of the descriptions were generated by ChatGPT and the screenshots are from my real app: https://shadow-task-app.carrd.co
I signed up for the Apple Developer program recently as well.
Thank you all sooooo much for supporting me on this journey! And a huge thanks to Chris Ching and the Chris (the moderator) for all the help they have provided to me.
Have a wonderful night (yes, 12:21 AM for me)!
All the best,
-Michael