ProjectsIndex.png

Spring Cleaning

project management self-hosting

Spring is a good time to do a bit of cleaning, I've decided to take this chance to rethink how I organize my projects.

What is my usual process:

  1. I get an idea. I read about new tech I want to check out, I see a youtube video or I wake up with sudden jolt of motivation to start coding,

  2. I start new project. The motivation is fresh, I get the thrill to check it out, to start **doing** - the fun part,

  3. The project requires specific setup, database, queue, logging, etc. Nothing fancy, but it takes time.

  4. I wrap up the setup and start the actual coding. I get half way there and then - life happens. I get a bit tired, hungry, distracted by obligations (or birds start singing the song of "oh no I've pulled out all nighter again"). I close the project with strong commitment to get back to it... some day.

And then I'm back at step one, with a new project that I will finish this time. For sure.

Why does this happen:

  • I don't treat my hobby projects as a serious enough commitment. I spend time on them, sometimes a lot of time. Doing this means I'm not able to do other things, important things. Despite this, as there is no client behind them, no external accountability, I let myself move on,

  • I don't have a system. Good, reliable system that would keep me in check, that would shame me if I do not deliver, and most importantly - would remind me I even started the project in the first place.  

That last part links nicely to "Atomic habits" - if I want to do something, I need to make it easy for myself to start doing it, or to return to it after a break. If I knew the status of my personal projects at a first glance, without having to find and reverse-engineer them first, it would make it easier for me to start working. I wouldn't need to think what I need to do. I could just pick up where I left.

What needs to change:

  • I need to understand my personal projects are important. They are the second part of Eisenhower matrix (important, but less urgent). If they weren't important I wouldn't have picked them up. Big part of my growth happens because of those projects,

  • Admit to myself that even though I may start motivated, the motivation will eventually run out. Having and following a good system will yield better results over long term, - It's better to start less side projects and get more of them done, than to start a lot and finish none,

Actions:

With this in mind, I've created a simple markdown file that I've put on my git repository (I use forgejo BTW). I call it "projects index". Its purpose is simple - have a single source of truth. List of all the things I host, all things I self host and list of all the things I've picked up and started working on. One repo to rule them all. Goal here is to make it obvious and easily available. Set it as start page in the browser, visit it regularly. Make browsing it a part of my daily routine.

The page consists of the following parts:  

  • Live projects - stuff that lives somewhere, either locally or externally that is important to me. This consists mostly of the things I self host. Instead of relying on my memory, I have a nice collection of all the services I will need to restore once I eventually break upgrade my server.

  • Templates - templates for projects available for quick start, scaffoldings, azure resource manager scripts, dockerfiles, snippets of docker-compose, etc. Things here are supposed to make it easier for me to get up and running,

  • Patterns - refreshers of design patterns, good practices, code snippets, investigation of libraries and technologies,

  • Tools - tools I've created. With objective to keep in stable and usable state, always linking to a readme,

  • Libraries - libraries I've created for private use,

  • Products - projects that I manage. Always with a readme and deployable master.  

With this segregation, it becomes easier for me to know, at first glance, what project lives where, what is it about, what tools does it use and in what state it is, before I even open a readme.

Improvements:

In the future I plan on:

  • adding badges (once I figure out how to add them on Forgejo),

  • introducing some kind of reminder if a project remains broken for too long,

And hopefully some other improvements, as this is a live document that's supposed to grow and evolve with time.

Sources: