Ups and downs of a side project
jereze.comThe article touches on organizing code which has an interesting aside for me.
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 feel this too, and I've learned to accept that this is just the way my brain works. Once I've lost my motivation for a certain project there's really no point trying to force it back, and besides, this isn't such a bad thing. The whole point of a side project is that I can work on what I want, even if that means doing something new every 4-6 weeks.
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.
> I have a low-friction starting point to jump back in, which makes all the difference.
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.
> I don't beat myself up over "only 10 minutes" spent on the side project anymore
This is like the "1 pushup" rule for exercise. Stated briefly, you don't consider any day a loss where you have done even the smallest amount of deliberate work. This has many benefits, it makes for an easier on-ramp to doing the work since your goal for the day is the smallest possible amount of work. It builds the habit of doing something every day. It more often than not leads to doing a lot more work than the bare minimum. It builds a sense of achievement as you continue streaks of work and see progress. Most importantly, it actually does move you towards your big goals one tiny step at a time.
I wish there was more content like this - "making hundreds (not thousands) of $ in MRR after y years".
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.
> now in low $$$$ MRR
Does this mean low thousands?
I've bootstrapped a side project before (in the B2B security space) which was later acquired. I had a _lot_ of ups and downs, but the "up" that consistently outweighed the downs was getting a new user and seeing them convert from free/trial to paid. There is something incredibly tangible and rewarding about seeing MRR increase.
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 don't have any business side projects or anything that earns money but my motivation fluctuates like the author of this article.
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?
I have several side projects. While I contribute to the ups and downs, the usual dagger that grinds things to a halt is hitting some bug in an open source library or language that I don't have the ability, expertise, what have you to fix. Inevitably, the library is maintained by one person who is minimally active, despite being used by tons of people, and so I just get stuck. Software is a very frustrating endeavor. Not complaining about people's time, just the fragility of the tower of stuff software stands upon.
You made the tower yourself, no? Not to sound snarky but by making sure that (1) you do not lock yourself into any dependency and (2) you keep the use of dependencies to a minimal you do prevent most of that pain? At least that is my opinion. As a temporary workaround (sometimes permanent) I opt for a fork, which when kept to the bare minimum is usually not more then a minor annoyance.
That’s at least my experience…
Well, the option is to rewrite the entire stack yourself. So sure, let me spend a lifetime doing that instead of things I'd like to be doing. I already opt for minimal dependencies. The problem is that every piece of software I have ever interacted with has had bugs that immediately surface, and nearly universally, there's only a handful of people that can fix them. I can't possibly be expected to reimplement or even fix projects that have taken decades to develop.
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's what I typically do.
I'll make sure that the libraries I rely on are either ridiculously well proven, or easily replaceable. If they are neither of those things I implement a new one myself from stuff that is, while no doubt just as buggy, it's at least code I can easily fix myself if it breaks.
Usually it's not that much work. I'll just implement what I actually need. Many open source projects are hilariously over-designed and have significant feature creep. If you cut that out you can replace the critical components with not a lot of code and not a lot of hassle.
If it can't be trivially re-implemented, I've been known to fork an existing project and take a grinder to it until it does what I want, usually axing away most of what I don't need to only expose the code I need.
That's a really bad attitude. I ran into a bug in NPM that prevented our CI builds running entirely.
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.
You probably already know but I found patch-package [1] to be crucial when relying on minor npm packages. It’s so freeing to be able to just fix it on your end and move on (and also raise a PR against the package)
Thanks, but this was a bug in npm itself.
Ah my bad! Luckily I haven’t ran into one of those yet and I’m hoping I never will :p
It sounds like you have informed npm about the issue? If it is a widely faced issue, chances are that the maintainers will fix the bug. On the other hand you might be using npm in a way that is rather fringe.
You could try pnpm or yarn?
Was the same bug in yarn?
This x 1,000
I try to sort out the dependency issue with one of the following solution (order relevant)
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.
What "stack" are you using for your personal projects that is both widely used but so poorly supported that a bug crops up that prevents you from forward progress? I am genuinely curious about this because I can say that I have never had that experience with something that is popular. Then again, I am an extreme minimalist when it comes to introducing 3rd party dependencies into the code that I write.
I am oldish now. Reading through the comment threads I dont think my opinion is popular here today but I feel sad when people spend so much focus on making money and to make big money as an outcome.
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.
It took me roughly 2 years to find "success" with my side-project / micro-saas: users using my product on a daily basis.
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.
Thanks for sharing your experience. I definitely have given up on marketing/selling my projects after just a month or two of trying.
Going to try a little longer this time.
The motivation behind my side projects has been mostly having an entertaining outlet for learning new things. One of these is https://yare.io that taught me plenty about building something end-to-end. From concept, design, front end, back end and failed marketing efforts. Despite 0 revenue, the experience itself is greatly rewarding.
>The thing is, as a coder, you will be more attracted by generic product. Generalizing is more elegant, and if, like me, you like to solve problems, you will want to try to figure out a bigger problem than your initial scope.
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 know from lots of past experiences that I have about 6 weeks of attention before something else shows up and gets me excited. All my side projects get scoped to 6 weeks or I don’t do them.
This is my experience as well. Though, whenever I care about documentation and stuff like that, I'm usually able to return after half a year and can continue.
I really appreciate reading this, i lay in bed this morning feeling all the doubts the author is experiencing. I’ve spent about 3 months on a new product, i spent all day yesterday trying to figure out how to sell it effectively. I met with sales reps i worked with in the past, wrote really thoughtful messages to prospects…No one has bitten 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.
> I’ve spent about 3 months on a new product, i spent all day yesterday trying to figure out how to sell it effectively.
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.
what are you working on if you don't mind me asking?
It's a tool (focused on the Toronto market only for now) that provides detailed reports on the history of a building / area for realtors and/or buyers (and i guess maybe renters or self sellers).
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
This sounds similar to what Core Logic [0] provides to realtors in Australia. The majority of realtors use it, and I'm sure they pay a lot more than $300/year
Interesting. Some of this data isn’t easy to access for me in Canada but yep, they’re in a similar space.
Funny because I’m from Australia, but never transacted property over there.
Interesting. Not sure you're looking for well-meaning suggestions from uninformed strangers, but have you thought about narrowing down even more to the tax-sale market? Tax sales can be profitable but hard to access because there's often a minefield of liens, cleanup costs, etc. in the kind of data you're compiling.
What market or niche? Is this a SaaS?
Real estate and yep SaaS, although I kind of want to offer a pay per use model along side it. Just feels complicated to do both, i'm personally a little exhausted by the number of subscriptions in my life.
It's taken me about 4 years to find success (in my opinion, YMMV) in a side project, you rarely hear about the average case.
OnlineOrNot was my 6th project, first to break even.
It's not mentioned here but one of the biggest mistake experienced hires make on side projects is throwing out all the project planning that would normally be done if it was anyone else's project. Honestly, if you can't draw a stick 'n' box flow of what you'll build, you are, to put it mildly, highly unlikely to build it.
I could explain this as I was there many times - planning is not fun for a creator in passion.
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 appreciate many of the comments here. I don’t feel alone.
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.
I wonder how the operational burden for a side project is.
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.
I'm always curious as to how side projects that are so niche and targeted acquire users. I would like to ask the author how much time and effort he has dedicated to marketing and what he learnt from it.
This may be the hardest part, especially for technical founders. I was able to bootstrap a profitable subscription based service. In hindsight most credit should go to my wife for getting in the first users by engaging family, social media, forum posts and what not. Another major factor were my subscribers, who write site content on a daily basis, this generated a ton of organic traffic to my site and made a big difference vs having to write a couple of static SEO optimized pages and hope for the best. Writing the actual code was probably the least important part (but the most fun for sure)
The easiest way is to build something for an existing community where you are not disallowed from promoting your own stuff. Ideally you need a way to talk to a lot of target users without having to pay money on advertising.
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?
Exactly that. Well written. We all share the same situation, the winner is, tough, the one who can overcome all this issues, or at least be better at them than others.
I appreciate author sharing the learnings, that being said given product is not very successful I question the value of such learnings.
I've found perhaps the biggest obstacle to working on my side project is something like lacking vision. If I have an idea, it's never hard to implement. Usually it works, sometimes it doesn't but at least shit gets done. The larger the project has gotten, the more planning it needs, and that's I've historically struggled with. Sometimes I don't quite know what to do next, so I sort of fuss with the code and don't really make meaningful changes. Always gets me in a bit of a funk.
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.
> My project naturally has 2 month "iterations" because that's how often I do a new crawl and load crawl data
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.