On “unpleasant truths” in tech books

(Part of an intermittent continuing series on tech writing. People have urged me to write a book on how to write tech books for years. If I collect enough of these, I just might.)

I’m working on FreeBSD Mastery: Advanced ZFS, and am desperately hoping to have a first draft finished and out for tech review before my September writing workshop. And I’ve hit a situation I’ve hit many times before, but not in a way that will be so obvious to so many readers.

OpenZFS runs on many operating systems. FreeBSD is considered a Tier 1 OpenZFS platform, which is cool. But even so, not everything works quite the way you’d expect.

The current master document on tuning OpenZFS for better performance is Adam Leventhal’s article on the Delphix blog. The performance chapter needs to cover everything in that article and more, in a slower and more easily accessible manner.

But not everything on that blog post works on FreeBSD.

Some problems are straightforward to fix. The DTrace scripts are written for illumos, so some of them need minor tweaks to work on FreeBSD. I can ask around and get a knowledgeable kernel person to fix them (thank you, Ryan Stone!). Many parts need more explanation and context than Leventhal provides–which is great, because otherwise I’m out of a job.

But there’s the hard category: things that just don’t work on FreeBSD.

You can tune almost everything in ZFS, including how async writes perform. But the async tuning knobs are not useful without the speedometer that measures the impact of those changes on your hardware.

Performance tuning without measuring is not tuning: it’s voodoo. And not the voodoo religion that people sincerely practice, but the cheesy comic book thing that appears in any number of B movies when the filmmaker couldn’t be bothered to do any actual research.

The DTrace script that measures the effects of tuning async writes won’t work on FreeBSD. There’s a PR on this issue, but it’s sat there for three months now without anyone claiming it.

The Advanced ZFS book must address this. The issue for me isn’t so much the actual FreeBSD issue, but “how should the book address this?”

I could say any of the following.

  1. “FreeBSD is not as tunable as illumos.”
  2. “If you want to tune async performance, you’ll need to apply the patch in bug 200316 and rebuild your kernel. Unless someone happens to merge this patch into the kernel after this book comes out.”
  3. “Async performance? Who says you can tune async performance? I know nothing of this.”

Which is the correct path?

The first rule of writing a tech book is: serve your reader.

Or, as Mickey Spillane famously said, “I have no fans. You know what I got? Customers. And customers are your friends.” I must tell them the truth.

Number 3 is the easiest to write–just pretend it doesn’t exist. How many people actually need to tune async performance anyway? But the feature is in OpenZFS, and it’s fair for my readers to ask about it. Many readers will read my warnings about the feature, dismiss said warnings, play with async write tuning, and reluctantly concede that the warnings were correct.

Ignoring the matter is a disservice to my customers, so it’s out. As in so many things, the easiest thing to do is the wrong thing to do.

For most writers, in most situations, the correct answer is both #1 and #2. Admit the weakness up front. Don’t try to cover it up. State it flat-out for your readers:

“FreeBSD’s ZFS async writes are not as tunable as illumos’.”

Or, more accurately:

“Yes, you can tune FreeBSD’s ZFS async writes, but at the time I write this you cannot measure the effect of that tuning. So don’t do it. It won’t help most of you anyway. If you really must, look at this bug and study this blog post, if it’s still there.”

Yes, I’m a BSD guy. I’ve been a FreeBSD committer. I’m friends with a bunch of OpenBSD committers. I believe in the BSD philosophy–it comes straight out of my Boy Scout days. (Yes, I’m an Eagle Scout with the first palm, believe it or not!) I don’t want to diss any BSD, even in such a tiny matter.

But as a writer, it’s my job to speak the truth. (I’d argue this applies for all kinds of writing, not just tech writing, but it’s unquestionably 100% true for tech books.)

I could also take action before the book comes out, by using my influence as “the biggest BSD author” to whine at people until someone fixed it. Most authors don’t have that option, but I know these folks, and I could tag them all on Facebook until someone changed it. I could go to my fans and say “Fly, my flock! Fly to every FreeBSD developer you know, and throw this bug in their faces until they pay attention!”

But this method breaks my “don’t be a jerk” rule. (Yes, I have that rule. Shut up, Bob. And Warner! And–oh, fine, never mind.)

Another problem with this approach is, there might well be a very good reason why this patch isn’t merged. FreeBSD is not illumos. This apparently simple patch might to strange and terrible things to hosts in certain circumstances. Maybe it boosts latency or launches ICBMs at the nearest penguin sanctuary. I’m a writer, and totally unqualified to make this judgment.

Nevertheless, I’m going to try a little bit of the influence approach. Maybe I’ll write a blog post about the issue, hoping that someone of influence will see it. A few influential FreeBSD folks follow my blog. Perhaps someone with the necessary skills will take interest and either close the bug with an explanation or commit it.

(Me, passive-agressive? Moi? Never!)

Sysadmin Appreciation Day sale!

We all know that sysadmins don’t get enough credit.

Someone cared enough to create Sysadmin Appreciation Day, which is very nice, except that the only people who know about it are, well, sysadmins. And we are really crappy at appreciating anyone, including ourselves.

So, over at Tilted Windmill Press, I’m having a sale. The coupon code SAD15 gets you half off of all individual ebooks.

This means you could get all 7 Mastery titles in ebook for $35.

The coupon does not work on the discounted 3-book bundle, nor on the tip jar. Because the bundle is already discounted. And getting a coupon on my tip jar just seems like it would annoy me.

Similarly, this offer isn’t available on other platforms, such as Kindle or Apple. It’s only on the TWP web site because I fully control it.

Offer expires at midnight on Friday 31 July EDT.

I will not repeat this in 2016. Because random sales are only effective if they’re random.

June 2015 Updates

Yes, it’s July. But these updates are for June. Because I put off writing this post.

Initial reaction to “FreeBSD Mastery: ZFS” has been positive. I’m pleased that so many people like the book.

Work on “FreeBSD Mastery: Advanced ZFS” is underway. I want to get this book done soon. Soooon. Because I’m kind of sick of writing about a single filesystem. This book should be smaller than the first ZFS book, thankfully.

I’m spending an hour a day on the sequel to Immortal Clay, called “Kipuka Blues.” I expect to have a first draft finished in July.

I now have three Montague Portal stories available. The first one is free on all platforms now, as a loss leader. Not sure how well that will work–the market for short fiction is smaller than the long fiction market. My fiction page has links for various Amazon sites, iBooks, Kobo, and more.

If I want FM: AZ done soon, and I want KB done soon, why don’t I pick one and crank on it? Nonfiction pays the bills, so I can’t drop everything and work on fiction. If I only write tech stuff, though, the nonfiction words go dry. Writing fiction keeps the nonfiction spigot clear and flowing.

I’ve done 200,000 words of publishable writing in the first half of 2015. I’d like to make in an even half million for the year. That’s not ridiculous–if I maintained my January and February outputs for every month of the year, I’d hit a million words in 2015. We’ll see what happens.

And as far as my master plan for writing full time goes: it seems that the rebooted Star Trek gets a whole lot better about Season 3. The bald French dude is no Kirk, but he’s not all bad. I hear they did some followup series. I might check those out once I’m done.

I will have books at BSDCan

The printer says that they’ll have FreeBSD Mastery: ZFS to me before I leave for BSDCan.

And they’ve sent UPS tracking numbers. Numbers that UPS acknowledges. While they don’t show a delivery date yet, UPS says that the boxes exist.

So I’m pretty confident in saying that I’ll have books there. And I take Square.

The list price is $24.99 US. Given the exchange rate, they’ll be $25 USD/$30 CAD for a “FreeBSD Mastery: ZFS” print/ebook bundle.

European Union VAT and my bookstore

For the last couple years I’ve been fairly successful selling my self-published books from my own store at tiltedwindmillpress.com. Recent legislation in the European Union changes this.

The EU has this thing called VAT, or “value-added tax.” It’s a tax that requires all sorts of paperwork. It requires charging tax based on the buyer’s location. And it applies to ebooks as of 2015.

Legally, if I’m doing business in the EU, I’ll need to collect VAT and remit it to each country in the European Union.

I don’t make enough on EU sales to cover the paperwork and time.

I have little choice but to stop doing direct business in the EU.

I want readers in the EU to be able to buy my books, but I won’t be able to sell to them directly. I’ll need to go through retailers that handle VAT for me.

I have the following requirements for a retailer.

  1. Must let me sell multiple formats (pdf, epub, mobi) in a single purchase.
  2. Must handle VAT
  3. Must support DRM-free
  4. Must not hold onto payments for “very long” (whatever that means)
  5. Must handle highly formatted documents
  6. Must add VAT to the retail price

Many people have suggested Smashwords, but they fail #4 and #5. Smashwords pays quarterly. They also only accept epub and Microsoft Word files, and they produce PDF, Kindle, RTF, and all the other formats from those. I want buyers to get a PDF that matches the print edition, so that they get interesting things like indexes. Also, Smashwords does not support tables. (I don’t blame them. Tables are evil.)

So far, it looks like Gumroad is the winner. Gumroad will let me sell any file format I want, exactly as I upload it. They will handle VAT for me, by adding the VAT to the price. And they pay every other week, by direct deposit. Annoyingly, you must have a Gumroad account to browse the catalog. I have Tarsnap Mastery on Gumroad now. Other titles will follow.

As far as other retailers go: retailers like Amazon and iBooks are handling VAT by making ebook prices inclusive of VAT. This means I’ll need to raise my EU prices to compensate.

Once I have everything in place, I’ll implement an IP-based block against sales to EU countries.

I really, really dislike this, but EU law leaves me no choice. I’m not comfortable blatantly ignoring tax law. I don’t think the EU could really do anything to me, but I wouldn’t be shocked if a future EU-US treaty were to suddenly make me responsible for years of back VAT. And I would like the option of visiting the EU in the future, rather than risk trouble because I’m evading taxes.

Of all the book buyers in the world, my readers are the most likely to be able to evade IP-based blocks. I’ve written one of many books on how to do that. An IP-based block is reasonable due diligence on my part, and I can stand up in court and say that. If you choose to evade that block, that’s an action on your part and, legally, not my responsibility. I have no other technological means to block you, anyway.

“But you’re small!” Yes, I am. But I don’t intend to stay small. I’m working very hard at getting bigger.

If you’re in the EU, and you’ve been waiting to buy some of my Mastery books, I suggest you stop waiting now.

If you’re in the EU and want to buy books directly from me, I suggest fixing your tax laws so that doing business there is worthwhile.

Rest assured, I really dislike taking these steps. Spend some time reading about microbusinesses and the EU VAT. Many people like me who happen to be based in the EU are being completely forced out of business. If I lived in the EU, I’d probably have to leave.

I’m also pondering some sort of sponsorship plan, where people could send me money to support my work. Every so often, I’d send them an ebook as thanks. This wouldn’t be a sale–sponsorships would be a little more expensive than just buying a book, otherwise it would be a thinly disguised sale and breach the law. I’m still debating this, though, as I’m not sure there’s enough interest.

(UPDATE 12:30 PM)

I should say, I have no objection to paying taxes. Taxes are the price we pay for civilization, and while you might argue that there’s better ways to do it, taxes are how we do it today.

I don’t even object to paying a European tax on European customers. I’d just pass it through to my customers, after all.

But to comply with US taxes, I keep spreadsheets of sales and expenses. At the end of the year, I bundle them up with a few 1099s and related docs and ship them to my accountant. She sends me a nice letter saying “write these checks and mail these forms.”

If I could do this and comply with the EU VAT, I would do so.

But I can’t. VAT compliance requirements are a nightmare for a microbusiness. VAT compliance requires multiple sources of information from multiple providers. I don’t even take credit cards, because the compliance requirements are too high. There’s zero chance I’m going to be capable of VAT compliance!