A few weeks back I came across a site that can generate all of your GitHub activity into a single chart. Looking at mine, I noticed that I have been fairly consistent in my activity over the past 15 years. With some encouragement from a CakePHP contributor I wanted to share some of the practices and habits that have helped me remain active for as long as I have through the many life events that occurred:
- I had three children (2011, 2013, 2017)
- I changed jobs three times (2009, 2010, 2018)
- I started a side business.
Throughout these events I kept up my open source activity. While there have been periods of lower activity, I’ve tried to build habits that prioritize long term sustainability. Because the bulk of my open source work has been volunteer and hobby based, building for endurance and preventing burnout were more important than getting high throughput in short periods of time.
Create a daily routine
My start in open source was with CakePHP. I got involved in CakePHP early in my career and it has helped me grow and learn immensely. I’ve been able to collaborate and learn from each of the former and current contributors. I started off contributing to the documentation, and grew into writing patches, getting commit access and fixing bugs. Each day I would check the issue tracker for new patches to read and help refine. Joining an existing project gave me a access a consistent wellspring of bugs to fix, pull requests to review and releases to do. CakePHP helped me develop routines that became part of daily rituals. Each day I try to do some of the following:
- Read new issues.
- Review new pull requests and leave feedback.
- Open a pull request to fix an open issue.
- Open a pull request to refactor existing features, or add a new one.
Occasionally projects will have ‘busy’ days, or I’ll have less time available. Earlier in my career ‘inbox zero’ was a goal of mine. While ‘inbox zero’ helped encourage me to stay active, it was not good for my longer term mental health. Around the birth of my second child, I gave up on the dream of ‘inbox zero’. Instead, my GitHub notifications approximate a queue. Each day I try to take a few items off the list, sometimes I get them all and other days I only get a handful done. Skipping a day to spend time with friends or family is healthy as those GitHub issues will still be there the next day, and I can catch up then.
Planning work out
I’m a big calendar & TODO list user and leverage them to schedule work, family activities and open source work. A big part of my daily routine is planning and scheduling when I’m going to do tasks. I try to only plan a few days in advance, and use my daily issue & pull request review session to plan for the upcoming days. For example, if an issue comes in and it looks a challenging, instead of doing it right away, I will plan to do it in a few days. Only planning a few days in advance helps me set reasonable goals for myself. It also provides time to think about the problem and potential solutions more. Each day I go through my task list and reprioritize what I want to get done for the next few days. If a day is looking too full, or I’m feeling tired, I reschedule tasks for the next day. There is no shame in bumping less important tasks for a few days.
Leveraging my idle time
I’ve found that using my ‘idle’ time effectively has changed how much I’m able to get done each day. Instead of doom-scrolling on social media, or watching endless youtube, I squeeze in some open source tasks. Reviewing issues or pull requests is something I can do incrementally in ‘idle’ time between other tasks. For example, on the days I commute, instead of idle content consumption, I try to use that time to review a pull request, or triage and reply to an issue. These small blocks of time are great for following up on review feedback, or merging pull requests that contributors have updated.
Mastering incremental progress
While I love to complete a big feature, or improve performance with profiling and refactoring, those milestones take a lot of work to complete. I’ve found it helpful to focus on making incremental progress on my medium and long-term plans by completing small tasks. Each small pull request moves me a little bit closer to the big reward. By focusing on the small steps I am able to better manage my anxiety of ‘not getting enough done’ and feel good about being a small step closer. This mindset of focusing on incremental progress requires the planning, task lists, and idle time usage I mentioned earlier.
Following my desire to learn
While I’ve been active on CakePHP for a long time, I’ve contributed to many other projects both in the PHP community and in other technologies. I’ve done work in Vala, coffeescript, dart , rust and python. Several of these projects are no longer active, and that’s ok. Open source doesn’t have to be about building the biggest, most successful projects. It can be smaller, simpler and more fleeting. If you’re writing code to scratch an itch, learn something new or solve a problem you’re facing why not share that solution? Perhaps someone else will find it useful, get some benefit out of it and maybe even contribute back. If you’re lucky you’re itch-scratching will end help someone else and end up in a linux distro.
These are some of the motivations, mindset and practices that have helped me stay active in pen source work for the past 13 years. Hopefully, they help you start or continue your journey.