Skip to content

Principles

The NoteWriter is a side project. Constraints are important when time is limited. Here are a few self-imposed constraints:

Minimal Dependencies

All dependencies have a cost. A dependency needs to be updated, and eventually replaced when obsolete.

The dependencies between components in a design should be in the direction of stability of the components. A package should only depend upon packages that are more stable than it is.

Stable Dependencies Principle (DSP)

The NoteWriter is expected to stay active for a long time, with new features sparingly added. Dependencies must be chosen wisely, finding the right balance between the gain (= the number of lines of code we don’t need to write) versus the cost (= the time required to update/contribute/deprecate/replace a dependency).

Minimal Integrations

As a codebase grows over time, the number of lines of code between the core logic and the various integrations (ex: support different source formats, export to different applications, support different storage solutions, etc) evolves differently. The core logic remains stable when the number of integrations continue to grow (= more line to write and maintain).

The NoteWriter is not a general tool. It focus on developers working with Git and hosting their repositories on a platform like GitHub (= most of developers). The goal is to have a codebase where the core logic represents the majority of the lines of code.

Minimal Features

The NoteWriter was not created to replace other tools but to experiment with a new approach to note-taking. The goal is not to have a long list of features but to implement the core ones in a new way.

Minimal Codebase

My goal is to keep the codebase small for a single person to maintain it over a very long time. Large codebase are slow to change and not all lines of code have the same value. A plugin system would be convenient but when storing notes for decades, any dependency will become a problem someday.