Tracking Life in Git

Oct 1, 2022

Tracking your life enables accurate, detailed, and satisfying reflection, both for you and your descendants. A common method is journaling, but the type of tracking I'm thinking of doesn't fit well with that. Here's my initial thought process.

Our life situation and mindset are mostly stable. They usually experience incremental changes, sometimes large jumps. How can we track that over time? Why should we care?

A regular journal is good for creating new entries over time, like a personal blog that no one sees. But I want to see when, why, and how things in my life change or get added, in a consolidated and organized place. And it has to be easy to update and read.

The evolution of our mindset and life situation is so much like a codebase (repository) receiving pull requests for changes everyday. We start as infants with a relatively empty initial commit. As we navigate life, we're shaped by our experiences, family, friends, and environment, and the content we consume (books, podcasts, videos, others' advice). Each time one of these factors changes the way we see the world, no matter how small, I think of this as a merge into the main branch of our life/brain repository.

It is up to us to approve, modify, or reject those proposed changes. Over time, how we filter and merge together all of these inputs is what makes us who we are.

With this in mind, tracking our lives in a similar way seems like an interesting idea. At a given time in life:

  1. Where did I live?
  2. What was I working on?
  3. What was I excited about?
  4. What were my main values and beliefs?
  5. Who were my friends?
  6. Who was I following closely online / whose ideas was I absorbing?
  7. What were my desires or dreams?
  8. What were my main challenges?
  9. How did I feel about how life was going overall?
  10. What was my daily routine and typical activities?

How do the answers to these questions change over time? Some of these answers are best formatted as logged entries over time (typical journal style or spreadsheet). But some of the answers should be edited and replaced over time. Instead of adding on notes in an append-only way, I want to just overwrite the current status of that answer and have that modification timestamped and saved. This is where git (version control) is a great fit, as it can do all of the above.

The version control history will show you what answers changed and when, along with any comments you left at the time of making that change to help provide context as to why that answer changed. You could rewind the clock to a previous version of your repository (life) and see what all of your answers were at that exact time — pretty cool.

Let's say you keep a list of the activities you typically do each week. In a traditional journal approach, you'd likely be recording what you're doing that day/week. When you look back in following years to see how your typical activities changed, you'd have to manually piece together that progression and figure out what changed when. With this new approach, you would just modify one existing list and git history would show you the incremental changes made over time.

So the new workflow would be opening a single file called activities.md and then looking through the history of that file, one timestamped commit at a time. And you can leave a description with each commit if you want to provide context for that change.

If you find this interesting, here's how you would try it out. This approach is accessible even if you're not a developer — I've just been using a simple developer analogy because that's how I've thought about it.

How to implement

The important part about this is making it easy (low friction) to update your repository.

  1. Sign up at https://github.com
  2. Create a new repository at https://github.com/new (make sure it's set to Private and check the box to initialize it with a README.md - this can serve as your current life summary file). Bookmark that repository's page and jump straight to it whenever you have a contribution to make.
  3. Think about the folders and files you want to include. Here's a sample repo structure:
    financial
    - net_worth_log.md
    - earnings.md
    personal
    - friends.md
    - challenges.md
    - values_beliefs.md
    - activities.md
    - routine.md
    work
    - career.md
    - side_projects.md
    README.md
  4. Learn the basics of Markdown (it should take 5 minutes - it's just a way to write text files with headlines, bullet point lists, and tables, etc)
  5. Create and edit Markdown files directly on GitHub. Click commit when you want to save an entry (creating or editing a file). For developers: you might like using their web-based VS Code by hitting the period key when on your repo's page, if your typical code workflow would be too tedious for quick entries.

The reality

This is going to be hard to keep up with — it'll take effort. The reason I'm writing this post is because I was scrolling through my repositories and stumbled on the one I made for this purpose nearly 4 years ago. I only had a few entries from 2018 and early 2019, but some of my answers surprised me. It showed how much we can change and how easy it is to forget what we were thinking at specific points in time — changes blur together over the years and we lose that accuracy when reflecting. It's a bummer I didn't keep this up during these last 4 highly transformative years. I caught it up to speed to September 2022 and will likely update it about once a month.

But if we can actually maintain this, it'll be one of the most fulfilling works of personal record-keeping we could do. I have this perspective about recording videos too. Though adding in git history to written records is an extra dimension we couldn't accomplish even with video.

I hope this gives you some good ideas on how to document your life in a unique way that strikes the balance between being easy and impactful. Let me know how it goes and if you have additional ways to expand or modify this — I'll consider it a PR to this post.