Software developers have to keep track of a lot of disparate things. When debugging a knotty problem, for example, the solution process might involve references to issues, source control branches, downloaded test data, snippets from Slack or email conversations, stackoverflow questions, API documentation, etc. If you can pull all those items together into a single, searchable place, you will be much more effective. For a long time I didn't have a system like that in place, and then one day, I did. This is how I got there.
I read David Allen's book Getting Things Done in 2007 or so, and it made a big impression on me. One of his big tenets is that you have an "inbox" of things you have to deal with, and periodically and in various ways you work your way through the inbox, either taking care of things right away (make a phone call, send an email, pay a bill, etc) schedule something for later, delete it (i.e. throw it in the trash), file it as reference material, that sort of thing.
I followed his methodology for a while, and it works well if you can stick to it, but one thing that hung me up at the time was the "file for reference" bit. By this time, most information was digital, not on paper, and filing it meant... what, exactly? Perhaps wisely, David Allen didn't give detailed advice on implementing his system using tools that would quickly make the book outdated, I could, of course, just save items as files to the hard drive, but how to organize them? How to find them later? How to reference one item from another? What if I wasn't on that particular computer when I needed to refer to them? I saw coworkers use various digital Post-It note programs at the time, but these seemed to suffer from some of the same problems.
One attempt was to create a personal Wiki. This was a decent solution for notes and information that I typed myself, or could paste from another source, but was far from perfect. There was still the wiki markup to deal with, and while it wasn't that complicated, it was still a bit of cognitive friction to just getting my thoughts down as rapidly as possible. If you wanted to add an image, it was a cumbersome process of uploading it, then referring to it.
Then there were paper notebooks. For years I had used composition books as "field notebooks" at work, logging thoughts on software designs, bug writeups, sketching architectural diagrams, etc. This worked reasonably well, except I like things to be quickly searchable. Oh, and writing longhand for me is slower than typing and the results are not particularly legible. (You may have heard about studies that found that hand-writing notes leads to better retention of the information. This may very well be true, but usually I'm not writing to retain or memorize.)
This is where things stood a few years later when a coworker gave her notice and bequeathed to me a collection of notes from some projects I was inheriting. She had exported the notes from Evernote, and the easiest way to access them was to create an Evernote account and import them. I had heard of Evernote and its brethren (OneNote, etc) but had not taken the plunge on a modern note-taking app. I created a free account, and was off to the races. I quickly started using it to take notes from work meetings and calls. I found it was very good for "software development field notes", particularly when troubleshooting problems. You could paste in exception text and log messages, and document the things you tried and what the results were. Then I started adding notes for feature ideas, or detailing a difficult setup procedure.
I soon started using Evernote for non-work things as well. It's great for managing small- to medium-sized projects like "Buy a car" or "House electrical work". Pretty soon it reached the point where it just contained the details of my life. Evernote's icon is an elephant, and that's apt - it holds all the details that my own memory certainly doesn't hold very well anymore (if it ever did).
What Evernote Gets Right
When you create a new note, you can just start typing. You don't need to worry about formatting, unless you want to. If the thoughts are pouring out of your brain, or you're taking meeting notes in real time, don't worry about typos, formatting, and capitalization - go back and fix them later. Or don't bother - it's your personal system, so do what works for you. Abbreviate long words you're using a lot, then go back and replace them
later (or keep the abbreviations). For example, if you're writing a lot about
microservices, just write "ms".
The note editor has the usual "light formatting" options such as bold, italics, bulleted and numbered lists, links, images, blockquotes, etc.
I wish there was a Markdown input mode for technical content. There is a code block formatting option, which on the OSX version you can trigger with the Markdown-like triple-backslash
(For some reason this is not available on the Windows version - you have to choose Style > Code Block from the right-click or Format menu, or use the keyboard shortcut Ctrl-Shift-L.)
It's very easy to paste an image into a note from the clipboard, which is especially useful for screenshots. It will also perform optical character recognition (OCR) on images, scans, and PDFs, which is mostly used when searching.
Your data is continually saved in the cloud, and synched to all of your devices automatically. It's available on all of your mobile devices, of course, which is great when you want to jot down a quick gift idea when you're out and about, for example.
Organizing Your Notes
You can organize notes however you like. You can set up separate notebooks for different realms (work, home, volunteering, etc) or use tags, or both. I mostly use tags, as things often spill across different contexts. Tagging works as you expect - there is a many-to-many relationship between tags and notes. I don't go too crazy adding tags, as the full-text search functionality works pretty well. Most notes tend to have one or two tags. Doing a full-text search combined with filtering on a tag is particularly effective.
I also keep the number of notebooks to a minimum - I have one primary notebook into which I put both current work and non-work notes. I tag anything work-related as "work", along with more project-specific tags. On those occasions when I change jobs, I archive the notes from the old job by moving then to their own notebook.
Another really useful tactic is to make your own wiki-style links between related notes. This is great for adding "see also" links, and for breaking up notes that are getting too long into several.
Checking The Box and Searching
You can also include checkboxes in your notes, which gives you the ability to make to-do lists and the like:
Naturally, there's a keyboard shortcut for that - Ctrl-Shift-C on Windows and Cmd-Shift-T on Mac. You can also just type a pair of square brackets (like how you would show a checkbox in ASCII) and it will automatically turn it into a checkbox for you.
Particularly when you're working on a greenfield project, you tend to have lots of to-do items that you need to come back to. Sometimes TODO comments in the code or the readme are the best way to do this, but sometimes it's easier to dump them out into the note you're in the middle of, especially if they're not related to code changes.
You can set up customized searches within Evernote. A couple I find particularly useful are:
- Work To Do - all notes tagged work that have at least one unchecked checkbox
- Non-Work To Do - all notes NOT tagged work that have at least one unchecked checkbox
- Not Work - mostly used to find recent notes that I've forgotten to tag as "work"
I spend a good part of my workday in Evernote, so I put a little extra effort in making sure my future self can find things quickly. For example, if I take notes while troubleshooting a bug, I put the ticket number in the note title. Or, if there is a particular thing that is referred to in different ways, like by abbreviation or fully spelled-out, I make sure both are included in the note so searching on either form will locate it.
Outside of Work
I end up taking notes for a lot of non-work stuff, too, such as medical history, food diaries, car and house repairs, project ideas, book summaries, etc. It's especially good to keep track of gift ideas for friends and family (or yourself!), and lists of books to read or movie recommendations.
Clipping It
One nice feature of Evernote is its Web Clipper browser plugin, which allows you to save a snapshot of a web page as a note. This helps to solve the "too many browser tabs open" problem. When you find a page that has a lot of good reference information in it (in the GTD sense), you can clip it. It does a very good job of removing the menus and other fluff and keeping just the body of the page. Since it saves a copy of the content, you're protected against the page going away in the future or moving to a different location.