Passion Projects and Life: Spreading Yourself Too Thin?

Fellow programmers… how does one handle the stresses of a full time job, family and friends (another full time job all its own) and a very important passion project?

My only 2 days off in the week would ideally be spent working on my project as it plays a role in achieving my dreams. However, I find it difficult to do so anymore as my free time seems to always get gobbled up by social obligations… I’m too much of a spineless yes-man to tell others to back off. Although, every time I decline anything I feel awful because the same folk keep asking and a lot of times I HAVE to say no, otherwise I’d get nothing done… And getting up early or staying up late to program before and after work is proving to be quite exhausting (and very difficult as I’ll commonly work a full 12 hours on most shifts, if I’m lucky I’ll get a 6 here and there). Not being able to program as much as I’d like is really starting to bum me out big time… I don’t recall ever having been depressed, but I’d be lying if I said this hasn’t put some emotional strain on me.

TL; DR:

Has anyone here managed to find balance? I feel like no one else understands where I’m coming from. Has anyone else felt this way? Is it just me that finds it to be so difficult sometimes? I guess I just want to know if I’m alone mostly…

I have exactly the same problem. I wrote this blog post about it last year with some suggestions for what I call “Zero-time programming”:-

I felt the same… and pretty much gave up on programming in my free time. Getting to anywhere with programming is much more time consuming than with other hobbies. So in the end I embraced time with my family and friends and reduced hobby projects to things that can be done quickly or as a combined effort in my “social group”.

This might not be the solution you are looking for, but in the end it gave me peace of mind at least…

Since a few weeks (2 actually) I picked up my old hobby, programming micro-controllers.

These ATTiny45 chips have 4K ram, 1MHz (up to 20MHz, with an external clock), and are fun to integrate in your handcrafted circuits.


http://i.imgur.com/7U3V3nC.jpg

You can get a lot done in a day, as by the time you wrote >200 lines of code you realize you screwed up because the chip’s flash memory is full. This forces you to keep everything tiny, hence you (almost always) get things done quicker. Getting 2 chips to communicate wirelessly over 433MHz with a few inductors, resistors, some wires as antennas (cut at 1/4 the wavelength), and custom noise-filters programmed in C or ASM… is just great. (for me). It makes you realize how bloody hard wireless communication is, trying out half a dozen algorithms/approaches to up the bandwidth and range (over 20m and things get really noisy).

It’s cheap, these micro-controllers cost about $2, low-end 433MHz modules are $4, so if you damage one, by stepping on it, short-circuit the wrong pins, or passing the wrong voltage through it (none of which happened to me, yet), you’d just grab another chip from the chip-bin :slight_smile:

Debugging is either done over the serial bus, with LEDs indicating certain states, or my favorite: creating a high resistance voltage-divider and wiring your signal into your PC’s audio-in, then using a software two-channel (left, right audio) oscilloscope.


http://i.imgur.com/iW4ojat.jpg

I know the struggle. And I also know that successful days are STILL possible, I’ve also had a few recently; it’s just that they’re becoming fewer and fewer as time passes and I just wish I could get to a point where I can confidently set aside a few hours or an entire day every week at the very least where I can just let my creativity explode like I have in the past! I remember one day a few years ago, only having written 1 previous 3D engine (a very poor quality explicit-voxel rendering engine) and almost zero prior knowledge of anything other than voxels, I started a binge programming session that started at 7pm that night and by the time 3am rolled around I had my first ray casting engine up and running, with arbitrarily angled walls to boot! It’s also tough knowing that my only other team member is probably better off finding someone else with more time to devote to the project. But at least now I know I’m not alone, feel free to vent.

I work into the small hours every night, then get up at 7am and go to work all day, come home and wrangle kids, appease wife with my worn-out presence for an hour, then she goes to bed and I go back to work. Rinse, repeat. It is not very healthy. I can manage it for a few months at a time then burn out for a few months. I’m just coming back “online” after a 6 week slowdown.

Cas :slight_smile:

That’s so incredibly cool! I absolutely adore working with microcontrollers, I had to program a small driver in C for the ATTiny for the Robotics team! We were using UID chips that had to be interfaced with.

The life is full of crossroads, it is up to you to take the path which you think might be leading you to anywhere. After graduation my free time first reduced after marriage, further after having first and second kid. What I understood about how to maximize the free time is careful planning, although not every day it will work out. For example, we have implemented the sleep schedule with my wife, so the kids go to bed at determined hour, which generally has a standard deviation of 1.5 hours :D, but at least I know that I will have at least two hours to work on my things. Thinking about the tasks during lunch or during coffee time helps to find the most efficient and faster ways of doing what is planned, thus at the moment when kids are asleep I am rested already from full time job and can dedicate myself fully to the side projects. It is not as much time as I would like to dedicate for the projects, but for me the priorities were set long time ago, plus I am not sure if I had much longer coding sessions I could stay as focused as I do not during those two hours. Also I found that finding a partner is something way to beneficial to ignore, try to find someone at least to discuss your things.

Already been working on Lethal Running for more than a year and its far from being finished.
I work full day as freelancing developer for business software, so in a week I have only about ~15 hours for game programming. It is highly annoying to constantly having to interrupt your work. I try to keep a regular working schedule and add any additional time I get. That also means that there is no time left for other things like guitar playing or reading.
Outsourcing work is a must, for game design conceptual work, for graphics, sound, shader programming and testing later on.

What does a medium pizza and a marginally successful Java game developer have in common?

[spoiler]Neither can feed a family of four![/spoiler]

I usually try to do one thing per day on my games. Even if it’s just maybe a tiny bug fix. That way I still feel like I’m making progress even if I don’t sit down for 2+ hours working on it.

I deal with it by repeatedly telling myself that it’s my life, and I can choose to live how I want.

If you want time to program and don’t have to spend time elsewhere then make it happen! I love hanging out with my friends and family, but there are some days I just say “no” because I have personal projects I want to work on. I also have a schedule; Monday and Thursday I go to band practice after work and stay there until midnight generally. Saturday mornings I go to Starbucks and work on my projects for a few hours before doing anything else. Sunday I repeat that, but then go see my parents until around mid-afternoon. The rest of my time is wildcard time, I either work on things or I see my friends/family.

Maybe you need to establish a schedule like me? Everyone I regularly talk to knows that I have things going on so they know when not to ask me to hang out. Makes things much less awkward since I don’t need to say “no” as often to people, which I hate doing.

Just pursue what truly makes you happy. As long as you’re not hurting anyone else then it’s your life and you need to take control so you’re content every day. Start saying “no” more often! People will likely understand :slight_smile:

I think you’re right. Maybe more scheduling is the answer I’m looking for. If I can just establish some concrete days on which people know not to disturb me, maybe I’ll get work done at least more consistently if nothing else. It’s easier said than done when you’re not a fixed work schedule but it’s certainly worth bringing up with my employer.

I’m in a similar situation with work, family/kids, side-projects and LWJGL competing for my attention. Assigning days of the week (or hours of the day), to specific projects has been inefficient and does not work for me at all. I need long stretches of focusing on a task, for days or weeks in a row, to make meaningful progress. It’s usually a few days of research without much coding, or just a little bit of prototyping, then a few more days of actual coding, then several days of validation and polishing. I’m not a good multi-tasker and switching to other projects, even for a day, breaks the flow.

So, another approach you might want to try is: schedule your work in batches. It can be anything from a week to 3 months, where all your free time goes to a single project only. It doesn’t even have to be actual work. This week may be LWJGL week, next week might be family/friends week, the week after workout/fitness/personal-time week. Do one thing with your full attention and do it right.

A few more tips:

  • +1 for having a reasonably strict schedule for the kids, especially bed time. It’s good for them and it’s good for you and your spouse.
  • Make sure you sleep enough. Every person is different wrt how much sleep they need, but modern life usually means you’re not getting enough. More sleep means less time for projects, but it’s the quality that matters, not the quantity.
  • If you’re self-employed and can afford it, add your work to the project rotation. Putting the job on hold for a week may not be the end of the world and it can free up precious time for something a lot more satisfying. I’ve done this several times while working on LWJGL.

I think the single biggest reason for my not having done better in terms of career has been how long it has taken to learn how to successfully say “no”. I’m still not great at it, but I think I’m a little better than I was. Maybe.

For example, in the 1980’s I had a game programming job. Worked there 2.5 years. It was a sleep-under-the-desk environment, we worked around the clock, lots of deadline pressure. Most of us who left that job left because we burned out. Some of us stayed burned out longer than others. It took me about 10 years before tiptoeing back and learning how to do some application-level database work (Paradox, then MS Access), and another 10 after that to allow my interest in game programming to reassert itself and take up Java.

Saying “no” is complicated (though it is also possible to go full warrior and crush all enemies regardless of consequences). There are other people’s feelings and needs. There’s financial issues. There’s learning about how to find win-wins and figure out diplomatic ways to let people know that you are not rejecting them personally when you set aside some time for yourself. There’s also learning how to tell if the fear or hurt another person shows you when you say “no” is something that you genuinely need to take care of or not. Sometimes it isn’t.

I used to have heaps of free time as a teenager and uni student, now there’s hardly any.
Sometimes I start up old game projects I made just for fun and wonder at how I was able to spend weeks and weeks on little projects, getting so deeply involved in trying to squeeze out a few extra FPS of my silly Java2D game. Looking back, I was polishing a turd lol.

I now understand that I only maintain long-term interest in things that other people find useful or interesting.
I work as a teacher and quite enjoy applying programming to that. I’ve got a website Java Tomcat where I post up the past exam questions and solutions which students use for their homework and self-study:
http://www.fightfinance.com/afin102.jsp
If a younger version of myself knew that I would end up applying my amateur game programming skills to make an exam question bank I would be quite demoralised! But I think I’m lucky that I enjoy work, can apply programming to it and at least some people find it useful.

This explains your interest in the Tiny Code Challenge!

That sound card oscilloscope is very clever. One day I’d like to try that.

I also enjoy electronics, I’ve bought lots of arduinos, sensors, laser pointers, stepper motors and servos (2$ each on ebay) but haven’t had time to make anything cool yet. I’ve only programmed an arduino to switch a laser pointer on and off in a loop. I’d like to program a wheeled robot one day that can weed my lawn using AI to recognise weeds and poke them, spray herbicide, or maybe burn them. Though I doubt I’ll ever find time, it’s fun to make plans and chat about it with any more knowledgeable people I can find :slight_smile:

This sounds cool, tell us more! I went to my local university’s engineering department’s open day where they had lots of robots to show off which were in the FIRST competition (https://firstaustralia.org/programs/first-robotics-competition/) and even though the students appeared quite young they made some incredible things, like a wheeled robot that threw frisbees. Quite impressive.

I think the key to finding enough time and not becoming demoralized is a combination of four things:

Work in small pieces.

I have a very hard time staying motivated over long periods of time. So I try to work in small incremental chunks that can be completed in about a week. I work on a chunk, finish that, and start the next chunk. Programming is a lot of breaking a problem down into smaller steps and taking those steps on one at a time, and I think that applies to time management as well. If something takes a month to complete, that means you haven’t broken it down enough yet. You can still work towards larger and more complicated goals, but you need to chip away at those goals in smaller pieces.

I’d also recommend taking part in game jams like Ludum Dare. Nothing shows you how to break things down into smaller pieces quite like creating a whole game in 48 hours. Use smaller projects to explore stuff you’re thinking about implementing in your larger project.

Publish your changes.

I need to see the progress I’m making. So every time I complete a chunk, I publish it even before the whole big complicated end goal is complete. Again, this involves breaking your problems down into smaller steps that can be extracted and published.

You might think about this as maintaining a minimum viable product: instead of working on a bunch of large changes that break the whole thing for a long time, try to split those up into much smaller changes that you can push out one at a time. Each piece adds a tiny piece to the whole project, but it also doesn’t break anything and can still be treated as a cohesive whole.

So if you don’t have one already, I’d start a development blog or just post regular updates to this forum. It’s much more motivating to look back on a year of work and say “wow, I’ve added 50 different chunks” than it is to say “I guess I’m about 50% closer to my end goal, but I can’t really tell because I’ve just been toiling away on one huge project.”

Set a schedule.

Like others have said, setting a schedule has also been key for me. I work full time and have after-work responsibilities, so it can be easy to come home and just stare at the internet and netflix. But I try to get in at least an hour of work every day. Working in small chunks helps with that, because in an hour I can actually make visible progress on whatever small chunk I’m working on.

You might think about joining something like One Game a Month to get into the habit of setting a schedule for yourself.

Make it easy to pick back up.

Related to all of the above, it needs to be super simple for me to dive back into my work, write code, run that code, and push my changes. If I have to spend an hour opening up an IDE, figuring out where I left off, and waiting around for stuff to build, then my hour per day gets eaten up pretty quickly, and honestly I get easily distracted. So I’ve purposely chosen a workflow that’s as simple as possible, and getting back to work is as simple as opening up jEdit, and publishing my changes is as simple as pushing to GitHub.