Started a new side-project on the weekend (after a long long hiatus of just focusing on day job). Phase 1 was simply getting the stack up and running (PostgreSQL-backed, Python gRPC service taking gRPC-web through Envoy to a React front-end). Took some fighting through the setup to get a full-stack existence proof, ideas that arose during the working session:
side-project TODO #1 - Write a blog post about getting this all setup using current versions and push a public github repo with the setup to help other out.
side-project idea #2 - Build a micro-PaaS where a customer can define a gRPC interface, Python module implementing that, and with a single command, push this to a live serving endpoint.
side-project idea #3 - I need a state machine as part of my application logic, TODO: write a Python non-ephemeral state machine library that, with a simple Python internal DSL, backs state machine persistence onto a PostgreSQL table, handle automatic schema updates as the state machine is changed / versioned.
Literally not enough time to do any of these things though :)
re: gRPC, largely pragmatic because of familiarity with protos and RPC interfaces defined in terms of protos. I wanted a typed API definition that generates first-class implementations in Typescript and Python.
Haven't had much success in the past re: using other formal mechanisms of defining API interfaces, and I'm no longer up-to-date with what's recommended in this space (any suggestions).
Alternative was GraphQL (since using React) but that's a learning curve and dealing with protos in Typescript and Python is a known-known for me.
Friday: I can build a nice and simple API for OpenWRT that is API focused and provides easier access to the common functions that people want from OpenWRT, this would help mobile app developers create apps that talk to OpenWRT in a simple way. Let me just write that down in my notebook.
Saturday: Let me just sketch out this new design for a workshop cabinet that will let me combine my tablesaw, bandsaw, chop saw and tool storage in a single location.
Sunday: I want my security camera to combine all the detected motion in to a single multilayer video that lets me scrub through events like layers playing simultaneously rather than scrub through time. Let me just write that down.
Monday: OpenWRT should have a "state" that is queryable via a curl request that determines if OpenWRT still needs to be configured. I can build that as a simple API and package it. Let me just write that down in my notebook.
The ideas aren't the problem.
Somewhat relevant, PG has a post on startup ideas http://www.paulgraham.com/startupideas.html
Whenever I get an idea, I quickly note the main pointes in a note-taking app and usually never return to it, as the secret of creating actual useful products is to spend the time to create them well. Ideas are worthless if they are not well implemented.
One way is to have hobbies, side hustles, volunteer work, whatever. As long as you're doing something that requires solving problems that are different from your day to day programming job, you will find a constant stream of problems that maybe you can improve with a bit of code.
Some of my side projects are directly related to my work, but most of them aren't. I'm working on something right now because someone in my life needed advice on digital security, and it turned out to be not an easy problem to address.
The hard part for me is to find the time to implement an idea. An idea for me just naturally flows from a problem.
I read that somewhere, possibly here. Maybe someone can link the source, if they have it.
100 side projects is the chance at one idea worthy of implementation. If you have even one good idea, all of your bad ideas weren't only worth it, but amount to how you got there.