A new low! We're taken to task for thinking in our free time! I attempt an explanation, and add some random thoughts. Quelle surprise!

From Ye Olde Mailbox

Just Kidding Kevin. Actually, I was delighted to hear from Kevin Rutherford, who offers:

I'm very much enjoying your shot patterning project, and I applaud the idea of documenting a "real" project like that. I would like to make a couple of comments on the most recent article 'Shooting for an Acceptance Test', if I may: First, I'm a little concerned about your timekeeping. I agree that the hours actually worked on the project total up to "a couple of days, three at the most". But the relatively long gaps between sessions allow for a great deal of "background" thinking and problem-solving - more than you would have if you simply sat down for two days solid to work. So I feel that some of that "thinking time" should be counted in your project "totals". By just adding up the hours spent "on the job" I fear you'll appear to be going somewhat faster than you could achieve "for real". Second, if I were the customer I would probably ask at this stage for the Fitnesse page to display the sample file, with a conspicuous red blob at the calculated centre of gravity. That way we could all develop a sense of what the numbers mean, and whether they are the calculations we're interested in. Again, thanks for sharing this project with all of us.

I thought I’d address these two notions, because they gave me something to think about … especially the first one. So I’ll deal with them in reverse order:

Visible Display of the Center of Mass

In fact we’ve been talking about that being one of the earliest next stories. Of course the picture wouldn’t really prove anything, since all one could do with it is look at it and see if it looks about right. Still, we’ll do it. We need to figure out how to do output anyway, since it is the point of the project after all.

I’ve already tried a little sample program based on something I found on the web, just typed in ten or twenty lines more or less as found. We haven’t scheduled the story yet. Since I’m traveling next week, it’s not clear what we’ll do. Especially since I guess we’re not allowed to think in our free time … <grin/>

But Seriously, Folks

Kevin raises an issue that deserves some, well, thought. Certainly we do think while not at our keyboards, or even when we’re not together. And I have to shamefacedly confess that sometimes after we end our Session and go to lunch, we even talk about the project there. When we’re not talking about how awful the fries are at Buffalo Wild Wings, and whether the buffalo logos carved into the furniture are done by numerical control machines, or just guys with pantographs and routers.

Sorry. I was trying to be serious. I think about programming a lot, when I’m not putting up the Christmas Tree or reading Neal Stephenson or Dick Francis, or chatting with my wife at Zukey Lake Tavern, or clearing my mind to do T’ai Chi, or trying to type a million-digit hex number into some software package’s license box, or any of the other things that I do. And I imagine that I think about this product a lot … especially when writing these little articles.

Does that make the work go better? I certainly hope so. Should it count as work time? Kevin suggests that it should … but I don’t even know how to count it. A few minutes ago I was thinking about putting a dot on the picture, and how that would build confidence, while not really telling us whether the program was working. I’m thinking about it again now. Should I count that? Should I bill someone for it? Honestly I don’t know.

But while I was thinking about Kevin’s comment, since receiving it this morning, it gave me an odd idea. Let me work around to it.

Whatever day it was, when Chet and I were trying to get Fitnesse working, we spent our entire two-hour session smashing our heads against the tables in Borders. Chet had visibly become ticked off and had basically checked out of thinking about the problem. (He had already spent time the day before, to no avail.) I had been working on something else, and started pairing with him on it. That gave him a little energy for a while, then he became ticked off again. I wasn’t quite ready to give up. We tried something that gave us a different result from the completely meaningless message to the effect that it didn’t work. We fiddled a bit and slightly different things happened.

Then, for no reason I could identify then or now, I selected a string of characters in the !path statement, and said “Delete these.” Chet blinked, said “Yes”. I deleted them, saved, and the test ran. We finally had a hookup that actually worked. Bob and Micah weren’t there for us to beat on, and anyway they know Judo or Jiu-jitsu or something, so that would have been a bad idea. Despite our victory, we were tired and beaten down. Had we continued beyond two hours, I doubt that much more work would have gotten done.

The next day, we chatted, and commented that it was really good that we were just working on a hookup test rather than a real one, because adding any complexity to the situation would have just made it so much worse that we might still not have anything going. We took a little lesson from what had happened, and moved on. And that day, we got an actual test running, a couple of fixtures implemented, and consolidated our knowledge into some code we could use to build on.

Even that day, though, at the end of our two hours, we were tired. We could have done more work, had we wanted to work into our lunch hour, but we would not have proceeded as fast, nor with as much enthusiasm as we had. We had reached a natural pausing point, where something was working, we had cleaned the code a bit, and we were “done”.

Now in the afternoons, after we split up and return to our homes, both Chet and I often do something while we wait for the ladies to come home. For example, yesterday, he checked all the stuff into his subversion server, and I downloaded it. And downloaded it. And downloaded it. Finally Eclipse and Subeclipse agreed to let me work with the program again. We talked on the phone two or three times while I tried to figure out what had to be done to make such a simple thing work.

Now it would probably not occur to me to count that two hours of activity as work on the project … though had we been in the office, it would have certainly consumed hours on the job. And, like the morning wrestling with Fitnesse, my energy was gone and no more useful work got done.

In Zen and the Art of Motorcycle Maintenance, Pirsig refers to things like that as “gumption traps”, events that just suck all the energy out of you. He points out that when that happens, you start making mistakes, if you don’t just walk away.

Your Mileage May Vary, But ...

I wonder what would happen if Chet and I were putting in four or eight hours a day on this thing. Suppose we’re averaging two now, and we did eight. Would we go four times faster in elapsed time to a given feature?

Frankly, I don’t think so. We’d surely go faster, but in those longer days, we’d likely wind up wasting more time. Would we get less thinking in, though, as Kevin suggests?

In my case, and probably Chet’s, I don’t think so. We’re pretty good at noticing that we’re tired and <deleted> off, and we’re usually smart enough to take a break, decompress, and talk about what’s going on.

So Kevin raises an interesting question in my mind. Those of us with actual jobs, and many others, expect or are expected to work for eight hours a day, or even more. We probably all agree that too much overtime makes us unproductive. And clearly there is some number, less than that, which would also be unproductive. Certainly not working at all, we wouldn’t get much done.

So what’s the number of hours a day, on the average, that would cause Chet and Ron to produce shotgun story points at the fastest possible rate? And should we count the time we spend chatting, eating, surfing, and just fiddling with the computer as part of that work time?

I’m really not sure. My guess is that with three or four hours a day, instead of our nominal two, we’d get more done. But we’d do less of the other things that help, like thinking and trying little things for fun. What I do know is that the way we do things now, we generally have energy to put into our little projects, and we get a lot done in what seems like an incredibly small amount of time.

Is that due to the fact that one of us is really smart? Is it due to the fact that we don’t have to work with a huge legacy system? Is it due to the XP and similar practices we follow? Probably yes.

But Kevin’s question rephrased is: “Does all that time we spend thinking give us a speed edge when we sit down to code?”

I think maybe it does. If I’m right … what does that mean for all you folks out there?