Pet Projects and Time

What are your tips on time management when you're working full-time and also trying to continue your education/working on pet projects (I consider these one in the same as pet projects teach me things).

This has been a little bit of a sticking point for me. I love learning... But I also love being a professional and while I am the craziest nerd I know who can spend all week working, then spend 1 or 2 days of the weekend working on a pet project or studying other related stuff such as cryptography, honing my x86-64 skills, or math, there are certainly times when I either don't have the energy, have other obligations, or just need a break from computer stuff so I don't turn into Gollum.

And I don't even have kids yet... So I can imagine those of you who have children AND full time job, AND doing these projects. When I was just studying, I could cover a given project or subject in a week but now it's stretched out to months. In fact, I'll often say to myself "Holy crap, I was reading up on xyz subject TWO WEEKS AGO? I wanted to get that finished in a few days." Secretly in the back of my head, I worry that I won't be able to attain the knowledge that I wanted to in my personal time.

Any advice or tips on this? I know people still get stuff done - I see it all the time and one of my fav programs Uncle Bob Martin states that he spent his entire life giving an extra 20 or so hours a week outside of "regular work stuff."

My only thought is to look at this career as a marathon and perhaps just give myself more time to get things done? Thoughts?

Edited by Todd on
There is no way you will be able to do or learn everything. So the easiest way to get more time for projects is to put some of them on hold so the others get more time and dedication.

Make a priority list of what you want to learn/do and stick to that. Only go to the next topic if you have finished the current one or are about to burn out on it.

It's better to have a few finished projects that you can be proud of than a slew of unfinished ones that are in a state no-one else can use/build on.
This works for me:

  1. Log your daily activities.
    Write a short entry ([timestamp] [task]) every time you switch between tasks. Try to keep it as granular as possible and try to
    include everything, so you end up with an accurate representation of what you did with your free time. At the end of the day you can see if you spent your time on things that are meaningful to you. It also makes it harder to procrastinate accidentally, because you have to make a note of it first.

    It's fairly easy to do if you keep a log file open in a text editor at all times (or keep a pen and notebook nearby, if you prefer handwritten logs).
    If you happen to use vim, put this in your .vimrc:
    1
    nnoremap <Leader>m Go<ESC>"=strftime("%Y-%m-%d %H:%M:%S  ")<CR>PA
    

    It will create a new log entry at the bottom of the file when you press <Leader>m

  2. Make predictions about how long you expect each task to take.
    You already do this implicitly. The point is to do it explicitly and over relatively short time-scales (a few hours). This allows you to quickly notice if something is taking longer than expected, and because you notice it immediately after completing a task, you can try to figure out why it took longer than expected (instead of noticing it two weeks later and having no clue where the time went).
    NOTE: This is not about setting goals. If a task takes longer than expected, it's a failure of prediction, not a failure of execution.

  3. Make a schedule.
    Make a list of what you plan on doing, and later compare it with the log. The log can help prevent procrastination, but it doesn't help you choose what you should work on. By making a list ahead of time you can take into account all the different things that you're interested in. As a side-effect, it can help a bit with the "low energy" issue, because it adds some amount of commitment.

  4. Consider tasks based on how much time they take, not based on how much effort is involved.
    This is the best way I've found to deal with the "low energy" issue.
    Saying "I'm going to spend an hour on project X" seems to work better than saying "I'm going to solve problem X".
    If you do the latter and things don't go too well, you might quit early, and if you don't have good idea of how to solve the problem, you might not even start.
    By committing to spend a fixed amount of time on a problem, you'll at least make some progress.
updated link https://en.wikipedia.org/wiki/The_ONE_Thing_(book)?link=true

Edited by predikt on
well damn..

I'm not a very good QA guy that's for sure
I insist on taking some time away from _work_ for learning. I communicate that to my colleagues, for instance, that I use a special day of the week for learning.

A developer work is composed of learning activities. (Even what we call coding) Making them more explicit is essential to making the organization you work in more mature.

If we don't make an explicit demand for it, then it will always be assumed that we have to do it on our leisure time, which is inefficient and unfair. { The company I work for also has regular weeks of undirected work (named "Hack Weeks") }