The task now, as it has been and most likely will continue to be, is to design something to facilitate me in keeping a todo list and actually using it. There are a number of things that a todo list that I'd actually use must do; here they are in no particular order:
- be easy to use
- be portable
- take little time to use
- actually help me keep track of things
Any list that has items can satisfy point 4; no todo list I've ever kept has failed in this, and that is why creating one that satisfies all points is so desireable. I've tried the pen and paper thing, but it invariably fails on point 2. Have I not been using paper small enough, notebooks light enough? The spatial constraint is too much, I think.. there's no way I can carry around a small notebook with me everywhere and actually use it.
But the Internet is everywhere you go; especially when you have a cellular data plan. A good 50% of the endpoints in my travels have a computer that I can use that has continual connection to the internet, and if I had a decent cell phone capable of rudimentary browsing, that would basically hit 100%. I've proven to myself that I'm capable of carrying 3 objects everywhere: keys, wallet, cellphone; so if my todo list can incorperate into one of these, that'd be a winner.
The paper/pen thing relies not only on a pen but on space, which for some of my lists means that anything i could fit in my wallet is out. Easy for a shopping list, but hard for a list of tasks that sometimes stretches weeks in advance. So it seems like I'm relegated to the cell phone. But a todo list is not just about reading output, although that is extremely important, its about adding input as well. Writing a cell phone app for a todo list (or getting a cell phone PDA) would most likely harm the precondition that I carry a cell phone with me everywhere: if the cell phone grows in size, I start to leave it behind.
So it needs some other interface for input, as the cellphone would only on rare occasions pass. Enter, of course, the Internet. I've been stabbing at the problem for about a week now, but I had one precondition that now seems somewhat idiotic: the process of creating the todo list had to happen fairly fast. I've discovered that this is idiotic because solving the problem well and solving it quickly are in almost all cases mutually exclusive. It doesn't hurt to spend a long time making something that I'd like to use, and as is the case with the backend for this website, it'd probably help a great deal later. (I still continually wish to redesign this, as I'm constantly unhappy with the way things work. It has survived this long in part because I spent the time to do things carefully visually, but the backend still suffers greatly.)
The fact that I couldn't do it quickly, though, means that there is another problem independent of creating the todo list: In all my years (which I guess isn't very many) tinkering with web scripting, I have not developed any tools that make the process any easier. I've gotten considerably quicker at the creation part, but I have not made anything that changes the process to decrease the number of steps.
Sometimes I write code and go back and think, "Wow, that was exceptional." This is rare, but the database abstraction layer I wrote over Python's PostgreSQL module is probably in that group. I've seldom had to think of specifics on connecting to my database or querying its simple tables, and yet I have considerably expressive tools to query for results (useful in particular was overloading [n] and [n:m]). True to occams razor, this layer is about 80 or 90 lines of code but has probably saved me writing over 500 duplicate lines of code.
So the real question I have to ask myself is which problem should I solve? Should I go and try to make a backend, or should I just make a quick todo list and then confabulate everything later when I solve the first problem. I don't want to turn this into a Knuth thing. (Knuth spent 10 years creating TeX when he decided to write a book because he found no suitable typesetting software.) I don't mind writing the todo list twice, but writing a todo list I'm not happy with will fail to satisfy the 4 preconditions that solution to writing a todo list must satisfy. Such is the life.
Paul Graham says that hackers are not afraid to rewrite code. The number of times I've redone my website, I can't say that I'm afraid to do it again, but I do want to eventually reach whatever goal it is that I am aiming for. Now I'm kind of faced with a problem (the todo list) where if I do not get it exactly right, then it won't be any good. So in the end I have nothing, and am not even on my way towards something.