There are many note taking programs but there are none which are ideal in my opinion. Many of them do a lot more things that I don’t need and don’t do all the things which I do need. A couple of them do come tantalisingly close to my ideal.
So what do I actually need from a note taking program. Let’s build it up from basics.
I like things to be simple!
What is the simplest note taking system?
A pencil and paper!
But a pencil and paper is not connected, you can’t search a large paper document easily. Organising and re-organising paper documents is difficult even if you have scissors and glue.
It would be more useful if it were electronic and on a computer.
So what is the simplest note taking system on a computer ?
Plain text files!
This is true, but having lots of plain text files scattered about on a hard disk can also be frustrating.
“I’m sure I had that information in a text file somewhere, if only I could remember what it was called and what folder it was in, dammit!”
There are problems with organising and re-organising a body of information which is contained in plain text files. What is needed is a way of structuring them and indexing their contents so they can be searched as a whole.
Keeping all your notes together is a good idea. Being able to add structure to them so that they can be grouped by their salient features is a good idea. Being able to explicitly express the salient features of a note (tags & metadata) is a good idea. Having a mechanism whereby one note can refer to another note (or indeed something outside the program) is a good idea. That is why note taking programs are a good idea.
With a note taking program you can keep all your notes in one place, link them together and define a logical structure, add meta-data to express the significant features of the data, link to other files or websites and search for things which you want to find.
Everything over and above this is either the icing on the cake or superfluous and unnecessary depending on your point of view.
Of course there are programs which provide a myriad of extra facilities and functions but if they fail to provide these basic facilities then they still fall short.
All the extra functions do is obfuscate the basic functionality. I am not saying that programs should not offer extended functionality but if the basic functionality ends up hidden in a sub-menu of a sub menu or in a context menu somewhere obscure then that is a bad thing.
The basic and most often used functions should be in obvious places, the extra functionality can be hidden in obscure places. The developers task is to decide which functions are the most often used and which ones get used once in a blue moon by just a few people.
If a program tries to be all things to all people then what usually happens is the user interface becomes complicated in one way or another.
A wiki might be thought of as a free form structure but the notes are connected by links and thus it is actually a directed graph. A mind map might be thought of as different from an outline but they are both trees, they are just displayed differently.
Directed graphs are more useful than trees.
Trees have the problem that as they get bigger it becomes more difficult to place nodes within them, that is, it becomes more difficult to find a single place which is correct for that node. There are usually several places where it could plausibly fit. That is why directed graphs are more useful.
For example, if a node could fit in the tree under the project it is part of or under the person whose responsibility it is or under the problem which the project is supposed to address then with a tree you have to select which is the most important feature of the node. This leads to difficulty in finding the node later when you have forgotten what your original decision was. It also leads to inconsistency of placement.
With a directed graph you can put the node in all the appropriate places simultaneously. If a node in a tree can have more than one parent then that tree is a directed graph. If you can ‘clone’ a node so that it appears more than once in a tree then that tree is really a directed graph.
It should be noted that a clone is not a copy, it is the same node which appears in more than one place.
Tagging nodes to indicate properties of the node is a necessary feature of a note taking system in my opinion. Well thought out tags are very useful.
Hierarchical tagging systems are in my opinion most useful, but few note taking programs have hierarchical tagging systems. Ideally the use of a tag should also imply the node having the parent tag as well (inheritance) i.e. if the node is tagged as belonging to this electronics project then it should also be tagged with the parent tag of ‘electronics’ and if electronics is the descendant of another tag then it should inherit that one too, recursively right back to the root of the tree.
One caveat with this is that when selecting the tags to apply to a node the list should be just a flat list of all the tags in alphabetical order, i.e. the tree should be flattened out.
Tagging systems can become a mess if the user doesn’t think about what the significant features of their data are. If the collection of tags just develops ad-hoc then they will probably be inconsistent with each other and this can lead to confusion.
A tagging system is even more useful if on can refine a search by selecting from a list of tags held by the results of the current search. Similar to the system used by the website ‘Del.icio.us’ before it was discontinued to make way for Pinboard’s subscription service. One alternative to this is if you can build a query using tags combined with AND, OR, NOT and brackets.
Meta-data is just another form of tagging, the meta-data expresses something about the node and as such it should be able to be searched and nodes should be able to be grouped on properties expressed in the meta-data.
One unhelpful characteristic of many programs is that their meta-data is common to all nodes. For example, let us suppose I have a notebase in which I have some notes on a selection of vacuum cleaners in order to choose which one to buy. One of the pieces of meta-data I might define for those nodes is ‘price’ and give each vacuum cleaner a number which represents it’s price. In a well designed note taking program that ‘price’ meta-data would only exist for those items I had assigned it to. In a badly designed note taking program all nodes in the notebase would now have a ‘price’ even where it is inappropriate. This would make the list of meta-data extremely long for every node because every node has an entry for every piece of meta-data defined for any node in the entire notebase.
Tags are all that is really necessary, other meta-data can be placed in the text of the node in a minimalist system.
Linking notes together makes them much more useful. The information in one node can refer to information in another node and the whole is greater than the sum of its parts.
The basic link is like a hypertext link and occurs in the text of a node, it refers to another node. Clicking on the link takes you to the node which the link points to. This basic link is all that is necessary in a note taking system. Just with this type of basic link you can build a wiki.
There are usually other types of link in a system, especially if it is structured as a tree or graph. The structure of the tree implies parent/child links and this is used to arrange the nodes on the screen.
In my opinion there also needs to be links where the information in one node needs to cite or refer to the information in another node. There needs to be a mechanism whereby a node can list other nodes which provide supporting or related information. These are sometimes called ‘see also’ or ‘related items’ or ‘reference’.
The function of a note taking system is to hold notes, i.e. information. This can be plain text but the necessity of including links to other nodes implies something more than just plain text. And a bit of formatting is quite nice too.
The inclusion of pictures and diagrams is really useful as well. There is an old saying that ‘A picture is worth a thousand words’, pictures can aid comprehension and understanding of the information. The inclusion of pictures in the text of a node although not strictly necessary is a good feature to have.
Tables are also quite useful.
So my ideal note taking program would not have a lot of extra features which I don’t use but would include the all the basic functionality described in this article.
What would such a program look like?
It would have a directed graph structure presented as either a tree (or many trees) or preferably as a network (map). Each node could appear many times in the network/tree as a clone of the same node.
If the structure is presented as a map then the map should centre on the node which has the focus and if the user moves to a new node then the map should be re-drawn with the new node as the centre of the map, this allows you to see the node of interest ‘centre stage’ whilst still being able to see it’s context.
If displayed as a tree then it would be able to ‘Hoist’ a node so that it becomes the centre of attention and would be able to expand/collapse branches of the directed graph/tree.
Each node would be associated with a pane of text which could contain pictures, diagrams, tables and links to other nodes. Links should be opened by a simple single click just like a web browser. In addition each node would be associated with a list of ‘related’ nodes and/or a list of files associated with that node each of which could be opened by clicking on the entry in the list. Ideally the text pane should be floating so that it can be placed on a second monitor.
There would be a hierarchical tagging system with inheritance which could be searched by clicking on the tag in the tag tree but in which the search could be refined by clicking on further tags narrowing down the selection each time, similar to the system used by the ‘Del.icio.us’ website.
The text of each node would be indexed so that full text searches can be carried out quickly. In addition complex searches would be possible by building search criteria in a ‘search table’ each row having columns defining what is being searched for, what is being searched (node text, tags, meta-data etc.), what the conditions are (greater than or equal to, less than, equal to, text contains, matches wildcard etc.) and what the relationship is to the other search criteria (AND, OR), maybe a tree structure would be more useful here instead of brackets. Furthermore these complex searches should be able to be saved for later re-use. This does not mean that a quick and simple search should not be available as well.
There are a few (very few) programs which come close but there isn’t yet a program which ticks all the boxes for me.
This is a bit more complicated than a simple pencil and paper but I think it would be a lot more useful.