Unpacking the bag. It’s almost like Steve has seen our code or something…
I re-learnt to drive recently after a long hiatus, and took lessons from a cheerful Welshman named Kev with a not-too-dented dual-control Fiat. When he wasn’t grabbing the wheel to keep us out of ditches and streams, Kev told me to talk out loud and describe how I was driving. For instance, I’d say “Looking in the right wing mirror and the rear-view mirror, now slowing down to exit and moving right – ” at which point Kev would slam on the brakes and patiently explain how multilane roundabouts work yet again (he even had diagrams and little plastic cars but I still don’t get it even years later). It was surprisingly hard to describe what I was doing whilst doing it; it felt a bit like trying to pat my head and rub my stomach at the same time, and I often found myself making speech errors or forgetting words. I suggest you try it to see what I mean.
Kev’s talking cure actually has a fancy name – it’s called metacognition, or thinking about thinking. There are studies that claim students learning geometry or other subjects do better when they talk with each other about what they are learning and where they have problems; I think the theory is that some non-verbal part of your brain is furiously trying to understand, say, the Pythagorean theorem, in a visual way, and metacognition gets the language section involved to look at the problem verbally. This might also explain the language confusion I had in Kev’s Punto, as the two brain parts fight over who gets to drive (so to speak). Whatever the theory, I can attest that it works – I’ve been using metacognition to good effect for eight years as a software developer, in the form of what my company call “flash reports”.
Anatomy of a Flash Report
A flash report claims it is a way of telling your the reader what you are doing and what problems you are having, but it is really a way of forcing yourself to reflect on what you did and the puzzles you are trying to solve – almost like a one-person retrospective. It can be telegraphic or very wordy (though I’ve never seen a useful one that couldn’t be printed on a single sheet of paper), and may be sent daily, weekly, or whenever you feel like it. The format I use is really simple (we inherited it from our former parent company, so it has a consulting flavour). Really, though, I don’t think the format matters much long as you wind up with a list of tasks done and problems encountered – you could use a physical diary or a virtual one, or Twitter, or a blog. (Yes, that “virtual diary” web site is classic 1995 – but one of my developers swears by the program. Go figure.)
Who should see your flash report? I can see arguments for keeping it completely private (since you are the main beneficiary), for sharing it with your manager (who can help you address problems including those you might not want colleagues to read), or for making it completely public (like a blog). At youDevise, we send flash reports up the management chain – so I get reports from most developers, and the Managing Director gets reports from most people in the company. We both find these very informative – it’s nice to look for patterns over time or in particular organisations – but again the chief value is in defining your own problems and describing solutions for yourself.
Metacognition – Good and Bad
While I was writing this entry, Steve Yegge posted his own metacognitive observations, remarking on the tendency of n00bs to write extremely wordy code comments. He disparages this and correctly points out that experts don’t need or want the description – they’ve internalised the concepts and engaging their language centre just gets in the way of comprehension.
I certainly agree with Steve about writing being obstructive when you’ve mastered something, but I have to think there’s something in that n00b tendency to write. For example, my flash reports from 2004 talk a lot about detailed Java coding issues, because we were all learning it at that time; my latest ones have little to say about this, but do discuss a lot of problems in our development process and organisation, which are the things I’m learning about and struggling with just now.
My personal experience is that flash reports have several benefits:
- They remind me of things that happened during the day, and things to do as a result. For instance, an item on yesterday’s flash report about a recruitment problem reminded me to publish a new job spec and to bug a colleague about getting candidates through his network of contacts.
- They help me organise my thoughts about thorny problems that I might not otherwise reflect on.
- They show me similarities and patterns. If I make silly mistakes early in the day, maybe I should try to sleep more or have more juice in the morning. If I keep putting off updates to the blog (doh!), maybe I should thin out my schedule or work from home to make some more time.
Are you using metacognitive tools or would you like to try out flash reports? Please comment below.
The first says not to store big binary files in your VCS. Boy do I agree – we have a number of big binary files and they cause headaches galore. One he doesn’t mention that we tripped over recently: keep checking in a multi-megabyte file and eventually the corresponding CVS file grows to the largest size your filesystem will support (in our case, two gigabytes), preventing all project activity. That one required some nasty repository hacking (the other choice was switching filesystems to one that handles larger files, but that would have meant developers playing Braid or something while they waited hours for us to figure out how to fix the repository). A question for him: how are you supposed to handle file types like Excel that can’t be converted to an all-text form, but that need to be versioned?
The other article describes a few very interesting software build patterns. The checkin gate seems particularly relevant to us, as developers have told me they’d like a sandbox where they can run tests before checkin, without hammering their own machines.
Michael Foord has a nice post about “Reasons to Love Python”. I find it synchronistic, as I’ve had conversations talking about several of these things the past week.