Project: Profly
Available at: https://www.profly.app/
Source Code:
Stack: Python, Django, React, AWS (Cognito), DigitalOcean (Host)
(By the way, if you wish to host some app or blog I recommend Digital Ocean. It's very easy to use and this blog you're reading right now is hosted there. Subscribe here to earn $100 in credit to get started).
The purpose is to track how much I invested in which stocks (USA and Brazil) and track my emotions as I take actions so I can finetune my decisions, understand why I did what I did, and ultimately learn from my own mistakes.
Everyone makes mistakes. The main diο¬erence is that successful people learn from them and unsuccessful people donβt. By creating an environment in which it's okay to safely make mistakes so that people can learn from them, youβll see rapid progress & fewer signiο¬cant mistakes. pic.twitter.com/7c7NKu5Fjv
β Ray Dalio (@RayDalio) August 29, 2019
Idea
During my company's recess I got very humbled and inspired by Linus projects and couldn't stop thinking about something he said (extracted from https://thesephist.com/posts/tools/):
My biggest benefit from writing my own tool set is that I can build the tools that exactly conform to my workflows, rather than constructing my workflows around the tools available to me.
I finally decided to do it myself, I hate using google sheets and I was using it for the whole last year, it's just not good enough - then I wanted to create something a bit better myself.
The dream app would be able to:
- Get current stock strike price;
- Add/delete transactions;
- Show a chart telling me WHEN I bought/sold it;
- Document what I felt when I bought/sold;
- Export my data easy as CSV;
The flow works fine, see:
Tools and frameworks
In the end, I've used yfinance lib (which scraps data from Yahoo) to capture prices, charts, and data from tickers with no cost! I considered a few other APIs like https://finnhub.io/ but I wasn't looking into paying for something at this stage. Also, some APIs I found had constraints/complex usage to capture stock data from Brazil.
For the tools, I decided to use Django with Graphene (the fastest way I know to get an API started), I created the React from this boilerplate, used material-ui to have some basic components (because I suck at design), and Recharts to display the data.
I wanted to allow multiple users to use the app which means I have to implement a login/signup flow. Again, I didn't want to waste time with such things that won't add value to the "product" (?) so I ended up using AWS Cognito and its Amplify lib.
I got something working in time. For sure buggy and with questionable quality, but still a valid MVP made in just (approximately) 2 weeks.
Trade-Offs
My time was short. I got less than a month to develop it before I got back to my work (which consumes a lot of time from me), alas, I had to make decisions that I'm not really proud of and which my own team would complain if I were doing it on a company project π. So, due to the ridiculously small timeline to build something I had to:
- Prove the idea works ASAP;
- Don't refactor;
- Don't write tests;
- Ignore several good practices;
Although painful (I love code quality π’), I had to sacrifice quality and effort invested in tests to best use the time available for me. In that sense, I don't regret it at all. As I read in The Lean Startup: most of the time you can validate an idea with fewer features and even with bugs.
I'm still not completely happy though. I miss websockets, handling differences between currencies (USD and BRL), availability as an Android App, and I would love to track other investment options like crypto and fixed income.
If you're curious about the steps I had to take, feel free to look into my Twitter, you can see the initial skeleton and how much I suck at design π
I'm writing a finance app to focus on what really matters: how much you saved and how you used it - not where you spent so you can feel guilty.
β Gui Latrova (@guilatrova) December 27, 2020
Got something really sketchy running with react and graphene pic.twitter.com/0mPmjZ07Rk
Rationale (with real examples from myself)
Ok. Let me show you how it would help me improve my rational thinking in the short and mid-term.
πΊπΈ USA scenario: GME
(Please ignore the "R$", the app is not displaying the correct currency. The values are in USD)
Yes, I was one of the retards who bought GME stocks at the highest price. Laugh at me and see:
What I personally love about this view are two things:
- I can see at exactly which moment in the chart I bought/sold it (green for buy and red for sell);
- I can see what I felt when I took both decisions. I clearly was laughing and having fun with memes on r/wallstreetbets. When I had to sell, as you can see, I didn't think it was fun anymore.
When I see it and analyze I can see how inconsistent I am. If I bought if for fun, why did I get scared when it dropped? If it was too much for me, why did I risk so much?
Thinking more deeply, I guess it was a mix of FOMO and a willingness to be part of something. I couldn't stop laughing about the idea of a small group auto-declared retards buying stocks to provoke a short-squeeze in big hedge funds π€·.
As soon as I saw the big drop on Monday (I bought it on Friday) I felt really stupid. I could have invested in anything else that I honestly believed instead of venturing myself in a "joke".
π§π· Brazil scenario: AZUL4
After reading some news in 2019 (pre COVID) I thought it would be a good opportunity to invest in an airline company (poor me), see in the chart as follows:
When I look at it I feel incredibly dumb (even more for exposing it in public π). But it allows me to understand better how I think and how my emotions have been driving some decisions.
- On 2019 I thought R$ 50 was a good price;
- On March 2020 (just when the pandemic happened) I thought it would be a good opportunity to buy more, then I did it for R$ 13,92;
- On November 2020 I got nervous (probably due to the great amount of bad news I was reading regarding traveling and countries closing flights from other places) and felt selling at R$ 22,70 would be a good decision;
Honestly, looking at it now from far without being attached to my ego (charts and data don't have feelings, right?), I don't think it was a smart decision.
Expectations
Given this app is open and free, I hope to start using it to learn what the heck I am doing with my money. Although I never lost an incredible, unrecoverable amount of money, I'm clearly making terrible and inconsistent decisions.
Every emotion that drives a decision, is a bad one. Decisions should be taken based on rationality and deep thought, not silly and temporary emotions.
So I would like to finish with a quote from @naval:
Choose the non-emotional response to any given situation and see how much easier your life becomes.
β Naval (@naval) August 15, 2019