Getting too absorbed in side projects
bennettnotes.com
bennettnotes.com
The initial burst of inspiration is always exciting: you've got a novel idea, there are no restrictions, no deadlines, no requirements. You don't care about bugs or beauty, just about making things happen. You could even abandon the project and it wouldn't affect anyone.
But the last 20%… I usually struggle with that last sprint. You need to handle the boring aspects of the project only to make it solid enough to launch and "decent" enough to share. This happened with CSS Reference [1]: very excited at the start about the concept, but then I had to go through all CSS properties one by one, and it took a very long time.
My most successful side projects are actually the ones that were quick to start and quick to finish. I had the idea for a "Web Design in 4 minutes" tiny project once [2], and for a few days, I couldn't stop thinking about it. I managed to design and code it rather quickly (as a result, several bugs still exist, but at least it was launched).
In comparison, "JavaScript in 14 minutes" [3] took me months, and I was dreading not being able to finish it. It was in the end less successful.
[1]: https://cssreference.io/ [2]: https://jgthms.com/web-design-in-4-minutes/ [3]: https://jgthms.com/javascript-in-14-minutes/
It's only an issue if you're trying to publish or launch. If it's for learning, fulfillment, or just exploring something new, 80% might be more than enough.
By the way, CSS Reference is awesome.
Awesome work!
I will push it though, it's just boring stuff that must be done, but luckily I have the chi inside me thanks to the 80% fun part and positive feedback that I received during it.
Soon you have to make excuses to family and friends, which don't understand why you still spend your time on the project...
With age I find myself caring about simple but group-global tasks. It's almost not about how joyful it makes me but how positive it affects you. Maybe nature natural triggering of caring for babies and/or the group.
Sometimes I get absorbed in a side project, and I'm being creative and having fun. Why put a brake on it? I think that some of the best things I've done (professionally) were when I was in a "being completely absorbed in a project"-mindsets.
Sometimes I don't works on side-projects for months at a time. I just don't feel like it and I'm doing other stuff. That's okay, too. No pressure.
If you're always being absorbed by side projects then there might be a problem, but as long as there's is an ebb and flow to these things I don't really see the problem.
I've been surprised at how many employers and engineers scoff at the idea of being "in the zone". Apparently you aren't a "rockstar developer" if the needless distractions in a corporate atmosphere bother you.
We’re always meeting to find out how to be more productive though, discuss the scrum status, update our timelines or a variety of things that give the illusion of things progressing when nobody actually has any time to work.
The analogy of 'playing video games' should help you to see how serious and important these projects are to your life.
Says who? Plenty of my side projects have made me quite a bit of money.
I'd say your mindset is equally as unhealthy as you'd never put any serious thought into it, making your statement about them not making money a self-fulfilling prophecy.
I love the aesthetics of a well designed game. Pretty graphics are mesmerizing. But following arbitrarily designed rules and solving riddles created for the sole purpose of having an end goal for the game,—especially when one has a teenager-like disdain for authority—is more aggravating than having to follow rules in the real world.
Enjoy the free time
But I'm blessed that my kids are sleep through 99% of the night time.
...or do your children not wake up at 6am sharp every day? :P
But what I say is - I'm not doing that 7days per week - if I'm tired I watch some Netflix or just play games or just go to sleep (but I feel really guilty that I've wasted free time to go 'just to sleep' - I know that's a bad mindset, I'm trying to fight with it, because sometimes your body needs to recover a bit more)
I got to a point that I couldn't bring myself to even open a computer after I got home from work ... and while I recovered to an extent (I've had a number of successful (IMO) side projects, and even did some startups since), I haven't quite felt that drive to spend my off-time doing more work. My daughter just turned 18 yesterday, and I'm looking forward to when my son is off to college in ~4 years; side-projects, here I come!
Took a long time to realize, and of course YMMV. I had kids younger than most of my peers (~10 years early, when I was 20 ... it was all planned, perfectly on schedule), so when a few of my friends' wives became pregnant recently, I gave them all the same advice -- to give yourself time and space to learn how to integrate this new aspect into your life. I went into it trying to maintain my "me time", with side-projects, writing books, making games, reading/writing blogs, participating in online communities (/. at the time), etc ... and I burned out, so my advice to them (and to you) is to learn how to re-balance your priorities. Beer and TV will kick your ass the next day if you stay up late, and eventually it'll catch up to you. Better to go in cycles ... have some "benders" from time to time where you hang out with friends, play games, drink beer, watch TV; and then have a stretch of time that you go to bed at a reasonable (and consistent) hour, exercise, etc.
I know exactly what I want to do when I sit down and write code and to be honest I’m spending very little time on writing code. It’s maybe 30 minutes a day, plus constantly going over ideas and research on Trello/iOS Safari when I’m commuting or I only have one hand free.
I think my productivity is not much lower than before, although there are moments when parenting gets in the way I still think it’s possible to keep making progress.
Oh gee, no, no. If all you know is the first few months, you know not of parenting time requirements. You need to come back and talk about ruthless prioritizing and efficient coding when you parent a toddler, or two. Then we can all have a hearty laugh at this post together.
I do find myself already thinking I'm too tired / busy to do something, but then actually I sit down and get started and find I can make progress. I feels to me like it's a mindset of prioritising the things that matter the most, and side projects should be high on the list in my opinion.
If you can find the time to read articles and articulate a response on HN you probably have time to spend on your side project.
I found to have a good amount of free time during that first year or so. The weird sleep schedule provides it, I think. If you're like me, you'll find your schedule filling with more and more kid activities as they get older. Then it gets harder to fit all the things in, and you have to make some interesting choices.
For another perspective, I lose 11 hours of my day with my day job, including commute time. With the 13 hours remaining, I get maybe 45 mins a day to groom myself at start / end, usually interrupted multiple times. I don't tend to get more than 2 hours continuous sleep in any given night, so while I get to bed and sleep by 10pm, and usually woken up and forced out around 5am, I've probably been interrupted twice over night. Most of the rest of the time is tending to cooking, cleaning, feeding, laundry, homework, ferrying to and from various hobbies, and when there's moments to enjoy, stopping to enjoy those moments.
When I find that elusive 10-15min break, I don't have the mental power to think about side projects. I just want a nap.
Awch. I've got a 2 month old who, for the moment, is a surprisingly good sleeper. It's still exhausting, getting in from work, trying to spend an hour of quality time with her while helping mum finish dinner before she goes into an over tired 'witching hour'.
I'm much more driven to try some side projects though. The sudden drop to a single salary and the vain hope that one day I could be finically sound enough to take an extended trip with the little one are big drivers.
When they get older and start rolling around and walking, then the amount of time you have to be watching them increases dramatically. Especially when they go from 3-4 naps a day to 1 or 0.
Let alone that sitting around programming all day is probably not what you should become a parent for. Note that I am not saying you do this at all, I just mean it from a hypothetical 'maximum-amount-of-time'.
Personally I couldn't care less about my side-projects in comparison to the joy I get from seeing my daughter explore the world, learn languages, etc.
Parenting is really honestly taking a lot of time from me that I used to spend on hacks and projects.
+1 on the thinking ahead, that definitely helps. But that limits you to stuff that you already know and can model accurately in your mind, which BTW precludes any sort of debugging work, exploratory programming, etc.
(But as you witness, there's always time to shoot a random remark on HN ;) ).
I hope they’re Restful APIs.
With a 8am-4pm job, plus commuting, plus cooking (you cook fresh for your kid and don't rely on delivery services, don't you?), playing with kid and buying groceries, well.. there's not so much free time.. my energy is over by 8pm
Yes. It is an excuse. That's literally what it is. Its not an invalid excuse or a fake excuse just because it's an excuse. This person has real material daily struggles and constraints. They have logical reasons they can't do more. They are excused from judgement for not doing their side projects. That's how excuses work.
It takes a lot of effort, energy, support from the spouse, ...
I often say - if I could go back in time, I would go visit younger me, single, with 9-5 job being only obligation. I would go there, and slap him (myself) across the face for complaining about not having enough time. I mean, seriously?
And a note to those parents with one kid - enjoy your spring break. That's what it feels like compared to having two kids. Wouldn't dare to think about how it is with 3+.
Enjoy your time with kids, you won't get another chance with that. With side projects you can always start over.
Given that the third baby is very, very likely our last I’m definitely trying to appreciate every moment. The upside is that by the third baby you’re able to just enjoy things because you’ve got some experience and aren’t overly anxious all the time.
I’ve learned the value of slow and steady progress on hobby projects. In some ways it’s more effective. I spend weeks without any real time to sit down and code, but by the time I do I’ve either worked it out in my head during spare moments, or on pencil and paper.
I do it with accordance with a to-do list: setup realistic deadlines for all projects/side-projects and build a schedule based on them (The deadlines are the only "tight" stuff in my schedule, the rest is flexible). Your work/life balance has to be part of whatever you plan! (e.g. I usually try to have ~2 weekends in the month for other activities and ~2 weekends for projects).
Also it helps me during my free weekend/night to simply keep away from my laptop, this way I don't fall in the trap of wanting to work 1 hour and end up working the whole day.
Sadly your problem is quite common. I know too many people that can't handle their work/life balance...
"Find The Thing You're Most Passionate About, Then Do It On Nights And Weekends For The Rest Of Your Life"
https://www.theonion.com/find-the-thing-youre-most-passionat...
1. Users. Once someone uses your project and you're growing, even if it's slow, it "motivates" me to keep working on it. That is also why for me, it's a must to keep the project small and launch ASAP, which in turn also helps against feature creep and bikeshedding.
2. Delegation. Once I validate the project (people are using it) I try my best to outsource time consuming tasks, mostly programming, administrative, research, and data entry. This frees me up to enjoy leisure time while not feeling the project is stagnating.
You have to find your balance - decide what's the velocity of the project you're comfortable with. Once I realized that wanting to build and grow as fast as possible is stressing me out and ruining my social life, I decided I'm going to try and be ok with slow growth since I don't depend on it for a living.
3. Part-time job. I work 3 days a week. This should've probably been number 1 on the list. I still make good enough money to live comfortably, while my side projects make little money I can save. Obviously not everyone can or want that, but as a developer I have the privilege of earning the same as some of my less techy friends with 60% of the work. Frees me up for a whole bunch stuff.
This might not apply if you have kids and want to save as much money for their futures sake.
I use to do side projects to learn more. That is what I used to say.
The reality was that change the activity I really loved for decades to another has not been easy.
Side projects has been the perfect excuse to stay on the laptop.
How do you replace a no-competitive activity where you are in control of what you do and decide what and when to do?
So what worked for me?
Find something that exists in the real world, in my case an old, unchecked desire (learn to ride), and just do it.
How long I waited? Long time, years.
Once I hopped in a saddle and took to the trees, things have never been the same, and I know I'll have the rest of my life to make it the last 15%.
One simple view that helped me are the little github green-boxes that show your commits. If it's too full for long stretches, time to take a break so I won't burn out.
I don't take for granted that I can get absorbed by something. It's like... love. While I can hold myself from it, I cannot force myself to have this level of energy, and dedication.
What I struggle with are ill-invested infatuations. Obsession for starting a project, but then later focusing on not-so-important details... or dropping it in favor of another project. I am haunted by a ghost-town of unfinished (undead?) projects. For ones that I finished - I rarely (if ever) regret them.
Another story is with balance - how to make sure my projects don't have too negative impact other activities (don't mind a pile of clothes from time to time; all in all, I won't get influential by "this you kept his room tidy most of the time"). Though, it is crucial to take into account long term consequences on health, paid work, relationships or... energy to do side projects. E.g. my brother considers it unwise to cut on sleep (I agree) and claims that overnight work is a load (with high-interest).
Full disclosure: I am a consultant and I do have time between paid projects (I organize my time, so to be able to have ~50% for side projects).
Yup, that's the sacrifice but worth it for me personally since that side project became a business and enabled me to do a big exit.
Congrats on the exit. How long did it take you working on the side until you were able to make it your full time gig?
It was a side project for a couple of years but things snowballed after we reached a certain threshold and it became impossible to keep my day job.
Especially when they don't do anything other than display your name, face, and a hamburger menu. If you want the hamburger to follow me down the page just have that float...
My process repeated the same cycle: I come up with an idea for a side project, start working on it, get more and more involved with time, until a few months later I am completely burnt out. At that point I drop the project, take a few months break, rinse and repeat.
I'm glad to say that once you identify this pattern, you can start working on it and develop healthier habits. I'm also glad to see that I am not the only one who struggled with this. I wish more people, specifically young and enthusiastic programmers, read this article and learn from it.
I'm trying to get into meditation hoping to find a way to have better control over that strong force that keeps me glued to the laptop.
The whole purpose of the side project is on-the-go learning and therefore you get this feeling inside that the side project is not optimal, or the project is not what it should be or that something is lacking. Whatever the reason, but somehow the side project is delayed on the timeline. Once the project is delayed;
a) Try to finish the side project ASAP by removing some of the important parts of the project and now it doesn't turn out to be the way you initially imagined it
b) Since the assigned timeline has passed, the project gets delayed forever as new priorities kick in
c) You finish it for the sake of completing the project because you have invested far too much time in building it
As a founder of http://draftss.com; I get to interact with alot of other founders who are struggling with completing and making their side projects beautiful. They want us to undertake the complete project for designing being Apps UI design or creating landing pages. Some founders ask us to handle complete projects as we think right, while others provide inputs for every minor inclusions and deletion. Conclusively, I'd say that it totally depends how dedicated you would be to your project from start to end. And that would define how your project is going to turn out in the end.
Anyhow, just wanted to provide a counterpoint to "side-projects are making me miserable" when there's likely a hidden 3rd factor: the other thing you need to work/do to subsidize the life you currently fit into.
Best of luck! I'm excited for your side-projects <3 (or rather, whatever it is that makes you happy, but I hope you don't stop experimenting with what that might be!)
Otherwise, I just end up grinding until my mind eventually says enough and I'll just have to stop for a few days. I've considered whether a more balanced schedule could help but have currently settled on the opinion that while we may be looking for the right approach, there isn't one, only trade-offs. You either neglect progress on your project or neglect your personal life. You just have to decide how important each of those are in your life, then prioritise accordingly and accept the trade-offs.
What helps for me is having a set time when I always work on my projects. Which for me is an hour or two before work. This makes me feel less obligated to work on them after work. But if I choose to, that's ok too.
If you love hacking, nothing wrong with hacking from the time you wake up until the time you go to sleep.
Know any good services for that? I feel like this is always the hot, new startup idea that's gonna take over but they always fizzle out
For less populated areas, this seems like an extension of housecleaning services. I've known a few people that have someone come in, maybe just once a week to clean. Some have laundry done then, others just want the cleaning. Granted, since they would be using your washer/dryer, there is a limit as to how much laundry they can do in a day. Manageable with 1-2 people, but 3 or more, each with their week's worth of laundry could really add up the dryer time.
If I know something should work, and I can’t get it to work, I’ll work on it for days weeks and even months.
I hate to say it but sometimes the thing I’m trying to do isn’t even important, it’s just that I MUST make it work.
It's a great book, highly recommend.
https://www.amazon.com/Atomic-Habits-Proven-Build-Break/dp/0...
James Clear's (the author) blog with a ton of great content: https://jamesclear.com/articles
Needless to say, this is not a very good strategy to build a healthy project in the long run.
Anyway, a few months after the business went nowhere and I got a real job, I decided that I wasn't going to start any kind of a side project until I found a girlfriend.
That was the best decision in my life.
I'll admit: Ever since I met my girlfriend, (now we're married with two kids,) I haven't been able to have a long-term "side project." I tried to start this and that, but what I realized is that anything that interesting would be so all-consuming that I'd need to quit my job; and that I have no desire to figure out how to make it profitable.
So, every once in awhile I take 1-2 days off from my job and work on learning projects. I don't have any expectations that they will ever be finished.
Somewhat organically, my side-development has shifted into a more meditative exercise. While the day job necessarily forces consideration of prioritization, deadlines, and other concerns - my side development is free to be "pure" with respect to some goal.
These days I take small problem spaces and implement them _again_ and _again_, from scratch, trying to get a finer understanding of the problem each time. The code is not on github or publically shared - it's not really meant for outside consumption.
For example, I did several re-implementations (from scratch) of a tokenizer for a toy programming language with some typical syntax, with the goal of optimizing the core tokenizer loop while still handling a full unicode input. Just to illustrate why I find these sorts of exercise to be valuable, I'll expand on this example in detail.
Over the various implementations I gained a few key insights that I carry forward in my future implementation work:
1. State machines with O(1) dispatch using arrays-of-edges for transitions seems appealing at first, but is in fact a poor optimization choice. The approach assumes an even distribution of probabilities between all states, and the distribution is in fact highly skewed. A hand-rolled approach that is able to carry the current tokenizer context implicitly in the code-location performs far better. The final design was a parser that has a top-level `nextToken()` routine which checks the first character and then uses a series of conditionals to branch into subroutines for parsing individual token kinds.
2. Rediscovered the well-known trick of using sentinel characters in the text to eliminate the "test-for-eof" branch in the inner `nextChar()` function which is the main workhorse of any tokenizer.
3. Pushing the parsing of full unicode entirely out of the fastpath by leveraging the fact that the first byte of a multi-byte unicode character will fail any test for an ascii character or range. This led to a design where instead of `nextChar() -> Unichar` as the interface, we split the methods. The fast-path method is `nextAsciiChar() -> MaybeAscii`, which blindly returns a type-wrapped `u8` value. The value is then sent through the series of fast-path checks in the main control flow. If the fast-path checks fail, there are two methods that help handle the slowpath: `unreadAsciiChar(MaybeAscii)`, which can implicitly do a blind decrement on the current text cursor, and `nextFullChar(AsciiChar) -> Unichar`, which reads the full unicode character without unreading the first byte.
4. Realizing that it's better to use a temporary copy of the current cursor during the invocation of a single `nextToken()`. That memory write at every `nextChar()` can be eliminated and replaced with a single write when a token has been successfully parsed (or error). Updating the cursor pointer in place can potentially be eliminated by a smart compiler, but given that we're hand-rolling our tokenizer due to reason 1, the tokenizer code gets large enough (and contains enough loops at various points - e.g. to parse numbers, identifiers) - we cannot expect the compiler to both inline everything as well as eliminate every spurious write-back of the current cursor position. This prompted a modification of the design to have the methods not be implemented directly on the tokenizer, but a temporary `TokenParser` value-type that is effectively a `(&Tokenizer, *u8)` that is moved around by value through the control flow, and is written back and destroyed when a token is parsed (or error).
5. Optimizing the parsing of keywords (which show up as identifiers) was interesting. The trick I used here was to keep track of the cumulative `xor` of the low 4 bits of each identifier byte. At the end of parsing an identifier, this cumulative value is fed to an explicitly coded state machine which switches directly to the most appropriate subset of identifiers for that (admittedly terrible) 4-bit hash value. A better hasher did not justify its own computation cost.
6. Reordering all of the sequences-of-conditionals using a statistical analysis of the probability distribution of characters at every step in typical source.
That whole process took about a year of casual work. I didn't drive myself to complete it - but simply let the problem sit in my mind and percolate - trying new ideas and implementation strategies as time allowed. The final set of insights I derived from the exercise are something I consider very valuable.
A tokenizer is a simple thing, conceptually. It's something a sufficiently intelligent first-year CS student should be able to whip up. It's something I myself have done for various pragmatic reasons several times. But the meditative exercise: "take a small thing, make it faster, then make it faster, then make it more faster, then faster yet", has provided me with a real insight into all nooks and crannies of the problem space. Something that seemed trivial at first yielded more and more depth the more seriously I analyzed it.
This approach to spending your "side-time" is not appropriate for everyone. If you want to ship stuff, and that's your motivation (a perfectly reasonable and fine motivation), this does nothing for you. If you have a lot of extra time and the energy to complete large projects independently of your employment, that might well be a better choice.
But for those of you who are finding yourself in the same position as I am: not enough time for big projects, not enough interest for small toy projects.. perhaps treating your side-development as a meditative exercise on a focused problem is something that works for you.
For me personally, it gives me a lot of gratification because I appreciate the gained understanding far more than I appreciate the litter of toy projects I've produced in my younger days.