Blog Archive: Garbage In, Awesome Out
Note: The idea of developing text based interfaces that intelligently deal with idiosyncratic input & interpret structure from layout still appeals to me.
A lot of natural language interfaces focus on voice input, but I think its equally worth thinking about the ‘blank page’ and written input.
It’s also important to mention that I am not talking about ‘smart formatting’ - i.e. that irritating thing when word processors (the OSX notes app!) try & fail to create list styles automatically - you would always have the option to work in plain text, and toggle between structured & non structured views.
I should also mention that since writing this post I have cleaned up my task management / note taking habits a lot, now using Github Issues, Trello & Evernote.
Originally posted in May ‘12.
I’m slightly embarrassed to admit that I do a lot of things in my email client (mac os x default). I’m even writing the draft for this blog post there right now.
Email is always open, it lets me type and correct spelling, it saves automatically and even syncs to my phone.
Writing notes in mail is a valid use case, but the other thing I use it for is task management.
I have notes open where I have listed things that need to be done on our current projects. These span a team of around 6 people and three different products. I write notes about bugs, new features, thoughts, whatever, usually inserting or removing items in the rough order of priority.
In terms of ease of input it ranks high. There is no UI flow to step through, no buttons to click, no setup, no need to categorize my data via an outside logic, I can even paste in a screenshot if thats the easiest way to note something.
The problem is the point where it becomes necessary to communicate these notes, delegate tasks, and track completion/history of issues.
Currently I either paste tasks for the day into a Skype chat or email (fine for a small set of instructions) or enter them into a Google Docs spreadsheet where we also have fields for ‘raised by’, ‘assigned to’, ‘screen’,’problem’,’notes’,’priority’,’status’.
This works relatively well. I like the fact that we can mix numeric and text descriptions for priority (2.Urgentish), create our own statuses (‘reopened mofo’), and also enjoy the collaborative editing nature of google docs - our team is scattered around the world and typing on the same doc at the same time is about as close as we ever come to sharing an office.
Ultimately the form of a spreadsheet like this is the essence of task management - an ordered list of things to do that can be easily sorted/organized via a number of filters.
But there is still a point of friction where I transfer my notes into the sheet, and this system would fall apart at scale.
There are tools out there to handle this better (Pivotal tracker seems like #1) but every time I go to shift to these I stop.
In my mind the interface is going to get in the way - there will be team and projects to be set up, UX flows to navigate, buttons to click, categories to choose from, different states for read / edit, and inevitably one or two annoying things I can’t do with their system.
My mail notes are in essence a natural language interface.
Aside from speech raw text is about the simplest form of input.
Lets also consider space to be a form of natural language - not gestures so much in this case, but layout hierarchies (i.e. top item is most important relative to heading).
As computing becomes more sophisticated it will be more common for systems to accommodate the idiosyncrasy of the user - instead of entering information in the way that is most convenient for the computer we will enter it a way that is both more intuitive, and open to expressiveness.
Think of what Google has done with search - you can spell things wrong or type queries in garbled language, and it still gives you results that match ‘what you wanted’ - most people agree that this is awesome.
When entering a search there is a kind of syntax.. its not explicit, but we have an intuitive grasp of how we should use it (that may or may not be correct).
If I were to produce a task management tool I would approach data entry along similar lines.
You start with text based input that is basically a blank note page.
It recognizes spatial language - top item below a heading is most urgent, and it also interprets a range of shorthand syntax for describing priority via a folksonomy (i.e. -urgentish). It will pick up names. (i.e. ‘peter- do this’ for a line, or maybe a set of tasks under a heading ‘peter-‘).
Tasks are maybe separated by double line breaks and I can paste in any content such as screenshots that will become part of the body of the item.
Maybe if a block of text is in brackets after a single line break it becomes a note, maybe there is syntax for steps to reproduce such as a set of things separated by ->.
Like with the markdown language the goal would be to make these formatting syntaxes fairly close to a typical readable note.
Thats the starting point for your input - the next bit would be ‘magic’.
You press a button and your page of notes turns into an ordered data set that can be filtered and sorted in a manner similar to a Google docs sheet (but more so designed for this use case..). Maybe there is a bit of drag and drop / editing that can be done if things need to be cleaned up.
When tasks are marked as ‘done’ in the sheet they disappear from the notes view, but remain tracked in the data view and can be exposed via the status filter.
Maybe the ‘magic’ view can bring together notes from all your team members, and allow for collaborative real time editing. A basic syntax (a // like with code comments..) could prevent draft tasks from showing up in the shared view.
And of course you can toggle the view back to notes mode if you want to edit in messy format, add more tasks etc.
Part of the reason skilled computer users enjoy using a text based interface like the terminal so much is that there is no GUI to navigate - everything is possible from one place so long as you know the commands.
This is also the big barrier for new users of the command line - knowing commands/available tools in advance, and knowing the exact syntax.
In order to make a text based input for a task manager work in the way I have described I think it would be necessary to work to a more forgiving set of requirements for syntax - less is at stake than with managing a server / OS so precision isn’t such a big deal.
But hey.. theres an idea. A version of the terminal where you could type - $ hey computer.. make me a workspace with python + django, add a postgres DB, copy in the file on my desktop ‘dbdump’, all for my admin user, install all the crap from requirements.txt, boot it up when you are done, and make me a shortcut so i can do that easily next time. theres a good chap