300 Hours of Code: Building Projects that Solve Problems

Why I built the Append Editor and some of what I learned from building it

Flying bird

I looked for years to find the perfect productivity tool to transfer information between my devices. I wanted an app to sync information, such as things to do, names of books to read, and links to visit, not files with such information, so programs like Dropbox, OneDrive, and Google Drive were insufficient. I wanted to sync my notes and to-do's between my iPhone and my Windows computer, so apps like Things did not work for me. I wanted to be able to edit old information, so instant messaging apps with a notes-to-self feature such as Signal were not enough for me. I also wanted my information to be end-to-end encrypted, so almost everything else was out of the question. I did not find any potentially good solutions until I found Standard Notes.

The Standard Notes apps help me transfer information between my devices, but I also wanted to use them in a way that prevented me from accidentally editing old notes. It seems that it is easy to me to mess up text on mobile devices. I think that is why email providers have an option to include “Sent from Mobile” in our mobile signatures. We can use the signature to tell the people receiving our emails that we were using mobile devices to write the emails so they can forgive us for our formatting and grammatical mistakes.

None of the Standard Notes editors had an option to simultaneously “Read only” and “Append to your note”, so I created my own: the Append Editor.

I studied how existing editors are built (they are open source), and I created the Append Editor with basic/plain text areas. I added support for markdown and KaTeX using the Remark and Rehype plug-ins and in-line formatting with CodeMirror so I could automatically continue lists if I wanted to. I also added a print button because none of the existing editors supported printing.

I found the Append Editor extremely helpful and useful enough for what I originally intended it to be, but I thought it would be even more useful if it had more of the features offered by sophisticated programs like Visual Studio Code and Microsoft Word. It is infeasible for me to build something as feature-packed as either given my level of expertise and limited resources, but I wanted a more powerful editing experience on desktop than what the plain text area and my implementation of CodeMirror could provide. So, I added the Rich Markdown Editor and the Monaco Editor. With live formatting provided by the Rich Markdown Editor, intelligent autocompletion and sophisticated search and replace provided by the Monaco editor, and support for personal default settings, the Append Editor has become the most powerful and versatile editor for Standard Notes.

When I started building the Append Editor, I barely knew how to code. I took one course on programming in Python in 2016, but had no real training or experience in HTML, CSS, and JavaScript, let alone more sophisticated web technologies such as Git, Node, npm, Yarn, React, Webpack, Babel, Prettier, Sass, and TypeScript. I also did not know about good practices such as semantic versioning and conventional commits. But with patience, diligence, and support from my colleagues, each of these became at least somewhat familiar to me.

After about 300 hours of work, I released version 1.1.0 of the Append Editor as free and open-source software. All the work that I put into it is available for you on GitHub to star, fork, inspect, and, most importantly of all, use to improve your life and your experience with Standard Notes. I hope you can use the editor with Standard Notes to improve your life as much as it has improved mine.

I did not think that I would spend about 300 hours to learn how to build and deploy the Append Editor, but I think it has been a very fruitful, exciting, and educational experience. I have learned that it is very important to respect the licenses of the software and libraries that we use to develop and that building products to help other people achieve their goals is a very enjoyable experience. Probably the biggest takeaway, however, is that we must think very hard about the problems that we are trying to solve with the software that we are trying to build.

If we want to create something from start to finish, then we must build something useful. We must choose to build a product that we can use to improve our lives or the lives of people important to us. Creating quality products require many steps. We have to imagine the product, determine alternatives, research possibilities and dependencies, design user interfaces and user experiences, build prototypes, solicit feedback from potential users, respond to feedback, find any issues, debug the issues, fix the issues, build more features, polish the code, document the code, document how to use the product, publish it, and then share it. If we and the people we know do not need the product or will not use it, then we will probably lose the drive to make it stable and continuously improve on it. In six months after we publish the first beta, the project will probably be dead.

Our products need to solve genuine problems, but they do not need to be humongous and we can build on the progress that other people have made. The first problem that the Append Editor solves is that it makes it easier for us to write daily gratitude journals before going to bed because we do not have to worry about accidentally editing previous days’ entries while we write today’s (I use one note/document per month). The second problem that the Append Editor solves is that it provides us with a powerful and versatile editing experience on all platforms, especially web and desktop. Neither of these problems would have been solvable without a robust syncing infrastructure, stable mobile, desktop, and web applications, and an API for the editor to interact with, so I am very happy with and deeply grateful for the progress that the Standard Notes development team has made on all of these fronts.

The Append Editor shows that 300 hours is enough time to learn many new things and build something useful. So, to my fellow software developers, my challenge to you is this: find 300 hours and build something that solves a problem that matters to you or someone important to you. Imagine that you are a student and the grade on your project depends entirely on how useful it is to you now and in nine months from now. I built the Append Editor with the help of colleagues and strangers on the Internet. What will you build?


The Append Editor is an unofficial editor for Standard Notes, a free, open-source, and end-to-end encrypted notes app. You can find the beta demo at beta.appendeditor.com and learn more at appendeditor.com.


Photo by Zdeněk Macháček


More from Theo's Notes