What I Learned About Programming From Writing a Fiction Novel
A couple of month ago I participated in National November Writing Month. A goal there is writing a 50 000 word novel in 30 days, or 1667 words a day for a whole month. First of all it's pretty cool by itself, but it also unexpectedly highlighted many things about my primary occupation as a programmer.
Here are top lessons I learned:
1. Kill Your Inner Perfectionist
It's better to get as much written in a time you have and then edit (refactor) it, rather than trying to get something perfect typed on your keyboard afraid that it's not up to your inner standard. This is true for books, but it's even more crucial for software, because the only software that is definitely not useful is the one that is not written at all.
Although general idea of my novel stayed more a less the same during the writing process, the storyline had to drastically change quite a few times. If I tried to plan out everything from the beginning, I would firstly never made it in time, and secondly I would most likely abandon whole thing somewhere in the middle because changes would have been to overwhelming to deal with.
Instead, I just responded to what was already done and how it was perceived by the reader (user). Of course transitions weren't that gracious sometimes but in the end, with some polishing after “release” it all worked out quite fine.
In software this approach is known as Agile Development and I really feel that it's a lot more universal than it's generally believed. The trick is to adapt this amazing way of thinking for your circumstances.
2. Don't use something just because it's cool
As front end developer I'm falling into this particular trap all the time because almost every day something new and a cool comes out. And it happened to me with the book too.
I love Markdown. In fact this very article is written with it. So I had an idea to have each chapter in an individual Markdown file that would be built by a custom grunt task into a book. Pretty cool, right?
May be, but not for the novel. I spent almost all day on the 1st of November building that tool instead of writing the book itself. When I finally realized what's happening I just opened up Apple Pages and started typing. Still missed the goal that day, but experience of using uncool but specialized software turned out to be absolutely marvelous.
3. Small progress makes for a big change
When you type first lines of a book (or a program) it's easy to get overwhelmed with the amount of work ahead. But if you take one step after the other it's actually really amazing how much you can do in really short amount of time. On average I probably spend around 3 hours writing each day in it gotten me a 50 000+ novel in just over a month.
What really helps here is a way to track your progress and keep the streak going. It's been a long time since GitHub introduced contributions calendar in profile view for a person, but I never really understood it's usefulness besides showing off.
But now I think it's more about motivating yourself. You don't have to do a lot, but just committing something every day is a good things. Many known people from the web developer community seems to agree.
4. Say “no” to extra features and heroic efforts
Trying to save sinking project by a heroic effort during last few days (weeks) is a bad idea, because the quality of what you write will suffer considerably. I had to write almost twice the quota of words during last few days to make it in time, and when it finally came to read whole book it was very noticeable where I've written more words per day than I should.
The reason I was late is actually quite common in a software world — I tried to add features when release date is already set. In this case I decided that it would be really nice to draw some illustrations to go along with the book. That is great idea for a “second edition”, but a bad one to try to fit in an already tight timeframe.
This is not all I learned during an amazing experience of actually writing a novel. I highly recommend trying out NaNoWriMo next year to everyone who ever wanted to write book, but never got around to it. And may be it will help your other efforts as it did for me.
To finish things off, here's a picture of me holding the only copy of my book, that I printed to have a physical reminder of all the things I experienced and learned in the process.