Day 74: Building Intention on mobile
The most frequent question I’ve received while building tools like Hide Feed and Intention has been “Does it work on mobile?”
I’ve talked about this before on Day 25. Most people struggle with their harmful digital habits on their phones, not their laptops, and that’s where tools like Intention would do the most good.
Existing solutions like ScreenTime on iOS simply aren’t that effective — pretty much everyone I talk to says that they mindlessly tap through the “give me more time” option, defeating the whole point of setting limits.
I think the Intention’s mechanisms of (1) committing to a duration right before you browse and (2) having gamification elements like streaks to make it fun to meet your goals would be more effective at helping people be more intentional about how they use their phones.
But there’s a significant challenge to building something like Intention on mobile: Apple and Google don’t provide a way for app developers to see how much time users have spent on different apps.
If you’re building an app that straight up blocks apps and sites (e.g. Freedom), this isn’t a problem because you don’t care how much time the user has spent on various services.
But with Intention, I want to —
Huh. This is one the best parts about journaling and writing my thoughts out loud: Sometimes I catch mistakes in my thinking in real-time as I’m articulating them.
My assumption before was that I would need access to the data that Screen Time has in order to know how much time the user has spent on various apps and websites. (My friend Pal showed me a proposal/plea to add this API, but I’m not holding my breath for Apple to find the kindness in its heart to implement this.)
Perhaps I don’t actually need that information. What if Intention blocked all distracting apps and sites by default unless you unlocked it from the app? It’d be like Freedom but in reverse: Instead of specifying the time that you want to block things, you specify the time that you want to unblock things. That’s how Intention works today on desktop, and while it’d be annoying to have to go to the Intention app to unlock an app before you could use it, that’s basically a feature that helps you be mindful. Instead of relying on the operating system to tell me how much time the user has spent on various services, I could just assume that they only time they’ve spent is the time they’ve unlocked using Intention. Of course, this would mean that I would only actually be getting time unlocked rather than actual time spent, but that seems acceptable.
The main engineering challenge here would be setting up the blocking mechanism. Freedom requires installing a VPN to block apps, and while many users might find that too confusing or scary to complete, it seems to be the only option available.
I’ve been quite comfortable in Web front-end-land, having spent countless hours messing around with browser extensions and React, and this might call for more sophisticated back-end engineering. Not gonna lie: I feel kind of intimidated because setting up a VPN seems like it’d require quite a bit of domain knowledge around networking and backend infrastructure, which I haven’t touched in a very long time. But there’s also a part of me that’s sure that I can figure it out. This is the benefit of having gone through challenging classes at Princeton like operating systems — back then, I wished I could take a class solely focused on building iOS apps like the one offered at Stanford, but now I can see why my professors said that it’s better to learn the fundamentals and that I could learn stuff like app development on my own. Knowing that I was able to grind through learning assembly and low-level programming enough to build a freaking bootloader probably means I could figure out most other things given enough time and effort.
Didn’t expect this post to end on such an optimistic note, but that’s where we’re at!
Note: I’m currently still working on a major feature for the browser extension version of Intention and won’t be able to start on mobile development for a bit, but I thought about this today thanks to a conversation with my friend Pal!