The Economics of Self-Publishing via Kickstarter (so far)

Ever since I launched the Nature of Code kickstarter page I’ve been getting a ton of questions about the economics of this book project. Though I hate to take any precious moments away from the actual writing of the book, I thought I’d take some time to lay out some thoughts. This is all an experiment, and one that I hope will help future authors with evaluating the pros and cons of self-publishing. So in the interest of transparency here is where I sit at the moment. Admittedly I’m flying by the seat of my pants.

Originally I had planned to raise approximately $5,000. My thought was as follows. I want to hire an editor (done! the wonderful Shannon Hunt). I want to hire a designer. I want to hire an illustrator. I want to hire some technical reviewers. I haven’t worked out the exact costs, but I was planning on spending somewhere between one and three thousand dollars on each of the above, depending on the scope of work, etc. I had always planned to fork out some cash out of pocket, but figured kickstarter would ease the burden. Let’s just say, as a rough wild guess estimate, I’m going to spend $6,000 on any labor associated with production (editing, design, technical review, proofreading, etc.) Come to think of it, that might be a bit low, but that’s the number I’m sticking with for now.

Next, there’s the matter of printing the book itself. I haven’t sorted this out either, but I’m planning on using a print-on-demand service (such as lulu). Let’s say the book ends up around 350 pages and costs $15 to print each copy (might be less, might be more, depending on quality, etc.). As of this writing I have 283 pre-orders on kickstarter for the print book. That’s $4,245. Then I’ll probably want to send out some free copies, review copies for teachers, review copies for bloggers, press, etc. Let’s say I send out 50 free copies. There’s another $750. Oh right, and shipping and handling. Let’s say it’s $3 per book. (Once the book is out, shipping and handling will be passed onto the customer, but I’ll be handling it for all kickstarter “pre-orders”.) So another $999 for shipping.

So now (with some rounding) we have $6,000 (fees + labor) + $5,000 (first round of printing) + $1,000 (shipping). A total of $12,000.

Kickstarter money to date: $12,167.

Total profit: $167

(Note I’ve ignored some important details like Kickstarter’s 5%, but this is close enough).

Here’s the thing. That might not seem so great. But it is. It’s fantastic. It’s amazing. What it means for me is that I’ve written a book (and published it). It also means that I own (exclusively) all of the content in the book. It means that if I continue to sell the book as a PDF, I keep 100% of the price (minus any transaction fees). Let’s take my first book Learning Processing, published by MKP/Elsevier. I think for a kindle version, I barely end up with a dollar (I need to check this, maybe it’s more like 2, but in any case, it’s something quite small).

Regarding print copies, with Learning Processing (which retails at the somewhat ridiculous price of $50), I receive approximately $3 per copy sold (very rough estimate). This self-published book could theoretically reach the customer for $25 (half the price!) and I would receive ~$10 for that copy.

And if I want to put all the content online for free as tutorials, I can.

So, this is where I stand as far as today. Really though, what I care about the most is just writing the darn thing. So back to that.

Nature of Code Book Chapter 1 Draft Available

Ok, so I may very well be one of the slowest writers ever, but I am pleased to finally announce that I have completed a draft chapter for what I hope will become my next book: The Nature of Code. Based on my experience getting Learning Processing out into the world I’ve decided to go ahead and experiment with self-publishing. I’m not sure what service I’ll ultimately use or exactly how I’ll distribute the text (most likely as a PDF for sale online as well as print-on-demand physical book) so feel free to write me with suggestions, etc.

Let’s take a moment to go over some of the finer points as to why I am doing this.

Dollars and cents

Learning Processing retails for $49.95 (amazon’s discount is 10%: $44.95). When the publisher sells a copy of the book, I get some money (yay for me!). Based on my first royalty statement, this works out to approximately $3.73 per copy. Sure, I’m not writing books about programming with Processing to get rich, but I did spend a couple years working hard on the project and every little bit counts.

Let’s assume for the moment that I could sell the same exact book via lulu.com. The actual cost for printing the book would be ~$14.00. Ok, so let’s say I choose to sell the book at $25.00 (half the actual current cost.) That’s $11 of profit for every book sold, lulu takes 20%, leaving me with ~$8.80 per book sold. The book costs half as much and I get more than double the revenue! Now, this is just one scenario. I haven’t decided what service to use, how much of a mark-up is appropriate, etc. But you get the idea. There’s no reason a no color, no frills, beginner programming text needs to be $50.00.

Release early, Release often

As an author, it’s just nice to have a lot of flexibility with the process. With self-publishing, I can do things like release early drafts of PDFs online for feedback (see below). This is not something I could have easily done with a traditional publishing house. Instead of spending months or years writing a book before anyone sees anything, the idea is that I can just put stuff out there (for cheap) as I type and then iterate. And there are no limits of how I choose to distribute the book (excerpts published as tutorials on Processing.org? Free on my site? PDF for a million dollars? Audio book? It’s all fair game.).

Once the book is done, I can easily continue to make changes and update. Now, Processing has a fairly stable API, one that is not going to undergo massive changes anytime soon. And sure, how gravity works, the formula for the mandelbrot set, these aren’t concepts that are going to change that often. Nevertheless, anytime you write a technical book, technology changes faster than you can write, and no matter how careful you are, there’s no way to avoid making a serious amount of mistakes. With self-publishing and print-on-demand, I don’t have to wait (possibly years) for a print run to finish selling in order to make changes. I could make them daily if I wanted to. And that Chapter on PHP that I realized I really should have included in Learning Processing, well, I could just add it whenever I so choose.

Downfalls

There are certainly some pitfalls to self-publishing. One major issue, of course, is deadlines. Without a publisher I’ve got very little pushing me forward other than myself. In fact, getting this first chapter done took me twice as long as I intended. And other projects are getting in the way, I’m not sure how fast I will actually get to chapter #2.

The other main issue is distribution. I don’t care if I don’t get my book in Barnes and Noble, I mean who is really buying Processing books at Barnes and Noble?! I do need Amazon.com, but looks like there are plenty of print-on-demand options that can be distributed via Amazon. The major question for me is university bookstores. I don’t have any numbers, but it does seem to me that Learning Processing gets stocked in a lot of school bookstores because it is being used as a text for classes. So this is something I need to figure out, how can I get a self-published book to stores.

Oh yeah, an index. The publisher made an index for me. There’s got to be a way I don’t need them for that, though.

In the end, I could be wrong. This could be a failed experiment. Maybe no one will buy it, maybe I won’t finish it. The nice thing, however, is that if I’m really headed in the wrong direction here, I can always change my mind and start sending out proposals to a publisher. But the other way around, going from a publisher to self-published, well, that wouldn’t be so easy.

So, if you’re interested in checking out what I’ve started so far, for now (subject to change), you can purchase the PDF on lulu.com. I’m selling draft chapters for small amounts with the idea that I could raise a little bit of money to pay for design, typesetting, technical editing, etc. once I’ve got a more finished draft.

http://stores.lulu.com/dshiffman

UPDATE: I’m also looking for a service that would let users buy early drafts of a book and then upgrade to the final version at a discount or for free. Suggestions for how to do this welcome.

Nature of Code Book

This semester, I’ve started working on expanding my nature of code tutorials into a book. My plan is to self-publish (looking into a few options) and have drafts available for download / purchase as early as this summer. I’ll also be publishing excerpts from the book as tutorials on processing.org (the first will be a PVector tutorial) and on this site as well.

sign up for e-mail updates about the book

Here is a PDF of the draft table of contents for those who are curious. Feedback is welcome!

Learning Processing Available Now

nyu bookstore

Just a quick note to let you know that my book, Learning Processing, is now available for purchase. If you are local to NYC, you can buy the book at the NYU bookstore.

Amazon says “out of stock”, but I’m told by the publisher that this is an error and they do, in fact, have copies. Also, at $37.00, this seems to be the cheapest option online that I can find.

All the example code will be available live online at learningprocessing.com by early next week. Feel free to contact me with comments, questions, feedback!

Who is this book for? Check out my earlier post.

Book Release: Learning Processing

Learning Processing

I’m pleased to announce that my new programming with Processing book will be released this August (by the end of the month). You can pre-order the book from Amazon, download a sample chapter from the web site, and, yes, even become a fan of the book on facebook (since that’s what all the 35 year olds are doing these days.)

A few things I’d like to say about the book:

My goal for “Learning Processing” was to write something for the complete and total programming beginner. If you’ve never written a line of code before in your life, but want to get started creating your own digital media tools then I wrote this book for you. There are several other wonderful Processing books out there and I hope mine will complement them nicely. A special thanks to Casey, Ben, and Ira who kept encouraging and inspiring me as their books were being published.

The book is also geared towards the teacher. It’s not my belief that such a person will necessarily learn any new skills from the book (assuming they have a programming background), however, my hope is that the book will encourage and help facilitate the teaching of programming. It is structured with 10 lessons (complete with examples and exercises) and can act as a ready-made syllabus for a beginner interactive media / programming class. In fact, the book is modeled exactly on ITP’s Introduction to Computational Media course.

The first half of the book is all fundamentals: pixels, variables, conditionals, loops, functions, objects, arrays. The second half is an introduction to select advanced topics: 3D, images, video, data, sound, etc. (download full table of contents). And although the web site is currently just a splash page, it’s my intention to make available all the examples (and exercise answers) at the site. The full site should launch in the next few weeks (a big thanks to Rich Hauck who is helping to build the site.)

If anyone is interested in teaching with the book come this fall, please feel free to drop me a line and I’d be happy to answer any questions. It’s also my hope that this book can teach programming to high school students, however, I don’t have as much experience in this area. . . but if anyone is looking to try it out with younger students, please let me know and I would love to help.

Processing Yahoo Search Library

2011 Update: While this library may still work, I am deprecating it as Yahoo does not support the Java Search API any longer as far as I can tell

Now, I am rather overdue for an update on my upcoming book. I’ll be posting details soon. However, in the course of finishing up a chapter on String parsing, I discovered that my good friend, the Google SOAP API is no longer being supported (obviously, I’m a little late on the ball here.)

So, I quickly whipped up a Processing library to make use of the Yahoo Search API. Now, you can access the Yahoo! API directly in Processing. There’s even an example here. However, you would have to write your own thread if you wanted to search asynchronously. In addition, if you’re not comfortable diving into outside Java APIs, you might struggle to figure out the syntax. (Switchboard also provides an interface to the Yahoo! API.)

So I set out (as an example for my book) to make a quick and easy bridge to the Yahoo API.

  • Download the library here
  • Go and get a developer ID
  • Download the Yahoo! Search SDK Find the file: yahoo_search-2.X.X.jar and put it in the library folder (along with the above download).
  • Finally, take a peek at this example code.

    // Import the library
    import pyahoo.*;
     
    YahooSearch yahoo;
     
    void setup() {
      size(400,400);
      // Make a search object
      yahoo = new YahooSearch(this,"YOUR API KEY HERE");
     
    }
     
    void mousePressed() {
      yahoo.search("processing.org");
      // You can request more results like so (the default is 10):
      // yahoo.search("processing.org",30);
    }
     
    void draw() {
      noLoop();
    }
     
    // The searches will come in one at a time to here when finished
    void searchEvent(YahooSearch yahoo) {
      // You can get the titles, URLs, or Summaries back as an array of Strings
      String[] titles = yahoo.getTitles();
      String[] urls = yahoo.getUrls();
      println("\nI searched for " + yahoo.getSearchString());
      println("There are a total of " + yahoo.getTotalResultsAvailable() + " results available");
      println("Here are the first " + yahoo.getNumberRequested());
      for (int i = 0; i < titles.length; i++) {
        println("___________");
        println("Item # " + i);
        println(titles[i]);
        println(urls[i]);
      }
     
      // You can also access the Yahoo API Directly by asking for the WebSearchResult object:
      // WebSearchResults results = yahoo.getResults();
      // WebSearchResult[] results = yahoo.getResultsArray();
      // In this mode, make sure to import the Yahoo library up topl
      // import com.yahoo.search.WebSearchResults;
      // See Yahoo API documentation for more
    }

    There’s also a fancier example (mostly uncommented, sorry) that produced the image at the top of this post here.

    Thoughts? Helpful? Useful?