Scoping a Hobby Project - Personal Learnings

April 2022

This post is meant to be a small self-reflection for a personal note taking application called Noteberry.

Noteberry is a hobby project I have been working on during evenings or weekends for the past months (think I started 1.5 years ago in around December 2020). It should have been "a toolbox for working with block-based linked markdown notes" (GitHub Repo). It was meant to be an application to deal with my local markdown notes.

However, I escalated a little too much in scope and built first of all an editor with VIM support to support easy editing. Then I continued developing a parser for markdown with wikilinks ([[wikilink]]) and so on... I realised, that there were already applications that would implement exactly the thing that I was trying to develop (like LogSeq, Obsidian or Neuron. And I also realised that they have either spent a very long time developing it or have a whole team behind it.

Recreating any of these applications wasn't my first intention when starting the project. I just wanted to deal with my local markdown files. However, over the past couple of months scope was increasing unexpectedly because my goal for Noteberry was not clear.

Despite of this, I learned a lot of technical things:

  • Work with syntax parsing and build a parser with Remark to parse markdown files (published a small article about it here)
  • Develop an editor extension with CodeMirror 6 to create a text editor with VIM support
  • Setup a monorepo with Lerna to manage and publish all packages from one repository
  • Setup a working CI/CD Flow with GitHub Pages to test publish without any more effort
  • Learn how the new NodeJS Ecma Script Modules (ESM) work with TypeScript to write modern and fast code

Nonetheless, I realised that I have not produced something that I can actually use. I have rather deepened my knowledge about the above topics.

For my future projects I am taking this question with me:

What is the problem that I am trying to solve?

And then will not directly solve it but rather look for existing solutions:

What solutions already exist to solve it?

I was neither aware of Obsidian nor LogSeq when starting out but the thing that I was trying to built was just too large to solve it with a one person show in a timely manner, so:

Can I produce results in a timely manner?

With these questions I should have a good foundation for scoping future (hobby) projects.

Nonetheless, development and implementing stuff should also be fun and I will not only create projects to solve specific issues. I will also keep that in mind :)

--- ---