The Joy of Small Projects(schroer.ca) |
The Joy of Small Projects(schroer.ca) |
The only part I would disagree with. It's also important to know when to kill a project that's not going anywhere, where finishing won't provide any value. Yes, finish almost all your projects, but there are those few that are not worth reluctantly dragging out (especially if you've now found another tool that does the job).
Though, for myself, previous rounds of yak shaving has made it easy to start a “simple” project and usually get it finished in a reasonable amount of time since what I mostly do is write wrappers for the python C-API and my system is pretty solid at this point. Makes it easy to test out different libraries even if the end goal is to use it from a C(++) program.
Probably need to get a grip on the yaks I’m currently herding if I ever want to finish my current long term project.
If your project has user accounts, you'll get users who you have to take responsibility for. Then it's not a side-project any more, it's a part-time job.
These days I much prefer side projects which have no user accounts at all (like https://www.niche-museums.com/) or that are open source tools where the end user installs and uses the software without me having any involvement at all (like https://github.com/simonw/shot-scraper)
Why was this such a disastrous choice? I enjoyed having the site and with the exception of a couple of heated arguments in the comments, and spam, it was never a concern at all. Even the spam was very minor inconvenience since the filters caught pretty much all of it.
Many of my friends walso ran blogs in the late 2000s to early 2010s and the majority were smaller and had zero arguments in the comments and less spam as well. Just a comment or two on the occasional post.
I've built dozens if not hundreds of hobby projects that had accounts. This includes a blog I ran from 2005-2017, flash games in 2010-2011, an ear-trainer for recognizing relative pitches, a couple of apps that do things with photos, half a dozen language learning apps and all kinds of other little projects. In aggregate, having user accounts brought essentially zero concerns other beyond spam management.
Taking payment is a much bigger deal, but even that is something that millions of people do online and the majority haven't even set up a business entity.
Now I can do that with Playwright! - Thank you so much.
He built https://keepthescore.co/ precisely with this in mind.
One of my projects was a "squarespace" style page builder. Right away, there were nefarious users. The block editor meant that bots weren't really an issue, they couldn't figure out how to use it, but turns out humans aren't that great either. My country doesn't have safe harbor laws, so I took it offline.
Thinking now, I could put that builder back into service and just have it spit out an HTML/CSS bundle for people to self host.
I'm currently working on my first-ever side project with user accounts, and now I'm wondering what I'm in for. :-)
Why's that? Can't you just provide the service as-is? I have a project that has user accounts and when people ask me for features or support, I either don't respond or say that it's not my focus.
I have created https://kyselo.eu/ which is social network for refugees of now-defunct Soup.io.
I can think of 4 projects on my own, lifetime total, that I would consider ready for a "Version 1.0.0" tag, and far more that regret ever spending time on, some that required more time on top of that to disentangle myself one(Especially with hardware, where you've now got physical stuff to deal with).
The only small projects I've been happy with are the pure toys and decorations. One was a replacement for fortune, but it generates them dynamically using a MadLib style text replacement engine. Another was a candle flicker simulator.
Anything tool or infrastructure or library-like has usually become a regret, save for one multiyear megaproject, and a few things with zero reasonable alternatives.
I think the best small projects are the ones that are purely self contained, that will never have anything else depend on them, that will never be part of you "personal baggage" to maintain.
I still do often wonder if I should just look into moving to HASS and what it would take to port all the stuff I use though....
For this to work I have docs folder with a todo.txt, architecture.txt, questions.txt and features.txt. I push it early to a private gitlab repo and use a language like TypeScript that makes it easy to come back to and make changes without fear of braking things. It won't be the first time that I get excited (again) by something and can continue on an existing project.
Something that also really helps is anytime I'm wrapping up a session on a project, the last thing I do before committing changes to git is to make a list of the next half dozen baby steps to complete. Without this, sometimes I'll come back to a project but only have limited time and I waste it trying to remember where I was, so a little hint from the past saying "jump in right here next time" is very handy.
Great to have a few txt files that tell you how it all works, how you setup your server etc as it's surprising how much of your process can change over a few months/years.
The process itself is indeed very fulfilling and joyful.
A big part of that time was spent creating the icon, and copy pasting boilerplate code from my other app for the menubar UI.
Coding the main functionality of the app took little time and it still remains one of the most fulfilling projects I’ve completed.
Of course, I have invested a lot more time since then, especially in handling edge cases with odd keyboards, only because I wanted the app to be useful to as many people as possible.
But it could have stayed the way it was as well, where a 2-day project was still solving a problem thousands of people had.
Github security reached out. Banned. All accounts locked. Creepy lawyer emails. Threats. Then i remembered we are in a closed garden now. It isn't 1998.
Then I was like oh! I will try another one. What if we allow people to automatically delete comments under 0 points on HN. I had a simple script anyone could run on their laptop. Posting was Flagged. Removed from front page in 10 minutes.
Github on the other hand doesn't make sense at all. People participate voluntarily. Which infringement did the lawyers bring up?
This is still such a nice idea. Have you considered relaunching it with gitlab and sourcehut?
*edit: You have pitched your project differently: "Show HN: Give and Get more GitHub stars" [1]
That's ranking manipulation. No social network can tolerate that. I would restart the project and keep the ranking on my site. People will still benefit because their projects get known. Additionally, they will receive genuine stars from the people who discovered and liked their projects.
My projects tend to be because I want something from them (explore a new toolset; have a working dish disposal; make my car able to play audio from bluetooth; not have to care about network filtering on random wifi aps; get a history of just how bad the temperature difference between rooms at home really is). They're "done" when either I have (enough of) what I want, or I lose interest and decide it doesn't matter that much anyway.
So this is a technique for people who start a lot of things to work in such a way that they can feel better about what they do
Is your project "finished", when you see an MVP that you can release to the world? Your project now has a minimum set of features that delivers the initial value you thought it would deliver?
Is it worthwhile to do a Show HN on it? (and risk no one clicking on it because HN receives so many submissions? :)
Is it worthwhile to release on PH? (and so many products launched in PH thesedays are... pretty much well-polished, revenue ready - if not funded etc)
What comes after you "finishing" your projects? Will you continue? or move on to something else?
For me, one of the ways to define "finishing" was to make sure that it launches with some type of payment plan. It is an MVP, but it also has monetization in it so that should anyone else wish to pay for it and use it, they can do so immediately.
Sure, not all projects are about payment and those projects are fine (which is why I said 'one of the ways'...) but if I know that this is something that I'd like to continue to work on because I enjoy it and I know it has legs, I try to find some way of generating revenue to see what the response would be.
Thoughts?
I think for the most part I align with you regarding calling something “finished” as a project having monetization in it.
As of lately though I’ve been thinking a lot about two different definitions of “finish”, one of them being that I can use it to do some task that I want to do. For example, I handle my finances using beancount and around that I’ve build a few projects that are finished in as much as they do what I want them to do and make managing my finances easier (import transactions from email notifications received from bank, eMacs configuration for my finances, etc.)
The second category is open source projects. I often wonder what would it take to build something that is useful to others but that doesn’t come with all the complications of a monetized products? Like, how Moodle or Drupal became Moodle and Drupal? How did they became known? Who used it first?
I want to find a tiny little problem to solve, and find a way that the people with that problem know about my solution and hopefully can benefit from it… but I don’t even know how to properly ask the question about where to start something like that… and actually finish it!
I've learned a lot about browsers, for example, chugging away at a little toy website[0] with a buddy. I know it is simple, but it blew me away that I could dig into webkit to see why stuff worked the way it did. We are incredibly lucky to be digging into such an accessible field.
That’s very true but I think the fact that my day job is in software development has pushed me to work on more physical projects on weekends.
Another example is Unity and Unreal. Go to any game jam and see how amazingly productive the people are that have learned them and know where all the easy to use assets are as well.
Of course the problem with the frameworks (and game engines) is that it's a many month upfront investment to learn them and get comfortable so that when you do want to bang out a new hobby project in a weekend you can.
Having Postgres also helps a lot when you are just starting out and saves you a lot of upfront design and query planning cost you’d have with something like DynamoDB (which is pretty inflexible in ways you can query your data).
The idea is really great, however it seems quite hard to solve interesting problems in this short timeframe.
If anyone likes solving puzzles like these, I'd recommend the Zachtronics games. TIS-100 in particular was my introduction to parallelism (https://www.zachtronics.com/tis-100/).
I think this is a good place to reference Tiny Projects [0], which to me are a manifestation of what is described here.
Everything that’s wrong with interviews, with rent seeking as the cherry on top.
I haven’t tried hard yet but I’m bracing for a shitshow.
https://github.com/dimkr/gplaces (Gopher -> Gemini port)
https://github.com/dimkr/paho.mqtt.embedded-c (revival of an abandoned library, WebSocket+TLS+Windows+Meson porting sub-projects)
https://github.com/dimkr/loksh (OpenBSD -> Linux)
https://github.com/dimkr/locwm (OpenBSD -> Linux)
https://github.com/puppylinux-woof-CE/woof-CE/projects/1 (a bunch of GTK+ 2/X11/X.Org -> GTK+ 3/Wayland/wlroots porting sub-projects)
https://github.com/dimkr/gtk (x86_64/ARM64 port of a 90's library)
I will try to use the framework presented here but I'm not sure exactly how to apply it, for example the project I've been meaning to finish is what I call a very dumb compiler (parse a very simple language and emit x86_64 assembly code but without any optimizations, the most naive thing that will work).
It's hard to think how to reduce this problem to something I could do over a weekend; I have to do a lot of research, thinking and trial and error because I'm not an expert in writing parsers or anything like that.
I feel like this might only work in certain occasions.
There used to be a compilers course by Alex Aiken available online which I've found very helpful in getting started. But apparently they've limited access since. https://online.stanford.edu/courses/soe-ycscs1-compilers Maybe you can find a mirror of a previous version somewhere.
I think a compiler is a nice project because you can start with a very small language, then keep growing it and learn something along the way. Not a one-weekend project, though.
Using that strategy, you can pick different chord voicing templates, like drop-2 or quartal. An even better method would be to move the "hands" up the keyboard after a tonic chord, that way you don't end up in the low registers too quickly, since jazz harmony tends to go down in 4ths a good bit.
It is annoying to ship something that isn't as polished as I want it to be (order fulfilment is a bit janky). But this annoyance is certainly outweighed by the joy of actually delivering something. The polish can come later is a decent amount of people start engaging with the digital project.
For example just recently Zas editor[0] was on HN whose developer spent >1 year building it. How do you restrict that to a weekend?
Similarly the creator of bun.sh[1] (Javascript build+runtime) has been working 80 hour weeks on it for 6+ months.
Ambitious projects like those _will_ take time.
[0] https://news.ycombinator.com/item?id=30952084 [1] https://bun.sh/
How do I compile I GUI app for Mac? How do I create a plaintext editor? How do I expose a Go parser?
Continue with each feature.
Don't get me wrong, I've taken art classes that taught me to appreciate smaller, shorter things. And I think it's important to take that spirit into longer-term projects. But I think there's just a lot more "small" projects these days, what with the combination of APIs, funding, hackathon culture in engineering, and prototype culture in design. The pendulum has gone all the way to the end. Which is fine too, but some of us are going to want to go the other way.
https://github.com/funnylookinhat/vaultexec
I wanted to brush up on Golang, and this was a quick/useful project for our internal infrastructure.
I think the key motivation is being able to see the actual users (ideally also being the active user yousrelf)
https://www.moreofless.co.uk/map-of-parkrun-5k-running-event...
It's really simple but I use it often myself and other people are finding it too, which is nice.
I found this [1] that has multiplayer. However, I prefer how yours automatically redirects to a generated URL.
The blog was the 2nd largest in its niche and lead to me making a TON of friends, one of whom I was later best man for at his wedding. I also ended up getting sweat equity in a business and learning a ton due to that blog. Moderating comments was little to no burden and even if its traffic were 10x more, moderation would still have been a trivial task.
It was a huge success in terms of ROI from my perspective. Having accounts and user-generated content on that site wasn't "betting on myself not to succeed". It enriched my life.
Even in China, which is definitely hard mode for established businesses, many hobby projects stay informal and aren't really cracked down on. My first tech job was at a startup in Beijing 11 years ago and we went through some serious hassle to get an ICP and initially just targeted the foreign market due to the lower compliance overhead. That said, none of my personal sites or games were ever blocked, as far as I know of. I knew some friends that built apps on WeChat and got fairly far before formalizing.
Make "user accounts" effectively anonymous. Don't collect email addresses or phone numbers or names. Just use cookies with GUIDs or autogenerated username like the default Reddit ones (without allowing people to put their own name or other PII in). Maybe let the user keep refreshing until they get a random username they don't hate, but it'll end up being something like "Abrasive-teapot-86" and never $walletName or $emailAddress. If you need to let people move accounts between devices/browsers, let them grab their GUID and call it "secret account key" and tell them never to share it. Also let them know there's no such thing as "resetting their password" and to store that secret account key if they want to be able to recover a "lost" account.
You can't _always_ get away with that. But if you can, it saves a lot of headaches.