November is National Novel Writing Month (NaNoWriMo), though given its international reach, maybe it should be rebranded as InNoWriMo. The purpose of the project is to encourage people to write that novel you’ve been contemplating, but just haven’t had the time to do. It gives you a concrete goal of 50,000 words (which is about half the length of an ‘average’ novel, I believe), and a hard deadline of 11:59pm on November 30th.

I don’t have a novel in me. Well, I might one day, but it’s not what I’m desperate to write about just now. In my case, it’s more about getting back on the horse, and practising writing again, to improve my communication, and to see if I have a book (of any sort) in me. It’s always been a dream of mine to have written an O’Reilly animal book (or, in more recent years, a Pragmatic guide to something-or-other).

So, without any single topic in mind, I started writing. Actually, that’s not entirely true; I did do a little bit of planning on October 31st, figuring out how I was going to write the words (Markdown in Vim, with Jekyll to turn it into HTML, very much like this blog), and brainstorm what I was going to write about.

I attempted to use that list for inspiration on the first couple of days, or when I was feeling a bit stuck for a topic, but in the end, I largely wrote about what I felt like writing about that day. That was the easiest way to crank out the word count, after all. Quite a few of the topics cropped up in one way or another, though.

Feeling like a fraud

On the very first day, a bunch of friends at Tech Cube met up to talk about their NaNoWriMo plans over lunch. Everyone else there had ideas of a novel, some had already done their word count for the day. Everyone was doing it “properly”, writing a novel, and had an idea of their plot arc, how they were going to start. Most had previous experience. Me? I was just planning on rambling on about whatever I could think of. I wasn’t doing it ‘properly’, I didn’t have a plan. I was an imposter. Everyone else knew what they were doing and I was just winging it.

But I was inspired by this meeting. Perhaps I could write a novel. Perhaps fiction was something I really was capable of. I do read a lot of fiction. I’m aware of how various literary devices can be deployed. I think I have a certain ‘way’ with words; a definite style. And how hard can it be?

Failure

I failed at the first hurdle. On November 1st, having driven down from work to our holiday location in the Northumbrian coast, I settled down with Rory’s Story Cubes, intending to try my hand at fiction. I rolled them, and I started drawing a mind map of the results. And I brainstormed.

Mind map and brainstorm from rolling Rory's Story Cubes.

Mind map and brainstorm from rolling Rory's Story Cubes.

A whole pile of silly ideas came out of it, but I couldn’t commit to any one. I couldn’t get started. I couldn’t see a way to expand any of those ideas into the whole 1,700 words I needed to write that day. So I didn’t write anything at all. Failure. I knew I wasn’t cut out for this writing malarkey.

Red, Green, Refactor

Fortunately, I saw things in a more positive light on the Saturday. I had given myself the most difficult task of all to start off with: write a piece of fiction. I hadn’t written any fiction for nearly 20 years (except for project proposals). So let’s start again with something a bit simpler, one of the technical ideas from the list. So I had a quick brainstorm/mind map on the topic of learning through refactoring, having used that technique on a toy project to learn about Go.

Mind map on learning by refactoring.

Mind map on learning by refactoring.

And then I started writing. What I actually wrote that day had very little to do with learning through refactoring, and was instead a background on why one might want to learn a new programming language, and what it means to learn a new language. I’m quite pleased with the way I described monads that day:

monads which are, roughly speaking, a mechanism by which programmers confuse each other through analogy, simile and metaphors. They’re like bad poetry.

The next day, I continued to expand on the topic, talking about the various trade-offs between different programming paradigms, type systems vs test suites and idiomatic patterns. I still hadn’t started talking about learning through refactoring as I’d intended, but hey ho. That day’s commit message was “I’m bored of this topic today.” and then I moved onto something else.

I made another attempt at some fiction. One of the ideas that I’d sparked from the ‘failed’ brainstorm was to tell the story of the Gruffalo, after his encounter with the mouse, in a more Irvine Welsh kind of a way. I made a wee start on it, but didn’t really get anywhere that day. The concept kept popping up in Morning Pages, though, so we’ll revisit it later.

The next day was the last day I spent any effort on the learning through refactoring concept. I still haven’t actually talked about what I wanted to say, instead filling in some background on refactoring. It’s all jumbled up and needs some serious redrafting, but I’m sure there’s material in there for a blog post or two.

Reflection

Time to switch tracks. I was conscious that it was getting time for another blog post, to keep up with my weekly schedule, so I wrote a bit about perspective, that it’s often difficult to see the good in something when you’re constantly faced with the bugs. Annabel (my copy editor, as well as my wife!) and I agreed that it definitely still needed some work before being shared, so despite several redrafts, it’s still waiting. Instead, inspired by something I read in Pragmatic Thinking and Learning, I wrote on the inner game of pool, which did turn into a blog post.

Another day, another reflective piece, this time on walking, which eventually turned into the next week’s blog post, because I couldn’t find anything else suitable.

Kitchen Diaries

And then I got a bit stuck. I’d run out of ideas, of things I wanted to write about. So I cheated. I started a food diary in the style of Nigel Slater. Maybe it wasn’t entirely cheating – we were on holiday in a self catering place, I’d decided to be ‘chef’ for the week and I’d spent the week doing what I love best in the kitchen: glory cooking. Not the every day breaded-fish-and-waffles from the freezer. No, I was making fish pies, chilli con carne, a Sunday roast, cannelloni. I was spending hours each day in the kitchen preparing these meals, and I was mostly making them up as I went along (having cooked each before, I had rough recipes in my head, but I was experimenting and tweaking as I went).

That topic buoyed up my word count for a few days, but I bored of it pretty quickly, and haven’t finished off the week.

Something different

The next day, for some reason or other, I was staring at the man page for git-diff(1) and I came across the options for choosing a diff algorithm. It has never occurred to me to wonder how git diff works – despite it being one of my ‘favourite’ tools according to my shell history. So I did a bit of research and started writing it up over a couple of days. Yet another work in progress because I switched track again.

Onto another topic. This time, my take on Getting Stuff Done, combining bits from various different self-management techniques at different scales, blending them with a selection of tools and getting stuff done. This kept me going for a few days and set the tone for the rest of the month. I’d started focusing on longer pieces at last. I managed about 11,000 words on a single topic, and I got to a place where I felt it was ‘complete’ (well, the first draft anyway).

The Book?

By this point I was in London for the DevOps Days conference, followed by Puppet Camp. The latter inspired me to start writing down some thoughts on Puppet and configuration management. Over a couple of days, I got about 7,000 words into it and I’ve got an outline of where I want to go. If there’s ever a book going to come out of this exercise, that’s probably it. (In fact, turning that into a book proposal is my December writing goal.)

Feeling a bit guilty about having missed a week on the blog, while I was on the train home from London, I started drafting a post around my ‘micro’ git work flow and personal code review. It was nearly this week’s post, but at the last minute I decided a retrospective on NaNoWriMo would be more fun (for me, at least).

Then, finally, my first piece of fiction escaped; I finished writing up the Gruffalo’s Demise. That was fun, although I’m not sure Julia Donaldson would approve. Annabel has suggested that I should convince Axel Scheffler to illustrate it, and that it would be popular with parents…

The last short piece was an expansion of a private rant I’d dumped into my Evernote journal a few months back, called the Single Irresponsibility Principle. Expect that to be finished, redrafted, and turn up as a blog post in the coming weeks. It’s (mostly) tongue-in-cheek, and partly a suggestion that there’s no a one-size-fits-all solution we can apply at every scale.

My Favourite Interview Question

And then there was the last piece. I got a bit carried away. The last piece was my attempt to answer my favourite interview question:

When I type ‘www.bbc.co.uk’ into the location bar of my favourite browser, and press return, what happens?

I’m 11,000 words in so far. We’ve made the DNS lookup (having figured out what to look up in the first place), we’ve made the HTTP request, and we’re now diving down the stack through TCP to the IP layer, to see what happens there.

I love this topic. Mostly I love this topic because it makes me feel clever. It turns out I do know quite a bit about the IP stack works, at several different levels of scale. Of what I’ve written so far, all I had to look up was the actual packet formats, and to remind myself exactly how TCP uses sequence numbers and windows to maintain a reliable stream in the face of packet loss.

Of course, that almost certainly means it’s full of inaccuracies and nonsense because I haven’t done any real fact checking!

The End?

So that’s it. That’s what a month, and 50,000 words, looks like. I’m inordinately pleased with myself for having achieved my goal. I’ve really enjoyed the process of writing. I’ve got plenty of fodder for future blog posts. And who knows, maybe there’s a book hidden somewhere in one of the topics I’ve written?

What has this exercise taught me? I’m capable of writing 50,000 words. In fact, given the state of a couple of the pieces, I now know I’m capable of writing 50,000 words on a single topic. I did get stressed about my word count for a while – particularly when I was falling behind the curve. But I didn’t need to stress it, really. In the end, I finished a couple of days ahead of schedule. Some days I struggled to write 500 words (either due to time pressure, or just because I didn’t know what to say). Other days, I captured 5,000 stream-of-consciousness words.

Now that I know I can write the quantity needed to create a book, I suppose the next thing to figure out is whether I have the quality. That, as I say, is December’s goal!

I’ve deliberately not linked to any of the material I’ve written, because it’s all stream-of-consciousness rough draft material. More than once I took the mantra of ‘write drunk, revise sober’ quite literally. If you’re really keen, though, or you’d like to help me work on some of the pieces, they’re all up on GitHub at mathie/nanowrimo.

A Sneak Peek at
The Internet

If you enjoyed this article, you might be interested in my new project, A Sneak Peek at The Internet. What happens when you enter www.facebook.com into your web browser and hit return? A Sneak Peek at The Internet will take you on a deep dive through the network stack, from HTTP, SSL, TCP and IP, all the way down through the data link layer, back up to Facebook's data centres, and then on the return journey back to the browser.

There's more fun, excitement and peril than a Disneyland rollercoaster!