Writing the Right Story

I’m going to be blunt: not every story should have a happy ending. Yeah, we claim that we like happy endings and seeing the hero save the and get the girl in the end, but I’m calling bullshit. It works for Disney movies since mom and dad can bring the kids to the movies for an hour and a half of fun, popcorn, and soda, but that’s about it.

Think back to every movie where the nerd steals the head cheerleader from the captain of the football team. You know you’ve seen this movie a million times, but how much of it has stuck with you? The only scene I could describe from Say Anything is the boombox scene, and even that’s only because it’s become a trope (also, as an adult it’s kind of creepy). We know in our hearts that in the real world, head cheerleaders date the football star and the sensitive nerd/band geek/artist/writer gets shot down.

Think about the kinds of stories that stick with you. The “relationship” move that’s stuck with me the most is Chasing Amy, a story where the guy ruins everything beyond repair and drives away the woman he loves. It’s not a happy ending, but the characters feel real and consistent. Yeah, Banky’s rants about lesbians not existing are funny, but when Silent Bob tells Holden about Amy it speaks to something in anybody who’s been a situation where they drove away somebody they love.

It’s not just romantic movies where this applies. Most people would say Lord of the Rings has a happy ending, but does it? Frodo and Sam destroy the ring and defeat Sauron, but Frodo is left a broken shell of his former self. A Song of Ice and Fire (Game of Thrones if you prefer the show) is filled with our favorite characters being murdered, mutilated, and tortured, but fans chomp at the bit for more books (or episodes). Breaking Bad’s happy ending involved Walt murdering a dozen or so people, and it’s only happy in the sense that they’re worse than he was (admittedly, being worse than a murdering meth kingpin who poisons children is a high bar).

This doesn’t mean all stories need sad endings. In Princess Bride (one of the best movies of all time), the happy ending is exactly what the movie needed. When Wesley bullshits his way through the encounter with Humperdink at the end, it’s perfect since he’s been bullshitting as the Dread Pirate Roberts for years and during two more of the film’s most memorable moments (“I’m not left-handed either” and “[Both cups] were both poisoned”). It still might have been a fun movie if Wesley stormed the castle as a plain old farm boy, defeating guards through trickery and luck, but it’d be just another cheesy movie. The happy ending works because it’s consistent with the film’s tone, not because the writers just needed a happy ending.

Henry Ford supposedly said that, “If [he] had asked people what they wanted, they would have said faster horses.” Tell the story you want to tell, but give it the ending and the character arcs it needs. Whether that means your protagonist burns down an orphanage or cures both cancer and AIDS, be honest. Even though people don’t know what they want, we know we all hate being lied to.

Learning to Walk

Whenever we learn something new, we have to learn the basics. Let’s be honest though: basics are boring. Who wants to drive a boring Civic with an automatic transmission when you have the option of dropping a Corvette to a lower gear and being shoved back in your seat when you hit the gas?

The thing is, you don’t get to start with the Corvette. I mean, sure, you could learn to drive a Corvette, but it’s probably better to learn how to drive on the Civic, then learn how to work a manual transmission, and then graduate to the flaming red sports car.

My coworkers have commented that when I drive I don’t use the brakes because I know how to downshift properly (side note: if you can’t down shift to slow down, you’re not allowed to say you know how to drive a stick). When I told them my factory brakes lasted nine years, and only had to be replaced because they rusted through (the pads were plenty thick), they didn’t believe me. Knowing the basics (e.g., how to use my transmission properly, not just how to make the car move) reduces wear and tear on my car.

It comes in my day job too. When I do a code review at work I’m constantly flagging exception safety issues, chances to use standard tools and algorithms, optimizations, and general design flaws. Having concepts like exception safety as second nature means I can write basic template code, and being able to do that means I can write tricky template code. It’s not because I’m a programming rock star (okay, I am, but work with me here), it’s because I’ve had the basics of programming beaten into me after years of practice.

The concept also applies to writing. Instead of trying to bite off a novel or series, write a short story or two and play with some ideas. Just taking the time to practice pays off in spades. Short stories mean you can ignore things like backstory and tying into a larger plot, so embrace that freedom so you can break things and get better.

The basics can be translating ideas in your head to paper (e.g., critiquers say things are confusing), grammar/style, tightening prose (I’m guilty of being overly verbose), or anything else.

Once walking comes easy, it’s time to tackle running. I’ll let you know what that’s like once I figure it out.

Trimming the Fat

Before going on Scribophile, the last people to read anything I put effort into writing were college professors. As a Computer Science major, every paper I wrote was for a general education course, and most of those professors didn’t bother reading papers thoroughly. One professor even shared, openly, that he grades entirely based on length. End result: I have a bad tendency to be overly verbose when I write. The professor who graded based on length got papers that included discussions on video games, dogs, and snack foods, despite teaching Anthropology.

Because of this, one of the best things I get out of critiques are places I can remove words and even entire paragraphs. Even when I think I have a great piece of writing (well, great for me, which is a low bar), there are things that can be removed. From a recent piece I posted:

When a badger gets in a coop and eats the chickens, you don’t blame the badger. Animals follow their nature, and men like this are no different. Killing one badger doesn’t keep another from attacking the chickens later, and killing our friend here won’t stop future attacks against us. It’s the responsibility of the dog to protect the chickens before the badger gets a chance to butcher them, and it’s the duty of the farmer to train the dogs. If your guards are spread too thin it’s your responsibility, your obligation, to fix the problem.

I liked that. I mean really, really liked that. Sure it’s not perfect, but I read that and thought I had something going. My main character got to be wise and awesome and badass. Then a critiquer trimmed the fat and did this:

When a badger gets in a coop and eats the chickens, you don’t blame the badger. Animals follow their nature, and men like this are no different. Killing one badger doesn’t keep another from attacking the chickens later, and killing our friend here won’t stop future attacks against us. It’s the responsibility of the dog to protect the chickens before the badger gets a chance to butcher them, and it’s the duty of the farmer to train the dogs. If your guards are spread too thin it’s your responsibility, your obligation, to fix the problem.

She summed up her suggestions with this:

Essentially, Badasses communicate more by action than words. When they do speak, it is “man of few words.” But each word has been carefully chose. Why? These kinds of men don’t have time to stand around chatting. They have shit to do, and usually they need to do it fast. Over time, thus kind of communication becomes second nature for them.

Mind blown.

Not only is the edit better, she hit the nail on the head with how my own character should act. I was so close to the story I couldn’t see the forest through the trees, but a fresh set of eyes helped point out the obvious.

In the next chapter one of the regular people who critiques my work described this same character as preachy, something I felt too but couldn’t figure out how to solve. I knew it was with a long speech he gave, but the speech was important and I couldn’t just cut it. Until, you know, somebody deleted it and showed me it worked even better.

It can be hard to see the fat, especially when you’ve been working a piece of meat for so long, but the fat is there. Identifying it means you can cut it, and that means tighter prose and a better story. If you can’t identify your own shortcomings (of which I have many), that second pair of eyes helps.

Writing Like a Geek

A few people have asked me for more details on my writing process so I figured the easiest thing is to document it here. This about the literal process of how I put together my projects.


Kate in action
Chapter 2 in kate

My main editor these days is Kate. Kate is a plain text editor but since it’s part of the KDE project it comes with a huge number of slick features include vi mode (vi is an unbelievably powerful editor once you make it past the learning curve). I use LaTeX markup for everything (more on that later).

Project Structure

Each project gets its own folder (current project is named “hammer” due to an old work working title). Each chapter is split in a couple files but how many depends on my mood when I worked on that particular piece (you can see in the above screenshot that the chapter is split in four files: one for each of the three scenes and a fourth to put them together). Files are named with a one-letter prefix based on the act (A, B, or C), a number (the chapter in that act), and a short name describing the point of that file. Each act has its own file that puts the chapters in order (named part-A.tex, part-B.tex, and part-C.tex).

Generating Output

LaTeX is a pain to work with directly (it pollutes the working directory and has no dependency management) but CMake solves both of these problems. CMake doesn’t support LaTeX out of the box, but I hacked together a module to manage LaTeX projects.

create_target(wolf-A "${CMAKE_CURRENT_SOURCE_DIR}" "${tex_files_A}" FALSE)
create_target(wolf-B "${CMAKE_CURRENT_SOURCE_DIR}" "${tex_files_B}" FALSE)
create_target(wolf-C "${CMAKE_CURRENT_SOURCE_DIR}" "${tex_files_C}" FALSE)
create_target(wolf   "${CMAKE_CURRENT_SOURCE_DIR}" "${tex_files}"   TRUE)

create_target(wolf-pub   "${CMAKE_CURRENT_SOURCE_DIR}" "${tex_files}" FALSE)
create_target(wolf-lulu  "${CMAKE_CURRENT_SOURCE_DIR}" "${tex_files}" FALSE)
create_target(wolf-scrib "${CMAKE_CURRENT_SOURCE_DIR}" "${tex_files}" FALSE)

The first four lines let me produce manuscript-formatted output for either the whole novel or individual acts, the bottom three produce typeset content, typeset content for a 6″ x 9″ page (per the requirements on Lulu), and individual chapters (for posting to Scribophile). The main targets I leverage are the first four, mostly because manuscript formats build much faster than non-manuscript formats.

Using LaTeX means I get lots of slick features when I generate the typeset output, including kerning, hyphenation, ligatures, old-style numerals, and micro-typography (this adjusts things like the spacing within words and overflowing into the margins to get whitespace that looks uniform to the human eye). Both typeset and manuscript forms leverage LaTeX features like the csquotes package (automatically manages quote matching across languages, including nested quotes).

Each target can be built in pdf, html, or odt. I can also generate “full” versions which include some post-processing on the output, but that’s only required for the full manuscript (required to generate Special Characters).

You can compare chapter 2 of The Howl of the Wolf in both manuscript and typeset formats.


I use apsell for spellchecking and integrate it with cmake using a custom command.

foreach   (file ${spellcheck_files})
    add_custom_command(TARGET spellcheck
                       COMMAND ${ASPELL} -t -p ${CMAKE_SOURCE_DIR}/aspell_dict check ${file})

If you don’t speak geek, this runs the entire project through aspell using a custom dictionary isolated to that project. My current plan is to delete the dictionary and run a clean spellcheck before publishing (just in case I accidentally added a word by mistake), but for now I can tolerate a few spelling errors.

I have a few scripts to help with analysis and file management. The most obvious example is word counts (splitting chapters/acts across lots of files makes this hard).

sh ../chapwc.sh 
A-00  3015+1+0 (1/0/0/0) Total
A-01  3688+0+0 (1/0/0/0) Total
A-02  2920+0+0 (1/0/0/0) Total
A-03  2471+0+0 (1/0/0/0) Total
A-04  2412+0+0 (1/0/0/0) Total
A-05  2718+0+0 (1/0/0/0) Total
A-06  1401+0+0 (1/0/0/0) Total
A-07  1117+0+0 (1/0/0/0) Total

All changes are tracked using git.


Before posting anything to Scribophile I run it through Pro Writing Aid to help with grammar and style. If you haven’t tried Pro Writing Aid give it a shot, the site is amazing (it found the exact same sentence being used twice in the same chapter; not similar, the exact same). I usually work through one report at a time, updating my raw files and generating new output as I go to make sure I don’t miss anything.

After going through Pro Writing Aid I check for troublesome words. When I’m done cleaning those up I do one last check through spellcheck and Pro Writing Aid to make sure I didn’t introduce new problems.

Once the sanity check is done I spit out the chapter in html (easier than dealing with copy/pasting through a pdf) and copy/paste in Scribophile.

Filter and Weasel Words

I learned new terms today: filter words and weasel words. In short:

  • Filter get in the way of prose and distance the reader from the action. They make it easy for the writer to tell the reader what’s going on instead of showing them. “The dog seemed agitated waiting for her owner,” instead of “The dog paced in front of the bay windows waiting for her owner.” “The pretty girl looked uninterested in the guy asking for her number,” instead of “The pretty girl ignored the guy asking for her number.”
  • Weasel words leave text feeling ambiguous. “He might be the hero’s brother.” “The body may have been stolen.” “The dog could have eaten the roast.” These sentences don’t help tell the story because the weasel words (in bold) render the text meaningless. “He might be unrelated to the hero.” “The body may be right where we left it.” “The dog could have ignored the roast and slept.”

Removing these cleans up the prose and makes it more interesting. A post on Scribophile suggested writing a macro in Word to detect these words and flag them but, since I don’t use Word, that doesn’t help me. Instead I implemented the same functionality in sh.



wordLists="filter weasel"

if [ ${#} -gt 0 ]; then
    source=$(${DIRNAME} ${0})

    for file in ${@}; do
        for list in ${wordLists}; do
            words=$(${CAT} "${source}/${list}-words.txt")
            for word in ${words}; do
                ${GREP} -q -i "\<${word}\>" ${file}
                if [ ${?} == 0 ]; then
                    ${ECHO} "${file} ${word}"
    ${ECHO} "Usage: ${0} <filename1> [filename2 ...]"

Bear in mind this is a quick and dirty attempt (it’s not as flexible as I’d like) but the basic functionality is there.

$ sh ../filter.sh A-00prologue.tex | head -n 5
A-00prologue.tex a bit
A-00prologue.tex could
A-00prologue.tex decided
A-00prologue.tex knew
A-00prologue.tex looked
$ sh ../filter.sh A-00prologue.tex | tail -n 5
A-00prologue.tex this
A-00prologue.tex that
A-00prologue.tex thought
A-00prologue.tex up
A-00prologue.tex wondered
$ sh ../filter.sh A-00prologue.tex | wc -l

I haven’t gone through the full output yet but this is a good sign. I already have other scripts to do things like get the list of active files in my project so a bit (see, filler word!) more scripting to feed pieces together and this can be integrated into nightly jobs to analyze my work.

If you’re interested check out the script, filter word list, and weasel word lists (word lists are blatantly stolen from a Scribophile post). I haven’t tested anywhere but my system, but there’s nothing fancy in the script so it should work on any Unixy system (probably OS X, likely Cygwin).


I spent some more time and fixed a few of the rough edges. This required rewriting filer.sh to use perl, but it comes with quite a few advantages:

  • Word lists are only read once (they’re stored in a hash). This should provide faster performance when processing multiple input files (my expected use case once I integrate this script into my nightly jobs).
  • The output now includes line and column offsets.
  • The same word will be flagged each time it shows up on a line, not just once per file [e.g., A-00prologue.tex was (9:178), A-00prologue.tex was (9:277), A-00prologue.tex was (9:361)].
  • The previous two points should make it easy to add white-lists for automatic detection as work is edited. My current plan is to commit the script’s output and use diff to compare “current” output with “committed” output.


[Note: Anna said it was fine to mention her and her work in this post]

I read a work a few days ago on Scribophile (“In Her Dreams” by Anna White) and one thing that struck me was the use of “fuck.” I’m not opposed to swearing, in fact I could probably make a sailor blush, but I do think swearing should be used in moderation.

Let’s take Deadwood as an example. The show averages 1.56 instances of “fuck” per minute (per Wikipedia). If you haven’t seen the show here’s a sample of its typical dialogue:

Al Swearengen: It’s not the fucking hour. It’s not the fucking vantage of the chair. It’s you, that’s changed the level of you suction somehow. That’s the fucking sum and substance of it.
Dolly: Maybe if I get on my knees?
Al Swearengen: You’re the cocksucker. Change the fucking angle.

Now Anna’s work isn’t nearly this gratuitous. And the creators of Deadwood intentionally gave their show the most foul language they could since with accurate language from the period, “[the characters] all wind up sounding like Yosemite Sam.” The problem however, is that when you have this much foul language in every conversation it loses the punch of hearing characters swear.

The reason I bring up Anna’s work (which, for the record, I genuinely enjoyed) is because its use of “fuck” is great. Each use is perfectly fine and sounds like things I’d actually say, but the last one is fantastic. My feedback suggested removing other other uses of the word so that the last version would stand out. Every prior use dilutes the impact that last “fuck” has and that impact is the highlight of her piece.

This applies to more than just language though. The reason Gus killing Victor in Breaking Bad was so shocking is because Gus hadn’t done anything like that since we met him over a season ago. If Gus had brutally murdered people from the moment we met him it’d be just another body. The reason, “I did it for me” stood out so much in the finale is because before that Walt always said he was doing everything, from the meth to the murders, for the family.

This works in politics too. Opencarry.org promotes gun owners openly carrying their firearms (as opposed to carrying concealed) specifically because they want to normalize firearms in everyday life. If you see a guy with a gun at the grocery store guns become as mundane and boring as seeing somebody with a cell phone.

The more you use something, anything, the more it’s normalized. When writing the killer scene that you want to stick with a reader you need to make it unique not just in terms of content, but in terms of how you present it. The verbiage, the pacing, the scenery, the dialogue, and everything else about those scenes matters.

So by all means, use “fuck” as much as you want in your work. Just remember when you actually need that “holy fuck” moment you may have blown the chance to really shock your reader.

Doing Diversity Right

Let’s talk about one of my absolute favorite shows: BoJack Horseman. If you haven’t watched it pull it up on Netflix and watch it. All of it. Seriously, this post is going to be filled with spoilers. I’ll wait.

I bring up BoJack Horseman because it’s one of the shining examples when it comes to diversity. Now that you’ve watched all thirty-six episodes you’re aware that the show has a diverse cast of characters. Some of the main characters are animals (Todd and Diane being the only main characters who aren’t animals) but we also have gay characters (Karen and Tanisha’s wedding in season 3), Vietnamese (Diane), black (Corduroy), and even an asexual (Todd).

In most shows these would be major defining characteristics of these characters but In BoJack none of these surface-level things matter. For example, fans speculated for three seasons over Todd’s sexual orientation before the show confirmed he was asexual. However, the only time the show ever explicitly touched on Todd’s sexuality was a throwaway line in the first episode when BoJack says he thought Todd’s parents kicked him out for being gay (as opposed to the actual reason, kicking him out for being a loser). Characters don’t question Todd or try to see who he has sex with and Todd doesn’t spend time playing the victim because of his orientation; nobody in the show really cares. Instead, the show gives Todd actual character development (mostly as a victim of BoJack’s selfishness but he’s had significant arcs in all three seasons) and he gets the sole use of “fuck” in season 3 (since you’ve seen the show you know each “fuck” is a big deal).  Even when they finally reveal Todd’s asexual it comes out without any flair or dramatic music (okay, there’s dramatic music but that’s because it’s the end of the season and there’s a lot going on).

Not only does that style make Todd more interesting as a character, it’s a way to actually show diversity in a respectful way. If every Todd story was about his sexuality it’d get boring but instead he’s a fan favorite. His rock opera was awesome and who didn’t laugh when Cabracadabra started accepting male customers (the entire purpose of the company was a ride-sharing app that protects women from pervs).

It’s not just Todd though. The only reference to Diane’s Vietnamese ancestry is BoJack’s inability to pronounce “Nguyen.” Half the characters are animals and Princess Carolyn being is a pink cat is the least interesting thing about her. Mr. Peanutbutter starts as a stereotypical Golden Labrador but he reveals deep depression and jealousy as we get to know him better (seriously, watch the premier episode of Hollywoo Stars and Celebrities: What Do They Know? Do They Know Things?? Let’s Find Out! and tell me he’s not a deep character). Every character matters, even throwaway ones like The Closer.

The characters aren’t defined by obvious stereotypes and tropes that proliferate through shows/books/movies that come out today where they make sure the main cast includes every diversity group the creators can think of.

Now if you’re writing a story about a plantation in South Carolina set in 1800 it’s obviously fine to focus on the fact racism is rampant and show being black is a big deal. Even still, make sure the characters have actual arcs and aren’t just tokens to hit a checkbox in diversity bingo. Diversity bingo not only cheapens your work, it cheapens the very people you’re trying to represent.

Version Control for Fun and Profit

Keeping track of old versions of your work is one of those things you don’t appreciate until you have it. Most people keep old versions with a mishmash of file names (novel.doc, novel-backup.doc, novel-backup2.doc, novel-backup-september-2015.doc, …) or using a service like Google Drive or Dropbox. These solutions work but to say they’re lacking is an understatement. Enter git.

Git is a piece of software used to track history of source code. While it’s fine-tuned for this behavior it’s still phenomenal at tracking changes in projects that are structured similar to software. If your project has the following properties git makes an excellent choice:

  • work is stored in plain text (i.e., non-binary files)
  • files are small to medium-sized
  • files are human-readable

Since I use LaTeX all these conditions are met (most word processors have an option to store contents in flat files which gets you most of the way here).

So how useful is git? Think about the backups spread across different services and folders with God-only-knows what names. Count how many you have and compare it to the history of my project.

$ git log --oneline | wc -l

177 versions at the time of this post, all of which are time-stamped with metadata about what actually changed. The last two commits look like this:

commit 42bf73d45dfe7fea13996ef9e3b2cdd0e122dc0a
Author: K.P. Wayne
Date:   Sun Jan 29 20:02:52 2017 -0700

    Polish up first part of chapter 1 using Pro Writing Aid

commit 297b676edc97643f901be6f6d0f846546534f2d5
Author: K.P. Wayne
Date:   Sun Jan 29 18:54:26 2017 -0700

    Work in feedback from Scribophile

Not only is backing up offsite trivial, but each backup contains the entire history of the project. As of right now my entire repository, meaning the full history of my project, is a whopping 652 kilobytes; less than half the space of a floppy disk.

You can also mark specific versions with symbolic names (the git term for this is a tag). This makes it trivial to see what changed between two different versions.

git diff –color-words scrib-bk1-a01..master bk1/A-01mine.tex

In fairness git has a learning curve and last time I checked most gui tools ranged from awful to bad (coworkers assure me this has changed). A simpler option is mercurial and Joel Spolsky put together a simple tutorial for anybody unfamiliar with version control.

It’s not for everybody and I haven’t tested git with popular tools Scrivener but if it fits in your workflow give it a go.


Special Characters

Section 11.12 of the The Chicago Manual of Style’s sixteenth edition recommends including a list of special characters at the end of any manuscript (a special character generally being anything not found on a standard keyboard). Because I’m lazy I want something to do the work for me so I don’t have to track what characters I’m using through revisions. Let’s make LaTeX track the special characters we use.

Since the glossaries package supports multiple glossaries we can use a special one just to track our special characters. Update the premable with something like this:

\newglossary[spg]{special}{sps}{spo}{Special Characters}

Now we can add any special characters specifically to this glossary with a few extra fields filled out:

  name = \'{e},
  description = {e with acute [U+00E9]},
  type = special,
  sort = eacute

Notice the description and type fields? These provide information about the symbol (in this case, é) including it’s Unicode representation and they tell LaTeX to put it in the new glossary we created in the last step. These fields are critical to get the behavior we want so no skipping steps.

Now we can start putting our \gls{e-acute} tags wherever we want but that’s pretty hacky. Instead let’s add another glossary entry that does the work for us:

  name = {caf\gls{e-acute}},
  description = { }

Now we can write like normal and wherever we put \gls{cafe} we get a nicely formatted “café.” The last step is to actually print the special characters we’re using at the end of our document:

Special character listing

Not only can we avoid manually keeping track of what characters we use while editing, we even include page numbers where our special characters appear.

Naming Characters (and Places, Groups, Gods…)

I’m awful with names. Actually that undersells how bad I am. I’m the kind of person who likes things to be precise and correct from the beginning (engineering hat) so I don’t even like having placeholders and calling my characters Bob, Janet, and Tony. I’ve tried, really, but I keep fidgeting and will spend hours trying to come up with the perfect name. Plus even if I somehow move on find/replace can only do so much. If I screw up and talk about how Bbo and Tony are trying to one-up each other to take Janet on a date we all know what’s going to happen.

The solution: placeholders. Yeah, even though I hate them they’re still the best option. Let’s look at a practical example.

  name = {Bob},
  description = { }
  name = {Tony},
  description = { }
  name = {Janet},
  description = { }
\gls{first-guy} and \gls{second-guy} both have a crush
on \gls{girl}.  I'd tell you who gets her in the end but
 I haven't actually thought that far ahead.

That’s from a stupid LaTeX file I just wrote that spits out the following: “Bob and Tony both have a crush on Janet. I’d tell you who gets her in the end but I haven’t actually thought that far ahead.” Notice how their names only appear in one place each, where I define the glossary entries? This means I can come in later, change Bob to Brad, and after I process the file again I end up with: “Brad and Tony both have a crush on Janet. I’d tell you who gets her in the end but I haven’t actually thought that far ahead.”

Now I can pick names that are good enough (mostly ones I blatantly pilfer from video games) and I don’t have to worry about find/replace letting me down when I go through later with better names. It’s already helped me once when I realized there were two businesses with “Irving” in their name (courtesy of Lloyd Irving from Tales of Symphonia) so all I had to do was update one entry in my glossary files and my name duplication issue went away.