When I work on side projects, I certainly encounter periods of boredom or disengagement. What can help is to say something like "you know what... I am just going to rewrite this and make it much cleaner". Only feature parity. Not trying to force anything new or trick myself into solving a hard problem right now.
Sometimes this simple cleanup pass will turn into several hours of deep exploration and development. Sometimes not.
I think of this similar to intense physical exercise. No one in their right mind goes to the gym and deadlifts their 1 rep max without at least a tiny amount of warmup beforehand.
If you are on this path and trying to build a real thing that people might actually want to pay for (or is at least compelling enough to work on for free), you are dealing with a similar mental barrier. Warm yourself up on smaller, more approachable tasks if you are finding trouble with motivation. Rerun a successful prototype from last year to remember why you are still doing all of this in the first place.
Also, if you aren't using source control for your side projects, you really need to get into the rythym. Every personal project I have worked on since ~2017 has a repository tracking it in Github. It takes me 10 seconds to find that clever chunk of code from a few years ago using their global search feature. Little tricks like this keep me from spiraling into distracted nothingness. If I had to manually browse through folders in my filesystem or dropbox, I'd never touch this stuff again.
I create a "project" in my to-do list app for each side project, and dump every little idea I have in there while I'm excited and switched on about the idea. When my motivation ebbs and eventually returns (months or years later), I have a low-friction starting point to jump back in, which makes all the difference.
Jumping into a months-old codebase _and_ having to figure out what to build next usually means I feel a bit discouraged and never really get back to that project.
This is potentially the most important idea raised so far.
Making smaller, deliberate steps can many times take you a lot further than 2-3 gigantic, messy sprints.
I don't beat myself up over "only 10 minutes" spent on the side project anymore. Even if no value-add occurs, as long as I didn't make things worse, I see it as a good experience.
Give a dose of realism and pinpoint the second benefit — the skillset that is truly unique and worth it.
You no longer care about an isolated Jira ticket. You see a thread from vision to execution. As a dev, you start to value other parts of the company and build better bridges/interfaces between teams.
As someone said, building something on your own feels like staring into the abyss and eating glass. Be aware, it's not for everyone and can cost you — not only $$$ but relationships and health.
And that is even if you are passionate about the thing.
It reminds me of Steve Jobs's thoughts on this https://www.youtube.com/watch?v=PznJqxon4zE&ab_channel=coach...
Having started a side project in 2018 myself (now in low $$$$ MRR), I can attest that passion is key — because it's what you would do in your free time anyway.
Does this mean low thousands?
Because of this, I approach side projects from the perspective of getting to revenue as quickly as possible, as opposed to, for example, hacking away at something just for fun or learning something new. Those are entirely valid reasons to start side projects, but I personally don't get the same motivation from them and have found myself quickly getting bored.
My personal preference is to focus on SMB/mid-size B2B SaaS with the goal of eventually replacing full-time job income. For me, consumer SaaS is too small - you're making $5-$20/month/user and therefore need 100s or 1000s of users to reach that goal. Enterprise SaaS is too difficult for a side project (sales cycles are too long/complex). Most mid-size companies are willing to pay a few hundred/month for a good service. As an example, if I can charge $300/month, I only need 50 customers to generate the equivalent income of a decent-paying tech job. The challenge, of course, is finding an idea that meets those requirements!
I am super grateful for Python, Java, JavaScript, C, Rust, Flask, Firefox, Google Chrome, the Java Virtual Machine, Google's V8 engine, GCC, Postgresql, Clang and other open source projects. They allow me to write software and get paid money in jobs. And they're completely free. So good.
People like choosing what they work on and what they spend their time on. But there's business necessity that means we often need to do tasks we secretly don't want to do. Or feel forced to work on technology we don't agree with.
I think it is unfortunate that amazing products go the financial path and then lose their energy and become monetisation over quality or passion such as Heroku But I said that we cannot force people to work on things we want them to.
I feel we need to determine the properties of a product that guarantee monetisation AND quality and passion of its developers.
Are Jetbrains the example of this?
That’s at least my experience…
You say don't lock yourself into dependencies. Well, to create a window on an OS, you have no choice but to have a dependency, because that's how the real world works. The only option is to write your own OS, but even that has dependencies.
That NPM bug still isn't fixed (despite the bug having minor security implications), but there's no way I'm re-writing everything to not use NPM, it would be absurd, nor is it sensible to fork NPM and invest time into fixing the bug.
I ended up putting in effort to work around the bug entirely, but it was only coincidence that we could go without the feature that triggered the bug because we were going to deprecate that module anyway.
Are you really suggesting that developers don't "lock themselves in" to NPM? It's one of the most prolific projects that exists and it would be career limiting to avoid using a package manager or all dependencies entirely.
1) fork and fix, submit PR and use my fork until PR is not merged, if ever;
2) find replacement;
3) remove it and find workaround to implement the user feature in other way;
4) just completely abandon the feature.
There are millions of people out there who have to hustle every miniute of their lives to feed their family, have some shelter and if they are lucky some minior access to healthcare. Each day is a make it or break it moment.
Most programmers and other in the tech space get paid a lot of money in their day jobs. A lot of money compared to most professions. That is a huge win. Almost like being minor royalty.
If you are so lucky. You can put food in the fridge, pay rent, get around, eat out some, healthcare (A much bigger problem in the US, than other western nations true)
You have been blessed even though you did not deserve it and you might not believe it.
Slow down. Try to enjoy life outside of money and outside scheming to make money. and outside of tech. Greed is not a good raison d’être.
Hundreds of thousands of people will make more money than you. They will have better toys, bigger cars, nicer apartments, bigger wealth.
Humans look up.
My boss has a brand new Tesla, he has a nice house. Bossman look up to a neighbor who has a huge house and 2 Porches. Neighbor looks up to his cousin wh ....... [1]
Fuck that.
If you look down, you can see how bloody fortunate you are. Be a bit more humble. A bit more grateful, and try to enjoy where you are now.
[1] These are examples from my era. People may have different status symbols they look at. Maybe you dont want a car, and you get dont care what others have there will be different status symbols you look up at.
I've found that the hardest part is the "post-launch" / "first-user" phase, where one needs to have the fire / resilience to keep building / marketing without (what it feels) anyone caring.
Once the first users (and feedback) start coming in, it becomes much easier to keep shipping.
Going to try a little longer this time.
This is a major issue with my side project (https://www.Didgets.com) which is a general-purpose data management system. It started off as a 'file system replacement' where you could use it to store tens or hundreds of millions of files; put tags on each of them; and then do lightning fast searches to find subsets of them.
I discovered that the tags I invented could also be used as columns in a columnar database table. So I went off inventing a way to build fast relational tables that were good for both transactions and analytics. I also discovered that the system can be used to build logging frameworks, indexing services, configuration management, and backup mechanisms.
The problem is that I don't have the resources to fully build out each feature set, so it does a dozen things (some of them really well) but none of them are a finely tuned, polished product yet.
I’ve been here before, this is certainly not my first startup, but man it hurts still. I feel like I’m missing something, despite all my efforts, I’m just not there yet and i need to step back and try figure out the missing pieces before i burn too much time.
It’ll be ok, but until it is ok, it’s exhausting.
If it's one thing I've learned from following bootstrappers and trying to start my own SaaS - it's that you should spend 3 months selling and 1 day building.
Trying to bring together a lot of open data sources such a building permit history for the property in question and the neighbours, nearby proposed development activity, schools, hospital, police, fire service locations, lead pipe replacement status, legality of any on premise parking etc. Essentially all the "due diligence" related items that come up when you're trying to transact and typically take a fair while to get to the bottom of. A report takes about 1 minute to pull, planning to have the service be a yearly subscription for the customer of around $300/year
OnlineOrNot was my 6th project, first to break even.
The fun is to code some clever software solution and make it to work and show to friends or just keep for own pleasure, then boring stuff starts: user accounts, payments, maintenance, human contact, complaints, and here 99% of projects fail.
I’ve been working on something for a couple years (off and on) and some days/weeks/months my motivation takes a nose dive to the point where I stop work completely. Eventually I get back into it but one of these days, I might drop it completely.
One of my key worries is that if I sell my side project to real users, I have to patch it, I have to monitor it, I have to answer support messages and fix it if it breaks for whatever reason.
As for ones that manage to gain users without latching onto an existing community, I'm wondering as well. Perhaps good SEO or searchable content generation?
I don't think it's so much about motivation as having a structure to your work that allows you to get shit done. I think motivation follows hard work and seeing results, it rarely precedes it. Attention from the press or social media or stuff like that can also briefly be motivating, but it wanes very quickly and is not very reliable.
It's helped to make notes of my ideas as they come. I have literally a wall of post-its that say something like "LSH", or "middle platonism is processed weirdly", or "34 bit URL ids" or "refactor query variants ASAP". It's not prioritized like a backlog, but just a jumble of ideas I've had about what to do next while working on something. It's been pretty helpful to essentially have a work pool to pull tasks from.
My project naturally has 2 month "iterations" because that's how often I do a new crawl and load crawl data, which permits breaking changes in the underlying data structure. So I'll just pull improvements from my wall and try to distribute the work evenly so it progresses in a meaningful sense.
I have a similar project type and timeline, and going through one of these iterations now. Could you share how you persist your data in between iterations?
For mine, these were some of the bigger iterations that were spaced out over several months:
1. I started out by writing raw http API responses to python pickle files. Scraping via api.
2. Then wrote some analysis logic in python that read the pickle files, and outputted to a csv that I could use for analysis in spreadsheets.
3. Scaled up to a couple orders of magnitude more data size, and multiple datasets. Added logic to bulk output any dataset to flattened CSV, then bulk import the CSV's to sqlite tables.
For each of those I had to rethink the code, simplify it, and make some parts generic where there was a common need.
I think my next big push will be loading new data to SQLite incrementally, and figuring out how and where to persist the SQLite data cheaply. Right now it's local but too big to check into a GitHub repo.