Carmine is in Jail
So. Carmine Baffa, the NLP trainer I used to work for, has been charged with raping teenage girls and ABC is posting ten-year-old quotes from me praising the guy in glowing terms.
A lady from the AJC contacted me and asked what I thought about him, and about the charges.
I told her that I was surprised.
I'm not surprised that he's involved with his clients. NLP practitioners are to real psychiatrists what acupuncturists are to real doctors. There's no professional licensing or regulation, and no ethical rules about not dating patients. In fact, they're not even patients. Just clients. The lady he was involved with when I met him had been a client.
But real psychiatrists have those rules for a reason.
When someone puts their emotions in your hands, there's a huge responsibility. What he did is just plain messed up, and despite my low opinion of the guy, I'm surprised he crossed that line. Especially with a 13 year old. If he really did that (and it's certainly possible), I'm glad he's in jail.
Anyway, I posted a long disclaimer above my 1998 review of Carmine's traning.
refactoring gtd for email
Here is a simplified version of David Allen's Getting Things Done Algorithm for email:
def actions(mailbox):
result = list()
for email in mailbox:
next = nextAction(email)
if next.estimate <= TWO_MINUTE:
do(next)
else:
result.append(next)
return result
for item in actions(MY_MAILBOX):
do(item)
This is python code and it does something that I have come to believe is bad coding style in python: it appends data to a list.
There's nothing particularly wrong with list.append(), but for many programming tasks, your code becomes a lot more useful if you use a generator:
def actions(mailbox):
for email in mailbox:
next = nextAction(email)
if next.estimate <= TWO_MINUTE:
do(next)
else:
yield next
for item in actions(MY_MAILBOX):
do(item)
This doesn't look like much of a change, but the two programs are completely different.
In the first version, all the TWO_MINUTE or less actions are performed up front, and then the larger actions are performed in a second sweep through the generated list.
In the second version, each item is handled exactly once, and done immediately after the next action is determined. In fact, the code can be further simplified to this:
for email in MY_MAILBOX:
next = nextAction(email)
do(next)
Or even simpler:
[do(nextAction(email) for email in MY_MAILBOX]
Python handles these last three versions a bit differently, but they all process the mailbox by selecting the next action and then doing it immediately.
I would assert that this is much better python than the original, but more importantly, I believe this algorithm is actually more productive in real life for answering real email.
There are several reasons for this:
First, no value is delivered to the customer until an email is actually answered. This is just basic Lean Thinking. In theory, passing through the mailbox up front and recording the next actions should maximize throughput: all the two-minute tasks are delivered immediately, and then you've already thought through the other tasks so you know which of those you can deliver quickly.
Unfortunately, there is a disconnect between the email box and the next action list. There are all sorts of reasons that this disconnect happens:
- a single issue is often broken up across multiple emails, mixed in with other emails about separate issues from the same customer
- a single email may require multiple independent actions before it can be answered
- in general, email clients do not allow you to arbitrarily re-arrange emails in a list or outline, so there is little tool support for grouping emails by issue - usually, the best you can do is sort by sender
- in general, email clients do not offer the ability to annotate email, so the action list has to be maintained in a separate system
The disconnect between the next action list and the email client creates a tremendous amount of waste. Everything I've tried requires a tremendous amount of cutting and pasting and cross referencing. I've personally spent quite a bit of time implementing my own email client to address these issues. Perhaps someday I or someone else will create a tool that successfully eliminates this disconnect, but in the meantime, it's a lot of wasted time and effort.
In my particular case, the wasted effort creates a cognitive burden that can dramatically slow down response time. Maybe I'm just an edge case. I have hundreds of clients with varying levels of technical knowledge, all attempting to do different things. When I try to track it all on a next actions list, I get overwhelmed and distracted, and by the time I'm halfway through, even more emails have come in, and hardly any have gone out. For me, in my business, applying the GTD algorithm to email slows things down even further, time and time again.
With the generator approach, things move much more quickly. The effort of tracking next actions is (mostly) eliminated, because I only have to define the next actions for the email directly in front of me.
With only one email to track, it's much easier to generate a complete step-by-step plan for how to answer the email (rather than just thinking through the first step). These plans can be reused to speed up future responses, used to train employees, or refined over time into automated solutions. These small plans can then be implemented and refined immediately.
But what happens if the oldest email in the stack requires hours of work? Won't that hold up the rest of the queue? Well, yeah. So the appropriate response is to answer the email, create an issue in a proper tracking system, along with a note to follow up later with the customer.
The above concept is similar in spirit to what the next action list is really supposed to be about. Allen's point is to get all your work into one tracking system for everything. I guess my point is that since email and actions don't have a one-to-one correspondence, it makes sense to get things out of email as quickly as possible and either deal with them immediately or move them into a real GTD-friendly tracker.
Endnote: You could get a similar effect in the original algorithm by increasing the two minute cutoff to a much higher value. It amounts to the same thing: answer as much email as possible immediately. Track everything else in one system outside of email.
a valuable lesson about li
So, I've been working on this outliner, and it's been great for organizing and indenting simple strings. But now I want to add arbitrary objects to the outline, and it's taken a lot of heavy thinking to get right.
Specifically, I want some of the items in the tree to represent trouble tickets or new, unread emails, and others to contain GTD-style next action items with a time estimate. (GTD doesn't really call for an estimate, but being able to put an estimate on an item is a good indicator that it really is a performable action and not just a stray thought - especially if the estimate is in minutes instead of hours, days, or months.) Also, I just want some of the nodes to allow basic HTML tags like em, strong, code, and anchor links.
The question is, how do you store this?
The plain-string version uses the XOXO outline format, which is basically just the subset of XHTML that deals with lists. XOXO is nice because it means your outline files are also valid XHTML fragments.
Unfortunately, everyone knows you can't put arbitrary XHTML nodes inside the li element. You can't put headers or paragraphs or images or preformatted text.
Except it turns out list elements can include just about anything.
I have no idea how I didn't know that.
Anyway, the upshot of this discovery is that my outline files can remain 100% pure XHTML, so what I'm building isn't just an outliner but also a web page authoring tool. Neat.
attention surplus disorder
I used to think that I might have attention deficit disorder, because I have trouble getting things done and doing what I set out to do. But now I think my problem is exactly the opposite. It's not that I have trouble focusing, but that I waste time focusing intently on the wrong things for hours on end.
Obvious examples include television and link sites. I hardly ever watch broadcast TV and I don't have cable, but I've been known to buy an entire season of a show and watch every episode back to back. I lost a solid week to Grand Theft Auto: Vice City and probably more than that to San Andreas. Even back in 1996, when I spent the summer writing a short novel, I had to forcibly stop myself from playing Starflight II because I knew if I didn't I would never finish my book.
When I started playing poker a few months ago, I wasn't worried about losing my shirt, but I did worry tremendously about getting obsessed and throwing my life of balance. That's exactly what happened.
But before that, I was obsessed with personal test cases, and that obsession seemed to work quite well. I'm trying my best to get back there.
But while I get obsessed with games and entertainment, I also get these little micro-obsessions with whatever happens to be in front of me. The most recent example happened about three minutes ago, when I linked to my old novel. I spent a good fifteen minutes just cleaning up old HTML, fixing URLs and writing a new introductory paragraph.
The problem with these little tangents is that they spawn tangents of their own, and pretty soon I've forward chained myself into oblivion.
The problem isn't forward chaining per se because jumping from one topic to the next can uncover some pretty interesting new ideas. The problem is stopping.
This is especially hard for me because I tend to keep myself rather isolated. When I had a girlfriend who got up at set hours and came home at set hours, there was sort of a natural structure to my day. But on my own, I tend to just work on whatever interests me, until I fall asleep or get interrupted. Often I run out of groceries and then after getting hooked on something for hours and not eating I wind up buying fast food just because it's fast.
One of the big changes I made along with the test cases last time around was to adopt a daily schedule with set times for everything. I even made a little GUI schedule program that showed a color-coded daily plan with a cursor bar showing the current time and what I should be doing.
It worked really well when I managed to stick to the schedule. I've got it up and running right now. It says I should be practicing piano, and that I should have already worked out, answered my email, and worked on my marketing system.
Uhhh.... Nope.
Ever since reading Neil Postman's Teaching as a Subversive Activity, I've been thinking about Marshall McLuhan's statement that the medium is the message. (I bought McLuhan's Understanding Media but it's pretty dense and it rambles more than I do so I didn't get very far yet.)
Postman's thesis is that the structure of school is designed to produce people who deal well with boredom, memorize and regurgitate answers, and basically do what they're told, and that by changing the format, teachers can create a system that actually encourages kids to think for themselves. He's not arguing against education, but the actual structure of school: one person in front of a room presenting canned information in a canned order, all regulated by standardized tests, and so on. Even the best teachers are constrained by that system (or medium) and have to work within it if they want to keep their jobs. (The book came out in 1971, but it's still a great read today.)
We use the word media today to mean video, audio, or the various news networks, but that's not how McLuhan, who popularized the term, defined it. McLuhan's idea of media includes movies and books and print, but also speech, numbers, roads, houses, money, clocks, telephones, clothing, bicycles, cars, airplanes, weapons, typewriters, and automation. He devoted a chapter to each one of these in Understanding Media. Is original concept of the word is much more like the idea of technology. The subtitle of that book is "The Extensions of Man."
I've been thinking a lot about media for productivity. I don't see any reason why there can't be a technology that makes it natural to be productive the way a television set makes it natural to be unproductive. And I've thought a lot about what that technology might look like.
For me, it really comes down to four areas:
- defining contexts (projects or roles)
- allocating time to those contexts
- maintaining a queue of concrete next actions for each context
- presenting the user with a steady stream of small, time constrained next actions
The first two items are straight out of Seven Habits, and number three, of course comes from Getting Things Done. But both of these systems still require a certain kind of person to implement them. You have to be motivated, disciplined, and vigilant - at least long enough for the habits to become ingrained.
The last item is my contribution. I want something external to my brain that will actively gather, sort, and refine my ideas, then feed them back to me one by one to implement, and that will also remind me of my goal whenever I get off track.
I suppose the particular wheel I'm reinventing is called a boss, but why be your own boss when you can build one?
I've said many times that I write to figure out what I'm thinking about. That's why this isn't a structured essay but a long ramble. I'd like to clean it up and refine these ideas, and turn this into an essay and make a real content site about productivity... But really my main goal right now is just to figure out what's missing.
See, I've already built the thing. I've got an outliner with tabs and the daily schedule. And I feel very organized. But that last piece is still missing.
Right now, what I have is no better than a traditional organizer or to-do list... Well, it's got a cute multi-tab interface so it's a little better... But it's still a thing that sits there passively and waits for me to act upon it.
What I want instead is a thing that actively influences me.
Hey! It's time to work on support. Here is your first unanswered ticket. Is it clear what they're asking for? Yes? Do you have a canned answer? No? Okay, do you know how to do it? Great! Let's solve their problem and record the procedure for next time.
Or later: Time's up for support. It's time to practice piano. I'll just fog your the screen up and keep you from doing anything else until you're done with practice. Can't do it right now? Okay, we'll override, but let's record what happened here as an incident report...
Basically, what I'm missing is the feedback loop. I actually wrote a little natural language "goal coach" chatbot that can help me break a goal down into subgoals. And I have a timer that can fog up the screen. And I have a scheduling system, and an outliner for defining queues of next actions. It's all clunky, alpha-quality code, but it works. I guess all I'm really missing is the master loop.