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 be stable, adding new features sparingly. 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.