So, I was all set to start writing some unit tests to begin the refactoring I described below.

But then I needed to do a bit of procrastination, first. 🙂

That article is good advice for procrastinators. But what grabbed me was this :

You can accomplish a lot more in small increments — even fifteen minutes is enough time to do a little bit of quality work. Just get a decent start, and don’t worry so much about finishing. If you start often enough, the end will take care of itself.

That’s the ideal for the smart disorganized individual. Working in a lot of 15 minute (or shorter) fragments according to your inspiration, energy and available time.

But there’s a big problem : switching costs. Every time you drop something and pick it up later, you have to re-aquaint yourself with the context of what you were doing. You have to recharge the short-term memory. Of course, if you’d documented what you were up-to initially, returning would be easier. But in fifteen minute bursts, who has time to write documentation too?

Without that, a lot of your fifteen minutes, and a lot of your energy, get wasted on rediscovering what you were doing previously. Or even, if you’ve totally forgotten (as I sometimes have), redoing something that was already done! That makes the SDI way less effective than someone who can actually concentrate and stick at one task for a reasonable length of time.

Not surprisingly, I think personal wiki is the beginnings of a solution. What’s needed is somewhere to keep track of what you’re doing as simply as possible. And while you are doing it.

Notes should be written to accompany the process. Ideally, you can open a notebook, create a new page and just get down to it in less than a minute. Using the notebook as a scratch-pad for your ideas while you work.

Then, when you want to switch out of that context, You want to hit “save” and be finished with it. Not hit “save” and be having to think : “where shall I put this document in the file-system? Oh, God! Is it better to put it under ‘My Documents/teaching/advanced-programming/examples/’ or better to put it under ‘Development/Python/adPro/’ Wow! I’m such a loser because I can’t keep my files sorted”

Similarly, when you return to the project, to make the most of those 10 – 15 minutes, you want to recover that context quickly, not frantic scrabbling around hard-to-click little folder-icons in Windows Explorer, waiting for the turgid “Find files or folders”.

You usually remember enough about the project to remember its name. So you really just want to type that name into a convenient place on the screen and be there.

Alternatively, stick a link to each project, slap bang on the start-up page of the notebook in large letters. In a personal wiki this is trivial. You just hit edit; type the page-name link; save; go to the page. Now the context is reachable within one click of opening the wiki.

If you have several projects on the go, put a bullet list of links to them as the first thing on your front page. That puts them all easily within reach. When the project finishes or becomes less of a priority, you can move the link elsewhere : further down the page or onto another one.

On the other hand, maybe when you started thinking about “BirthdayInvites” yesterday, you forgot to link this from the front-page. It’s not really a big project, but today it would be nice to get there quickly. But what did you call it? In this situation, the RecentChanges button is invaluable. Hit “Recent” and yesterday’s (and the day before’s, and the … etc.) edits are within one-click.

In exceptional circumstances you forgot the name of the page; you last touched it months ago; and you don’t remember a route to it from the front-page. Now “search” comes into its own. If you can remember just a name or word that’s likely to be in the page, you can search for it. It’s a little longer, but it will still get you there faster than wandering cluelessly in Windows Explorer.

Why is wiki so good for this? Well, having built-in search and RecentChanges is handy. But hypertext, not hierarchy means that a wiki can have “small world” properties. Everywhere is only a few clicks from everywhere else. Compare this to what happens once your file-system gets crowded and in getting from the Ping project to the Pong project you might find yourself going up five or six levels to find a common root of the two, and then navigating (more or less blindly) down another branch of the file-system. Going down is less comfortable than going up. You have to scroll around to find the right icon to click in the absurdly cramped “file open” dialog. That’s assuming you recognise which route to take at all. Often you find yourself guessing wrong, going down the wrong sub-branch, and having to backtrack.

Bill Seitz agrees about the importance of smart-ascii as fundamental. He says the trick is finding a “style” of plaintext editing that can be rendered to a format that can then provide an outliner-ish view (collapsing hierarchies, etc.) (I’m pretty sure that can still just be HTML v4). And then Transclusion comes next… or an [Outlin Ing] editor that gives you more capability in restructuring the page, but still saves in that Smart Ascii format so you can still get work done in a plain browser window…

I think I like all of this. Today I had a series of small brain-quakes which might have reconfigured the geography of SdiDesk dramatically.

Here’s a list of random thoughts.

  • Yep, pages won’t change from being smart-ascii underneath.
  • But maybe internally I can represent them as a more tree-shaped structure.
  • A page can be a sequence of PageSections. Each of which can be either a paragraph, or a table or a bullet-list (sub-tree)
  • In fact, in the last refactoring, I experimented with the decorator pattern. Networks are actually decorators for ordinary pages. They implement the “Page” interface, have an inner component which is a MemoryResidentPage, but offer extra functionality. I’ve been thinking of doing the same for Tables.
  • Now I am wondering if I can define a standard interface called “PageSection” or something : make each object : Page, Network, Table, BulletList etc. implement it. And use it as the basic component of a tree-shaped document.
  • At the moment I have some rather confusingly (clunkily) named function which serialize Tables and Networks into Smart Ascii and parse them back again. (I was calling these serializations the Pretty Persist. And so there were functions like SpitAsPrettyPersist etc.)
  • But the cleaner, more logical thing would be that raw should be a public, string property of any PageSection. And setting it would automatically update the object, and getting it would also get the most up-to-date version.
  • Same could be true of Pages themselves, of course. I would then have a common interface convention for …

KLUUUUNNKKKK!!!!

This is where it gets awkward. I’d like a fully generic, nestable, recursive structure. That’s easy to do internally, but I’m quite a long way from that with my particular markup implementation. Can you do fully recursive in Smart Ascii? How? And how do you stop that becoming as awkward as XML?

I guess that’s what Bill means by “a “style” of plaintext … that can be rendered to a format that can then provide an outliner-ish view

Hmmm. That was fairly stream of consciousness. I hope it made sense. It helped me anyway. And comments on this, welcome as usual.

ps : Transclusion I already have, of course. (Or at least, including the body of one document in another.) If I could only solve how to embed a network in an ordinary HTML page, then I could make that general as well.

Bill Seitz : I think treating every page as an outline is a better direction to go

http://webseitz.fluxent.com/wiki/z2005-06-17-PhilJonesWikiOutlining

I’m wondering what this means in the SdiDesk context. That every page should really be a tree, rather like an HTML or XML document?

That the basic, underlying representation of pages is plain-text is a non-negotiable virtue for me. I don’t want to get involved in XML as the base representation.

On the other hand, at present SdiDesk treats pages with a bunch of heuristic substitutions (much as traditional wiki does). You can go a long way with this approach, but my rewriting bullet-lists is actually an admission that a more structured way of thinking works for this part of a page.

The same is true of tables too. These are parsed into a special Table class.

And if I allow table objects and list objects to be embedded sub-parts of pages, why shouldn’t we treat the page as a list of “nodes” which can be either table, bullet-list or paragraph?

Could also be used to generate “table of contents” as with wikipedia . And allow finer (purple) addressing.

Aaargh! Too many ideas to implement. Not enough time. Worth mulling over though. Comments welcome, as usual.

My friend Scribe asked about outliners on Tribe.net

I’m not an outliner person, I prefer freeform rhyzomes myself. But recently I find I’m starting to write a bit of an outliner as part of SdiDesk.

I didn’t plan to. I was simply trying to nail some of the bugs in the code which renders the nested bullet lists. However, the code was getting a bit long and convoluted, a so I realized I needed a more coherent way to parse and process it.

I pulled out the code that was doing this, which was simply part of the whole WikiToHtml class and have made a special NestedBulletList class which is essentially a recursive tree data-structure. This is used to represent bullet-lists, and has the code which parses them from the raw text, which can render them in HTML.

It could easily be adapted to allow sub-trees to be hidden or not and provide some other outliner-like features. I already record whether items are “checked” etc. I could record whether they’re open, or the estimated time, or the percent done, too. (I have some Perl which already does something like this from a couple of years ago.)

Not sure I want to go that way yet. What’s more likely, short term, is that I’ll make outlines a separate page-type, the way network diagrams and tables are. This would allow me, at some point in the future, to have a special edit modes for them, as with these other types, that could include a standard expanding / collapsing view.

After I’ve got this component and used it to clean up the parsing, I don’t think adding more features is actually next on my to-do list. (Exporting is a much higher priority.) But it’s on option which is open.

Any comments. Who’d like to see more outlining, or project management lite (a la ta-da, task-toy etc.) in SdiDesk?

I know I said I wouldn’t talk about this kind of thing.

But it does make me wonder. Whatever happened to Filofax? If they were smart they’d be all over this trend, hiring David Allen, putting ads on 43 Folders, buying Tasktoy etc.

Or even, ahem, sponsoring SdiDesk 🙂

As it is, there isn’t the slightest hint of recognition on their site.

While on the subject of paper-based organizers and incestuous cross-branding and consolidation in the life-hacking space, I wonder how long it will be before Lulu or Cafe Press offer print-on-demand 3” x 5” cards?

Good (but only temporarily available) discussion on Web 2.0 stuff (wikis, blogs, RSS feeds etc.) and the way they challange and change business.

The big surprise for me is this, quote from Philip Evans.

One of the simplest arguments I’ve used to get people out of a traditional mindset is to point out a statistic — the cost of transactions in the U.S. More than 50% of the non-government GDP in the U.S. is based on transaction costs. Now, what’s interesting is that the way most people think about economics is that execution costs are on the periphery. If you start from the premise that transaction costs are central to the productivity of any system, and if you then recognize that most of our time is spent negotiating, securing, monitoring, making sure people did what we expected them to do, dealing with the fact that motivations aren’t entirely aligned, and so on, you realize that we have to find a way of working together amid this asymmetry of information. About half of our time is spent doing those things.

This changes the way you think about productivity in organizations where innovation, adaptability and dealing with complexity are the key challenges. So much of reengineering, which is what major corporations have been about for the last 10 or 15 years, has been about linear efficiency — lining everything up in as tight a way as possible along a path. That’s wonderful if you know exactly what it is you want to do, and the aim of that task will never change. Increasingly, that’s not the relevant challenge. The challenge is adaptability, complexity, uncertainty and your capacity to mine the elements of your business, people and knowledge into different and new combinations. If that’s what you are trying to do, then your transaction costs become the biggest inhibitor to your capacity to do that.”

I’m not surprised that we need to get more flexible (disorganized). I’m surprised that the opportunity is so measurably large. Yet more reason to be searching for disorganized strategies.