Software engineers spend a lot of time investigating and figuring out how something should be done and writing final code that becomes part of your repository is just a small part of the whole process. Lots of the context like investigating, trying different solutions, going through docs etc. is not captured in the final code change. Over time, I have realized that taking good notes for each task and having a good organization of notes is critical for long-term productivity. This also helps in improving productivity with context switching.
There are tons of note apps in the market with lots of different features but none of them are specifically designed for software engineers. You can use any of the apps which suits your needs, but I feel that there are lots of small things that can be built to have a great note-taking experience.
My note-taking system:
I divide my notes into the following sections:
- rough notes: Any quick pasting of JSON, and links that I am investigating. Anything I might need today or in near term etc.
- todos: A simple todo list to remember things.
- interviews: One note for each candidate.
- meetings: One note for each meeting.
- blogs: Initial blog ideas. Lots of these are incomplete, but I still write the concepts whenever I get the motivation.
- For each repository I am working on:
- tasks: One note for each task with just a brain dump. This also helps me in context switching. I usually put links, curl for test APIs, and response objects.
- git tasks: One note for each branch that I am working on.
- wiki: anything long-term that I might need. For example quick docker commands, and startup scripts. Links to cheatsheets. Frequently used database queries etc.
I keep my notes in a git repo and sync it in a private Github repository. This allows me to keep the history of all my notes, and I never have to worry about losing my notes. I delete my old notes to keep my current notes state clean because I always know I can go back and get the deleted notes if I need them.
Every developer knows that context switching is the hardest thing, and you should try to minimize it, but sometimes it is unavoidable, and you should also learn to deal with it. For example, you are building a feature and a production issue came. You now have to quickly switch your context to debug the production issue. If you have a habit of taking good notes you can quickly come back to your previous mental state after fixing the production issue. A good note-taking system helps in being more productive. Just keep dumping your mind state in a note so that you can come back to the same state quickly once you get back to any task.
To make developers more productive we are building a notes app by taking inspiration from the above system. This is still in the early stage, and it provides you the capability to do all the above things.
One special feature that I like is the ability to create notes automatically when you create a new branch in git.
Rough notes support timestamp-based naming
Auto Git sync to Github/Gitlab etc.
todo list support
Simple and familiar Manaco editor which is used on VS code also.
Out-of-the-box template for developers for each git repo.
If you like this idea, please try https://upnotes.io and provide your feedback. I am also looking to talk to other developers out there. Please join our discord channel and say hi if you want to discuss this with me. You can also ping me on Twitter
Looking forward to learning your story and helping us to build a better notes app.