A few years ago, I got my first iPhone. With that came a monthly subscription to pay for the provider. Being a teenager with not a lot of money, I wanted a way to know when my phone bill was renewing to ensure I have enough money to pay for it. While developing the app, I realized that active users of the internet, most likely have a lot of subscriptions and they have no idea how much money they are spending on a monthly, weekly or yearly basis. This inspired me to create Outflow, an app to manage the complexity of recurring subscriptions.

What it does

Outflow is an iOS app that helps manage everything from your phone bill, your Netflix subscription or the payment to the dog walker every Tuesday. Outflow's primary goal is to keep you informed on where your money is going. To do this, I made it easy to view all your subscriptions, and how much you are paying for each subscription. Also, the app calculates your spending on a monthly, weekly and yearly basis to give you an idea of how much you are spending. With this information, Outflow can notify you before the subscription renews, to give you the opportunity to cancel it. Currently, it relies on manual data entry to create each subscription within the app. However, I have implemented a way to scan your Gmail inbox and receive suggestions on what subscriptions to add. Outflow also has a few more convenient features such as the ability to convert the price of a subscription to your home currency, and a today extension to show what subscription is renewing next.

How I built it

Outflow is built using Swift. It leverages some of the neat features of the language such as enums and protocol extensions to keep the codebase simple and easy to understand. The app also uses Firebase to get all the companies that are available to select within the app, as well as a microservice created using Node.Js to get the expiration date of a domain name.

Challenges I ran into

After releasing the first version of Outflow, the ability to automate the subscription finding process quickly became my number one requested feature. This feature was challenging because I did not know where to start and there weren't many resources available to understand the subject. After weighing the advantages and consequences, I decided to allow a user to authenticate to their email and then query their email to find subscriptions. Authenticating to their email became the most challenging part of the feature because all the libraries that have created convenience wrappers for these emails do not support 2-factor authentication and I was not prepared to alienate everyone who had it enabled. Also, there is a lack of documentation regarding this subject online, which made it a challenging problem to solve. After addressing all the authentication issues, I built an algorithm to find the subscriptions from the emails. I decided on a pattern matching algorithm that will decrease or increase the probability of any given email being a subscription based on various data points. Ultimately this helped distinguish subscriptions from regular email and eliminate false positives.

Accomplishments that I'm proud of

Since launching the latest update for Outflow, it has been well received. It has been featured on Product Hunt and received over 1.3k upvotes, as well being featured on Mac Stories. I am proud that something I created can help people better understand their finances.

What I learned

Since Outflow was my first major programming project, it allowed me to gain experience with launching a product from start to finish. This includes designing, implementing and then marketing a product. While creating Outflow, I also learned the importance of programming paradigms, because it allows you to keep your codebase modular and extensible. Finally, while creating Outflow, I developed my ability to solve problems without much guidance or resources which I believe was the most significant learning experience throughout the entire process.

What's next for Outflow

In the future, I plan on implementing more user requested features such as iCloud Sync and the ability to group subscriptions.

Share this project: