This is a summary of TinyDevCRM development for the week of February 22nd, 2020 to February 29th, 2020.
Goals from last week
- [❓] Add ability to pass custom
classNameprops to components in order to style them differently depending on the context, and keep fine-grained control of UI display behavior.
- [❓] Build out working, full-stack, email-based, token-based
- [❓] Start Python backend
- [❓] Start PostgreSQL database
- [❓] Wire up front-end to back-end
- [❓] Build out “Data Upload” workflow
- [❓] Build out “View data” workflow
- [❓] Build out “Create Materialized View” workflow
- [❓] Build out “View materialized views” workflow
- [❓] Build out “Schedule Jobs” workflow
- [❓] Build out “View scheduled jobs” workflow
- [❓] Build out “Setup Pub/Sub” workflow
- [❓] Build out “View pub/sub events” workflow
- [❓] Maybe ask close friends to test drive the workflow and see whether MVP can be considered “finished”, before adding process and pushing towards feature parity
What I got done this week
- [❌] Create basic short-form and long-form logo designs
- [✔] Finalize MVP “LoginForm” and “SignupForm” components
- [✔] Finalize DashboardBase component
- [✔] Review JSON Web Tokens (JWT) tutorial
- [❌] Goals from last week
I don't think there's any other way to say it. This week has been pretty bad in terms of execution. I spent two whole days working through the JWT tutorial, and while I have a working example of JWT with a Flask backend, I feel like I only have a script-kitty understanding of JWT, and I didn't agree with many things the tutorial did (e.g. using many different Flask-specific frameworks, and their testing methodology, my goodness…), so I'm not sure how much the existing codebase will convert. I was also sick for a good day and a half, and that left another day and a half of getting back to normal. So that was three or four days lost.
I'm definitely behind where I wanted to be in terms of execution. Regardless of how difficult this project was meant to be, it shouldn't take four weeks in order to get a signup UI with no backend up and running. It's honestly embarrassing and speaks poorly to my skills as an effective engineer. Most people ship MVPs in a week or less, and get far more traction starting off due to better time management and execution.
I don't think I will give up, though. This project means more to me than just another abstract OKR. I do want to have a daily and weekly routine, and I need to replace my habit tracker to make that happen. I want to stay in touch with my friends and professional network, and that means building out a digital Rolodex. I want to keep my digital security high, and that means rotating my passwords and security keys. And I know I don't have the time to maintain several different databases and backends to do all of those, and I definitely won't have the time to do any of this in the future if I have a wife and kids. TinyDevCRM is meant to be the platform to abstract away a lot of the complexities behind shipping these projects, such that I only need to platform a front-end PWA. If I don't get this done, none of that may happen, and if it does, the cost to doing so will be high, either in terms of cognitive or financial load.
So I just have to keep going. Some things I'm doing in order to maintain a modicum of structure during a free-form sabbatical include:
Signing up for Boss as a Service. Hopefully having a person nag me about the important things I need to get done, and me providing hard commitments with proof and time estimates, will result in me overcoming habitual hurdles and executing properly.
Practicing mental models, such as visualizing success or managing coping mechanisms around failure, in order to bounce back from lows and keep working towards highs.
Building a set routine. YC Startup School had a really great thread on other founders managing their time. Here's three examples I found inspiring:
7:00AM alarm M-F, work out (also in home), make breakfast, code, make lunch, code, make dinner, sleep. Weekends are the same but no alarm, no work out and with chores interspersed throughout the day. I also try and go for a 40 minute walk at some point during the day, just to get out of the house.
7:00AM-8:00AM review hacker news, tech crunch, newspapers / 9:00AM - 11:00AM work on MVP with offshore development team / 12:00PM - 3:00PM practice coding and wireframing and talk to potential users / 4:00PM - 6:00PM check with development team and work on pitch presentation / 7:00PM - 9:00PM startup events around town, meet with other startup school people, chronicle the day in business journal
6:30AM skim emails to see if anything urgent came up and read newspapers and map out the day / 7:00AM-9:00AM calls / 9:00AM - 12:00AM work / 12:00PM-1:00PM lunch / 1:00PM-2:00PM follow-up calls / 2:00PM-5:00PM work / 5:00PM-7:00PM family time / 7:00PM-10:00PM calls with Asia
before 10:00AM work out, get kids to school, read news / 10:00AM-2:00PM deep work / 2:00PM-3:00PM lunch / 3:00PM-5:00PM work / 5:00PM-9:00PM family time / 9:00PM-12:00AM work
There's more responses, but these were the ones nearer the top of the thread.
Goals for next week
- [❓] Ship some form of API backend to https://api.tinydevcrm.com
- [❓] Wire up token-based authentication workflow to React.js front-end
Things I've learned this week
I really like the notion of token-based authentication, as opposed to session-based authentication. This white paper by Auth0 on setting up API tokens via token-based authentication spoke to the power of tokens to scope permissions, which they mentioned was much different than the all-or-nothing approach session-based API keys take. I think the granular nature of those tokens should come in handy when exposing permissions of certain PostgreSQL functions, and therefore checking in the permissioning system as data instead of baking it into the native PostgreSQL configuration, which may change over time.
I wish Visual Studio Code made CR and LF characters visible.
Dockerfileissues in setting up a basic
cdoperation cost me an hour or two of time, and I ended up scripting the command in the entrypoint script instead of the actual Dockerfile, which would be cached, faster, and visible during the Docker build process.
I'm extremely weak at DevOps. I got $3,000 in Amazon Web Services (AWS) credit through Y Combinator Startup School. It expires in a year, giving me about $250 a month to spend on AWS services. I'm so happy I have that option.
So exactly what will I spend that on? I do know I want my database and my web backend to be highly available, and that means in addition to the “requirement” I should deploy to EC2
t3.nano, I would likely need to deploy on two EC2 instances at once. I would also like log management / rotation, and daily backups likely synced to a buffer on the VM before it's backed up to cold storage.
I know how to do exactly none of that right now. I barely know what
nginxis. So this may be a long road.
Logo design is hard. I'm an obsessive, and a perfectionist. I'm also a utilitarian who likes to think that my five years doing artwork in middle school and high school didn't go to waste. Logo design for me is very much a mildly infuriating exercise, where things are constantly off by one pixel, or just “look” wrong.
I thought about maybe paying money for a logo…but this is an open-source project, and I'm on sabbatical. Money isn't exactly flowing. I did want to ask for a price quote from a graphic designer friend, but she does illustrations and not logo design. In any case, asking a professional to do some work for me would be much more expensive than me doing it, and I'm not a choosy beggar who stiffs the bill for artists.
I think I'll just use a text-based logo, and maybe add offline Google Fonts for styling, and eat the bundle size / network performance cost for now.