Book pricing for optimal growth

I had a meeting with a business mentor last week (a McGill professor who has started dozens of companies). He helped me realize the most important thing for the company right now is growth—not margins. The success of Minireference Co. depends on how many students read the book by the end of this year, and by the end of the next. We’ll work on the margins once we have scale.

Below are some observations about book pricing for optimal growth.

Amazon technique

Since I listed the book on amazon.com/.ca/.co.uk/.de/.fr, all the print book sales have gone to them (mostly .com but a bit of .co.uk). Why would you buy the book from lulu.com for \$29 when you can get it from amazon for \$25? People are not stupid, even though I link to lulu.com from the main site, they all go to amazon to check if it’s available and order from there.

To be honest, I think the print quality of the books from lulu.com is superior to the book produced by amazon CreateSpace and IngramSpark. I think lulu.com has been in the “print on demand” business for the longest of the three companies, so they know what they’re doing. The print quality of lulu books is very uniform and crisp, unlike the CreateSpace version which had some pages in darker ink and some in lighter. The main reason why I like lulu.com is because their paper is thinner, which makes the 445pp book actually look much more approachable; we’re talking about a difference of 3-4 mm in overall thickness, but the psychological effects are important.

How can I communicate this difference to my readers? Maybe something like “I recommend you purchase the book through lulu.com, because of the higher print quality and thinner paper” could do. Though is this better print quality worth the \$4 extra, which is really \$10 extra when combined with the shipping. I guess I should tell my readers the facts, and let them decide for themselves.

Ingram channel

The other new channel I’ve been working on is the “serious” distribution to bookstores via Ingram. Printing through IngramSpark makes the book available through all kinds of online distributors (e.g. barnesandnoble.com) and also makes the book available to order from the Ingram catalog, which is how most physical bookstores order their books.

The list price is \$29, and the printing cost are \$6.7, which means there is \$22.3 of “value” to split between me, Ingram, and the bookstore. There are two options for the wholesale discount I can offer 55% wholesale discount (bookstore margin: 35%-40%) or offer 40% wholesale discount (bookstore margin: 20%–30%).

If I provide a wholesale discount of 40% (a.k.a short discount or academic discount), the wholesale price is 17.40, which leaves me with 17.40-6.7 = \$10.7 of profit per book sold.

If instead I offer 55% (industry standard, a.k.a trade discount), the wholesale price will drop to \$13.05, which leaves me with 13.05-6.7 = \$6.35 gains per book sold.

After yesterday’s conversation with my mentor, I’m switching to the 55% discount. Give everyone a cut. We’ll jack-up the prices when everyone is hooked on the knowledge buzz that learning mathematics provides 😉 .

eBook pricing

In parallel to the print book distribution, there is the question of eBook pricing. Both the print book and the eBook version have been \$29. Historically, eBook sales have been very good to me, but ever since the book has appeared on the amazons, the eBook sales have slowed to a trickle. Why would you buy a eBook for \$29 if you can get the print book for \$25?

I’m thinking of dropping the eBook price to \$19. Hopefully this will make more sense for potential customers. Surely the years of effort invested to write the best calculus book there could be is worth a twenty…

Devaluating the book

The other consideration to keep in mind in the face of these price deviations from the old price of \$29 is the psychological effects of “perceived value” of the book. How could this be a good book if it’s just \$25? Mainstream university-level math and physics textbooks cost hundreds of dollars. Specifically, \$190 for precalculus, \$209 for calculus, and \$192 for physics. How can your book cost only a fraction of that and be of comparable quality? No way, I don’t believe it!

I had picked the price \$29 to be as low as possible (looking out for the student’s interest) while still making the book business profitable for me. As the price is dropping below \$29 due to discounts, the situation with the “this book looks suspiciously cheap” problem is getting worse. I might think about bringing the price up to \$39 for the 6th edition, to better communicate the value.

Take home message

There is a general lesson to learn here, which is advice I’ve heard from several successful entrepreneurs, but I never took seriously until now. Price your products for growth not profit. You might lose some money at first, but reaching a wider audience is worth much more than short term profits.

Binary search in three languages

Hola! Regardons ensemble un peu de code. The binary_search algorithm. It will get a little technical, pero no es mucho complicado. A ver. En ingles. En anglais, parce que le code—ça va foule mieux en anglais.

Assume you’re given a array of integers sorted in increasing order [3,6,19,21,87]. You job is to write a “search” function that returns the 0-based index of query value, or -1 if val is not in array.

Binary search algorithm

The “usual” algorithm use the start and finish pointers in a weird way, which I found difficult to understand, so I wrote another one. The invariant “we’ve already checked the limits” feels more logical to me.

In JavaScript

In JavaScript the code for the binary search strategy is as follows:

SearchableArray.prototype.binary_search = function (val) {
    var data = this.data;

    if (data.length === 0) return -1;
    if (data[0] === val) return 0;
    if (data[data.length-1] === val) return data.length -1 ;

    var bin_search_limits = function(start,finish) {
        // invariant: data[start] and data[finish] have been checked already
        var mid;
        //console.log(start, finish);
        if (start === finish || start+1 === finish) 
            return -1;

        mid = start + Math.floor((finish-start)/2);

        if (data[mid]===val) {
            return mid;
        } else if (data[mid] < val) {
            return bin_search_limits(mid,finish);
        } else if (data[mid] > val) {
            return bin_search_limits(start,mid);
        }
    };
    return bin_search_limits(0, data.length-1);

};

The full javascript code (with tests;) is here.

In C

It was surprisingly easy to transform the JavaScript code into C. See the code and some basic tests here. The main functions essentially the same:

int bin_search_limits(int *data, int start, int finish, int val) {
      // invariant: data[start] and data[finish] have been checked already
      int mid;

      if (start == finish || start+1 == finish) 
          return -1;

      mid = start + (finish-start)/2;  

      if (data[mid]==val) {
          return mid;
      } else if (data[mid] < val) {
          return bin_search_limits(data,mid,finish, val);
      } else if (data[mid] > val) {
          return bin_search_limits(data,start,mid, val);
      }
  };

int binary_search(int *data, int length, int val) {
  if (length == 0) return -1;
  if (data[0] == val) return 0;
  if (data[length-1] == val) return length-1;

  return bin_search_limits(data,0,length-1, val);
};

In python

The pleasure of implementing binary search in python is left to the reader.


I’ve got to go code learn how to make a hash function to make the C test suite go faster 😉

Student workload

I just read an interesting account of what life is like for high school students. An adult shadowed a student for a whole day, going to class, taking exams, sitting all day, etc. The article is definitely worth a read for anyone in ed.

I liked the idea of structuring lessons starting from students questions. It wouldn’t work for 1-on-1 tutoring (a student may have only unknown unknowns) but collectively as a class, the set of all known unknowns probably covers a lot material that would make sense to cover in the current class.

Here’s an idea. Rather than writing advanced software that “measures” the student’s level of understanding and schedules appropriate material for them, why not let students tell you what they do or do not know, and—more importantly—what they would like to learn.

Update Oct 19: Grant posted an followup post.

Scaling sales, a quantitative appoach

Yesterday I watched an excellent video tutorial about startup growth tactics by Adora Cheung, a guest lecturer in Sam Altman’s startup class. The speaker has experience from user-testing 13 business ideas so you can tell she knows what she’s talking about. Growth, cohort analysis, and segmentation are all essential tools startup founders should know about.

It made me think about how little analytics I’ve been doing for minireference.com and this blog. What happens when a visitor comes to the homepage? Do they read the whole page? Do they click on any of the questions? Do they download the free PDF tutorials? Most important of all, do they click on one of they Buy links.

Let’s find out…

I previously evaluated the effectiveness of the landing page and found 3-4% conversion rates for the print book and similar rates for the Buy PDF link, and I remember being pleased about those numbers.

These days I see similar numbers: combined Print+PDF conversion is ~= 7.7%.

Looks good right? (Please, ignore the abysmal mobile conversion rates. I’m on bootstrap2 and everything will be fixed when I upgrade to bootstrap3 in a few weeks.)

The problem is many potential readers drop off after clicking through to lulu.com and gumroad.com. I lose contact with my potential customers as soon as they leave my site, so I don’t know how many of them actually bought something. Today I set out to calculate my real conversion rates by cross correlating the data form the google analytics, lulu.com, and gumroad.com.

Burst analysis

My main “marketing channel” is hacker news. Each time I release a new printable PDF tutorials, I post it to HN. It’s an elaborate ploy to gain readers’ trust by gifting them something useful (e.g. a 4-page printable tutorial) and upsell them to buy one of the books. I consider this to be ethical advertisement.

Because of this mono-site marketing strategy, the traffic on minireference.com is generally calm, but every now and then there is a huge spike that occurs when I post something to HN. This bursty nature of the traffic allows us to do a deeper analysis of the conversion rates.

Using google analytics, The visitors, and the two conversions goals are plotted below:

I chose to analyze the events surrounding two bursts of Aug 29th and Oct 3rd. The Aug 29th spike is thanks to the announcement of the
SymPy tutorial on HN.

I was able to calculate the post-minireference.com conversion rate for the print book:

Buy book link --> ordered from lulu: 14%(3/21) on Aug 29 and 10%(3/29) on Oct 3

The post-minireference.com conversion rate for the PDF is:

Buy PDF link --> ordered from gumroad: 33%(3/12) on Aug 29 and 21%(3/14) on Oct 3

Not cool y’all! I better work on this. What do people not like about lulu.com? Is it because they’re not used to it, should I put an Amazon link there?

What are dem visitors doing?

Another question that’s pertinent is how far down the page to users scroll.
We can obtain this information from the graph of scroll-depth events from google analytics (I have some .js the fires events at 0% (baseline), 25%, 50%, and 100% scroll depth.

It’s hard to read anything from that graph, but I’m saving the data for posterity—I want to have something to compare with when I switch to the new landing page…

Does the free tutorial marketing strategy work?

It took me more than a mont of part-time work to write the SymPy tutorial. It’s almost like a little book, since it covers so many topics. I also incurred $90 in copy-editing costs to make sure the writing is solid, since the tutorial was to become an appendix in the book. Was this effort worth it? Let’s see the traffic that resulted.

A total of 10k people downloaded the PDF. I had to use the server logs to get this data, because many people linked directly to the PDF, which means google analytics won’t see these hits. Using zgrep and wc the count the number of lines in the logs that contain the pdf url and HTTP code 200:

  zgrep '"GET /static/tutorials/sympy_tutorial.pdf HTTP/1.1" 200' mr.access.log mr.access.log* | wc
  10058  203840 2369042
  ^^^^^

The initial link to HN pointed to the blog post announcement, so we can see some part of that traffic on the blog:

Ultimately, what is of interest is how much traffic to minireference.com did the SymPy tutorial generate. We see the tutorial led to a spike of about 300 visitors to the main page.

From the numbers we have so far, we can estimate the conversion rate for the referral strategy via free PDF tutorials to be 3% = 300/10000. The SymPy tutorial also led to a “livelying” effect of the traffic in the following days, as can be seen in the graph. Clearly, more people are hearing about minireference.com and coming to check out the site.

The final profit from sales for this spike is \$150 so I’ve recouped the external expenses, and earned a salary of \$60/month, which is not great but still positive. The 3% conversion rate is very interesting, IMHO. I’ll pursue this strategy further, because it has great potential for viral growth—wouldn’t you send a kick-ass PDF tutorial on subject X to your classmates? (caveat: some engineering schools grade “on the curve” so for these students, it is actually game-theoretically disadvantageous to share quality learning material with their peers)

Conclusions and further research

The purpose of this blog post was to reduce the level of guilt I felt about not playing enough with analytics for my web properties. I feel I’ve achieved some level of guilt-diminishment and, more importantly, now I’ve got numbers that I can use as the baseline for comparison with the new homepage. Surely the conversion rates can be improved; the book is great, I just need to have simple messaging that explains how great the book is, and how it is good value-for-money for students, and also good knowledge-buzz-delivered-per-unit-time for adult learners.

Questions to followup on:

  1. How many landing pages do I need? There are essentially three “touching points” with my potential readers. A cold visit to the homepage (e.g. google search), a warm visit to the homepage (via recommendation), a tutorial referral visitor (which is super warm). Will the same marketing message work for all three types of traffic, or should I have three landing pages?
  2. What is the optimal order of the sales pitch? (A/B/../Z-test of section ordering.
  3. Should each book have its own landing page (/noBSmath and /noBSLA) or focus on a single page with two products?
  4. A/B test lulu.com vs amazon.com for the “Buy Book” link.
  5. What channels to develop next?

Okay, enough blogging. Let’s go write some kick-ass marketing copy. And from now on, we’ll be tracking them sales!