9 min read

A Mental Framework for Side Projects

How I organize my thoughts and time for side projects.
A Mental Framework for Side Projects

I always have a few side projects simmering on the back burner. Whether it's a mod for a game I'm obsessed with, some tool for a community I'm part of, or simply an experimental idea, these projects keep my creativity and skills sharp and my curiosity satiated. I often find myself discussing these side ventures with colleagues and friends, who are curious about how I stay motivated and productive amidst the demands of daily life and work (spoiler: I don’t).

The questions they ask led me to realize there's a common thread of curiosity and struggle among many developers when it comes to handling side projects. How do you keep a project from feeling like just another job? How do you maintain momentum when your initial excitement fades? How do you organize and prioritize your time?

In this article, I’ll try to distill my thoughts and experiences into a practical mental framework for managing side projects. Keep in mind what works for me might not work for you, but it might!

Ideation

Me coming up with a new GPT-wrapper

One of the first steps in starting a side project is coming up with an idea and based on my conversations, this is the first major roadblock for most people, especially students or fresh grads who are interested in padding their portfolio.

So, how do you come up with ideas? Many developers derive their project ideas from problems they encounter in their daily lives, often within their hobbies and communities. For instance, you might want to create a Discord bot, a game character generator, or an improved wiki for a community you’re involved in. Try to detach from the mindset that you want to come up with an idea for the sake of coming up with an idea, let your mind wander, be conscious of your actions in your daily life and you will start to notice gaps in existing software or actions which could be completely replaced by something automated.

Even if you come up with an idea, you might look it up to see if it already exists and very often, if does, which makes it tempting to abandon the whole thing before you even get started. However, re-implementing an existing solution can be a valuable exercise, especially if your goal is to learn or avoid paying for a tool. Perhaps the open-source options available don’t meet your standards or lack specific functionality. Maybe they’re just not up to par in terms of quality. In such cases, building your own solution can be both fulfilling and educational.

Practical Tips:

  1. Keep an Idea Journal: Maintain a journal or a digital document where you jot down every idea that comes to mind. Review it periodically to find inspiration for your next project.
  2. Use a Problem-First Approach: Focus on the problems you encounter in your daily life or hobbies. Document these problems and brainstorm potential solutions.
  3. Participate in Communities: Engage in forums, social media groups, or local meetups related to your interests. Discussions in these communities can spark new ideas or highlight unaddressed needs. For example, you can be fairly certain that your niche hobby has a dedicated subreddit.
  4. Embrace Re-implementation: If a tool or solution already exists but you want to learn or avoid costs, go ahead and re-implement it. This can be a great learning experience.

All work and no play makes everyone a dull boy

Me forcing myself to work on side projects

The initial excitement of a new project is invigorating. You’re brainstorming, solving problems, and riding a wave of enthusiasm. But once the initial draft is complete, the work can start to feel like, well, work. Ugh. This is a common point where many side projects falter.

To prevent your project from feeling like a chore, it’s essential to keep the fun and curiosity alive. Break down your tasks into smaller, manageable pieces. Each small milestone you achieve can provide a sense of accomplishment similar to completing the entire project. This approach not only maintains your motivation but also gives you frequent opportunities to celebrate progress.

Practical Tips:

  1. Break Down Tasks: Divide your project into small, manageable tasks. Each small milestone achieved provides a sense of accomplishment. More on this later.
  2. Celebrate Progress: Regularly review and celebrate your progress. Even small wins can boost your morale and keep the project fun.
  3. Set Reward Systems: Establish small rewards for completing tasks or milestones. This could be a treat, a break, or even a fun activity you enjoy.
  4. Visual Progress: Use visual tools like progress bars or Kanban boards to visualize your progress. Seeing tasks move to the 'done' column can be highly motivating.

Time Management

Me planning my new calculator app

The more time management you incorporate into your life in general, the easier it gets - after a while, once it's second nature, everything in your life becomes easier to manage. Of course, there are levels to this; don’t think that you need a filled calendar just to get anything done, nor do you need to wake up at 4 am and start with a cold plunge just to feel productive.

You’ll hear a lot of gurus tell you that you work with the same time budget as Bill Gates, Jeff Bezos, or any other hyper-successful individual. While this might be technically true, you should never compare your productivity to these people, they are so disconnected from our level of living due to things being done for them it is truly an unfair comparison.

Side projects often compete with your primary job, personal life, and other commitments. Thus, effective time management is crucial. My favorite strategy is to exploit bursts of motivation. When inspiration strikes, dive in and make the most of it. These bursts can be sporadic, so take advantage of them to move your project forward significantly. You can do a lot of things to make these bursts more productive. I never thought how useful doc.new and github.new can be, but I’m pretty sure they are there in my top 5 visited domains.

Unlike your day job, side projects come with no strict deadlines or pressure, providing you with the freedom to choose your tools, make decisions, and set your own timeline. This freedom can be both liberating and challenging. It requires self-discipline to keep the momentum going without external accountability.

Practical Tips:

  1. Capture Burst Moments: When motivation strikes, dive into your project and make significant progress. Keep a flexible schedule to allow for these bursts.
  2. Set Time Blocks: Allocate specific time blocks during your week for your side projects. Treat these blocks as appointments with yourself.
  3. Use Pomodoro Technique: Work in focused intervals (e.g., 25 minutes of work followed by a 5-minute break) to maintain productivity without burnout.
  4. Utilize Micro-Moments: Make use of small time gaps in your day. Even 10-15 minutes can be productive for brainstorming, coding, or planning.

The Importance of Finishing (Or Not)

Me literally always

The question of whether it’s important to finish your side projects is a nuanced one. On the one hand, finishing can give you a profound sense of achievement and a concrete product to show for your efforts. On the other hand, not every side project needs to be finished. Sometimes, a proof of concept (POC) or a partially completed project can still provide valuable learning experiences and skills.

But the most important thing is to not be too hard on yourself if a project remains unfinished. Feeling bad about it can kill your motivation for future projects. Instead, set smaller milestones that can offer a sense of completion along the way, keeping your enthusiasm alive.

Practical Tips:

  1. Set Small Goals: Define clear, small milestones that can give you a sense of completion even if the entire project isn’t finished.
  2. Accept Partial Completion: Recognize that even an unfinished project can be valuable. Focus on the learning and experience gained rather than just the end result.
  3. Revisit Old Projects: Periodically review your old projects. Sometimes, taking a fresh look can reignite your interest and provide new insights.
  4. Define Success Criteria: Clearly define what success looks like for your project. It doesn’t always have to be a fully completed product; it could be a working prototype or a proof of concept.
  5. Create a Project Graveyard: Maintain a list of unfinished projects with notes on why they were abandoned. This can serve as a valuable reference for future projects and help you avoid similar pitfalls.
  6. Reflect on Learnings: Periodically review what you’ve learned from each project, finished or not. Document these lessons to guide future endeavors.

Tools of the Trade

Effective use of tools can significantly enhance your productivity and project management. Don’t get bogged down with looking for the best tools. If you find yourself stalling because of this; just stick with a notepad. I do most of my project management in markdown files and it’s been perfectly working for a decade. I don’t even use a local editor nowadays, I just keep my notes repository open in a tab via github.dev.

For projects that a longer-term, or maybe you have other contributors; it’s fair to upgrade to proper project management tools. Make sure they are easy to get started with and ideally free.

I don’t like wasting time learning tools in most cases because I usually tend to find something intuitive to me, and if not - hey, sounds like another side project idea!

As for other components of a project, such as programming languages; unless the purpose of the project is to learn about something new, I just stick with what I know. I have blueprints for Python environments, Docker images, CI/CD pipelines, and all that jazz that makes development super easy and frictionless.

Practical Tips:

  1. Use Project Management Tools: Tools like Trello, Asana, or Jira can help you keep track of tasks and milestones. Create boards or lists for different stages of your project.
  2. Take Detailed Notes: Always have a note-taking app handy (e.g., notes.md, Notion, or a simple notepad). Capture ideas, solutions, and thoughts as they come to you.
  3. Version Control: Use Git for version control. It helps you manage changes, collaborate, and revert to previous states if needed. github.new is your friend, always start with a repo!
  4. Use Templates: Create templates for common tasks or project setups. This can save time and ensure consistency across projects. Have a boilerplate in your favorite programming language that can enable you to go from nothing to business logic implementation in a minute.
  5. Integrate Tools: Use integrations between your tools to streamline your workflow. For example, connect your project management tool with your note-taking app and version control system.

The Emotional Stages of Projects

Source: www.infocusleadership.ca

Don Kelley and Daryl Conner developed their Emotional Cycle of Change model in the 1970s, which they outlined in the book "1979 Annual Handbook for Group Facilitators.".

I find this model fits perfectly for the emotional stages of projects.

  • Uninformed Optimism: The exciting initial phase where everything seems possible.
  • Informed Pessimism: Realization of the challenges and complexity sets in.
  • Crisis of Meaning (Valley of Despair): A critical phase where motivation wanes, and many abandon their projects.
  • Informed Optimism: Renewed hope as progress becomes visible and achievable.
  • Fulfillment: The final stage where completion brings satisfaction and a sense of accomplishment.

Most people abandon their projects during the second or third stages. Overcoming this requires a structured approach. Begin with a needs assessment and clearly define the benefits and value of your project. This clarity can serve as a motivator, reminding you why you started in the first place.

Detailed planning, including high-level design and specifications, can make development feel more like following a well-established path than navigating uncharted territory.

Practical tips:

  • Identify Triggers: Recognize the signs of each emotional stage. Being aware of these stages helps you prepare and respond appropriately.
  • Seek External Feedback: Share your progress with friends or colleagues. Positive feedback and constructive criticism can help you stay motivated.
  • Break Down Large Tasks: Divide complex tasks into smaller, manageable parts. This makes the project less overwhelming and provides more frequent wins.

Breaking It Down

Breakdancing GIFs - Get the best gif on GIFER
Me when you made it this far in the article

Breaking your project into smaller, attainable increments is a powerful strategy. Assess what you stand to lose by not completing each increment, and use this assessment as motivation. This approach helps you maintain a steady pace, keeps the project manageable, and makes the journey from idea to completion more enjoyable.

Practical Tips:

  1. Set Weekly Goals: At the start of each week, define specific goals you aim to achieve. This provides focus and a clear direction for your efforts.
  2. Use Sprints: Adopt a sprint methodology from agile development. Work in short, focused bursts, followed by a review and planning session.
  3. Maintain a Backlog: Keep a backlog of tasks and features you want to implement. Prioritize this list regularly to ensure you’re always working on the most important aspects.

Conclusion

Side projects are a fantastic way to learn, explore, and innovate. By applying a mental framework, you can increase your chances of getting value out of them. Remember to enjoy the process, celebrate small wins, and utilize the right tools to stay organized!