The more I keep looking for the perfect applications for personal productivity, I am increasingly concluding that the Operating System should be fulfilling that role. The author of The UNIX Philosophy1 states:
“Make each program do one thing well. By focusing on a single task, a program can eliminate much extraneous code that often results in excess overhead, unnecessary complexity, and lack of flexibility.”
The tar command comes to mind. It has a very limited scope, but performs its task well. The lack of features in tar resulted in a smaller, more maintainable code base. With fewer lines of code it is easier to debug.
The UNIX Philosophy continues on to state several other pillars of UNIX thought, including the principle of filtering data, rather than originating it:
Make every program a filter. The fundamental nature of all software programs is that they only modify data, not create it. Therefore, they should be written to perform as filters since they are filters.
In UNIX and Linux, this is accomplished frequently using the common, cheap, ubiquitous and lovely standard input, standard output (and occasionally standard error) files with redirection and pipes, as long as the programs being used operate as filters. On OS X, this is accomplished using AppleScript (for those programs which have exposed good AppleScript API interfaces). This functionality seems to be missing in Microsoft Windows (I hope I’m wrong… Am I?).
The point is that most Productivity Super-Apps throw in every conceivable feature. This feature-bloat weighs down the program, making it take too much disk storage space, too much memory and too many processor resources resulting in a sluggish application, even on modern equipment. After all that effort, the programs still do not fit the user’s desired feature-set. The only way for a user to acheive a 100% feature-requirement match is for the user to write his or her own productivity suite from scratch, or assemble the bits and pieces (a mail program from here, an address book from there, a notebook/journal from elsewhere) and fill in the missing parts will some glue code using the operating system’s available tools ( AppleScript and Automator or $STDIN / $STDOUT ).
When an operating system allows programs to be scripted, then I opt for smaller, less-capable, less-expensive programs with fewer bugs, and add in only the things I need to do repeated tasks more efficiently. More on this later.