It's the end of week 3 now.
I'll admit that I had too much fun socializing this week with friends and enjoying my very flexible schedule. Some highlights: I watched my girlfriend's dance show Ain't Done Bad for the 4th time, played some video games for the first time in a long while to catch up with friends, and met up with some fellow founders (who are much more accomplished than I). I would love a future where I can have this flexibility but still make good money.
Updates
Finny is now live on TestFlight for internal testing. Having deployed a couple mobile apps to the App Store before, a common requirement for an app is to let the users delete their account. I took a detour from my MVP feature to complete account deletion early. Having deletion lets me repeatedly test my app as a new user without fussing with my database and API. In the name of good product and engineering, I want the deletion process to feel instant. And if users want to sign up again immediately with the same email, they should be able to. I equate a slow account deletion flow to unsubscribing from email campaigns on shitty slow websites. Loading a slow web page just to click "unsubscribe" feels like the company's trying to deter me from unsubscribing. But being fast is difficult if users have to wait for me to clean up everything in a single network request. So I made deletion a two-step process. On initial account deletion from in-app, I soft-delete their user record, and hard delete all associated identities, meaning no emails, phones, and social accounts are associated with the user record. Associated identities are usually a small amount of data so the request and database work are committed quickly. Having effectively severed the user's identity from their existing data, I then perform hard deletion of all accounts, transactions, plaid items, etc in the background. Work like deleting items via Plaid API (so I don't get billed for them) is naturally slow, so an async task was necessary.
Investment holdings are now syncing from Plaid. I miss using Prisma, Typescript's type-safe database ORM. Much of my work now is just CRUD work, reading and writing to a database. Without generated types from my database, it's quite tedious work having to write and test SQL strings in my repository layer. Maybe I'll spend a few hours to codegen case classes from my pg tables. Probably can ask chatgpt. A much harder task would be to generate a prisma-like library on top of a prisma schema. Hmmm, perhaps following rust's sqlx is the better approach. I digress.
Powersync has been tremendously helpful. I enjoy not having to write CRUD HTTP APIs. I enjoy not needing internet to review my account balances and transaction. Navigation in-app is speedy because I read directly from the synced sqlite db. Why do I need to review my finances without internet? Because this opens up the path for easy analytics client-side. I'll be able to calculate all that I need so long as the data is cached. Functional programming 101: input => output.
ChatGPT has continued to make learning Flutter trivial. I think about the architecture and design while ChatGPT finds and even composes all the native widgets I need. My app is still very early on so I expect it to feel less useful once my designs become complicated.
Discussions
What to build next? With the core data ready, it's time to build the MVP feature and answer the questions "Am I on track to retirement?" and "How early can I retire?". Eyeballing how much you need to retire and live a comfortable life is straightforward. Comfortable living means you can keep the same standard of living, and expect to have enough for the next 25-35 years. With an estimation of your retirement income, expenses, savings, all calculators out there can tell you how much cash you need every year to live in retirement. Eyeballing is nice and all, but I want to get granular and real accurate. I want to see my weekly, daily, and real-time progress to reaching retirement.
Cash. While I have enough runway for 6 months, I really really don't want to deal with not making any money for a while. Burning through my savings is becoming more of a problem for my mental than I thought. I'm not spending a lot lately, but the nagging feeling of loss is there. I called a couple friends and family members for advice. The general consensus is that I should find a part-time contract work that'll slow the burn, if not eliminate it altogether. Doable. I realized my ego needed some humbling. I want a high-paying job, but a high-paying job often comes with more responsibility, more work, more stress, and ultimately less time to work on Finny. Throwing my ego aside, I am now compelled to find the optimal balance of lower pay and flexible time.
I'll admit that I had too much fun socializing this week with friends and enjoying my very flexible schedule. Some highlights: I watched my girlfriend's dance show Ain't Done Bad for the 4th time, played some video games for the first time in a long while to catch up with friends, and met up with some fellow founders (who are much more accomplished than I). I would love a future where I can have this flexibility but still make good money.
Updates
Finny is now live on TestFlight for internal testing. Having deployed a couple mobile apps to the App Store before, a common requirement for an app is to let the users delete their account. I took a detour from my MVP feature to complete account deletion early. Having deletion lets me repeatedly test my app as a new user without fussing with my database and API. In the name of good product and engineering, I want the deletion process to feel instant. And if users want to sign up again immediately with the same email, they should be able to. I equate a slow account deletion flow to unsubscribing from email campaigns on shitty slow websites. Loading a slow web page just to click "unsubscribe" feels like the company's trying to deter me from unsubscribing. But being fast is difficult if users have to wait for me to clean up everything in a single network request. So I made deletion a two-step process. On initial account deletion from in-app, I soft-delete their user record, and hard delete all associated identities, meaning no emails, phones, and social accounts are associated with the user record. Associated identities are usually a small amount of data so the request and database work are committed quickly. Having effectively severed the user's identity from their existing data, I then perform hard deletion of all accounts, transactions, plaid items, etc in the background. Work like deleting items via Plaid API (so I don't get billed for them) is naturally slow, so an async task was necessary.
Investment holdings are now syncing from Plaid. I miss using Prisma, Typescript's type-safe database ORM. Much of my work now is just CRUD work, reading and writing to a database. Without generated types from my database, it's quite tedious work having to write and test SQL strings in my repository layer. Maybe I'll spend a few hours to codegen case classes from my pg tables. Probably can ask chatgpt. A much harder task would be to generate a prisma-like library on top of a prisma schema. Hmmm, perhaps following rust's sqlx is the better approach. I digress.
Powersync has been tremendously helpful. I enjoy not having to write CRUD HTTP APIs. I enjoy not needing internet to review my account balances and transaction. Navigation in-app is speedy because I read directly from the synced sqlite db. Why do I need to review my finances without internet? Because this opens up the path for easy analytics client-side. I'll be able to calculate all that I need so long as the data is cached. Functional programming 101: input => output.
ChatGPT has continued to make learning Flutter trivial. I think about the architecture and design while ChatGPT finds and even composes all the native widgets I need. My app is still very early on so I expect it to feel less useful once my designs become complicated.
Discussions
What to build next? With the core data ready, it's time to build the MVP feature and answer the questions "Am I on track to retirement?" and "How early can I retire?". Eyeballing how much you need to retire and live a comfortable life is straightforward. Comfortable living means you can keep the same standard of living, and expect to have enough for the next 25-35 years. With an estimation of your retirement income, expenses, savings, all calculators out there can tell you how much cash you need every year to live in retirement. Eyeballing is nice and all, but I want to get granular and real accurate. I want to see my weekly, daily, and real-time progress to reaching retirement.
Cash. While I have enough runway for 6 months, I really really don't want to deal with not making any money for a while. Burning through my savings is becoming more of a problem for my mental than I thought. I'm not spending a lot lately, but the nagging feeling of loss is there. I called a couple friends and family members for advice. The general consensus is that I should find a part-time contract work that'll slow the burn, if not eliminate it altogether. Doable. I realized my ego needed some humbling. I want a high-paying job, but a high-paying job often comes with more responsibility, more work, more stress, and ultimately less time to work on Finny. Throwing my ego aside, I am now compelled to find the optimal balance of lower pay and flexible time.
Dennis
P.S. Here's some ASCII art.
P.S. Here's some ASCII art.
,---,---,---,---,---,---,---,---,---,---,---,---,---,-------, |1/2| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | ' | <- | |---'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-----| | ->| | Q | W | E | R | T | Y | U | I | O | P | ] | ^ | | |-----',--',--',--',--',--',--',--',--',--',--',--',--'| | | Caps | A | S | D | F | G | H | J | K | L | \ | [ | * | | |----,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'-,-'---'----| | | < | Z | X | C | V | B | N | M | , | . | - | | |----'-,-',--'--,'---'---'---'---'---'---'-,-'---',--,------| | ctrl | | alt | |altgr | | ctrl | '------' '-----'--------------------------'------' '------'