Thursday, December 8, 2011

Cap Table

A couple of months ago I had to create a cap table for a spinoff proposal. While there are many cap table templates out there, I created one based on the work of D. Warrell  for my use. Here is the link to the xls:

 Cap Table spreadsheet


Tuesday, July 26, 2011

Netflix Price Change: What does it mean for Netflix?

On July 12, Netflix made a big announcement on its blog: separation of its streaming and DVD rental plans (http://blog.netflix.com/2011/07/netflix-introduces-new-plans-and.html) and new pricing effective September with no grandfather clause (the only exception is the limited plan). Within hours of this announcement, blogosphere resounded with strong protests from current subscribers and cries of “Netflix gone evil”. Netflix is clearly trying to move away from physical DVD rental business and the new pricing is going to do exactly that. Let take a look at some data from the 10k (2010 data):
  • Average number of paid subscribers = 14.786m
  • Average revenue per subscriber per month= $12.19
  • Total revenues = $2162.625m
Since 85% of subscribers have either:  streaming only (S + 0D),  streaming + 1 DVD (S + 1D) or  streaming + 2 DVD (S + 2D) plan, let us focus on these customers.  Let us reference these customers collectively as the S+nD segment.


Old Plan
New Plan
% Increase
Streaming only
$7.99
$7.99
0.00%
Streaming + 1 DVD
$9.99
$15.98
59.96%
Streaming + 2 DVD
$14.99
$19.98
33.29%



Why the Outcry? The Role of Reference Price

With the new plan, the marginal costs of adding a DVD to streaming only plan went up substantially:


Old Plan
New Plan
Add 1 DVD
$2.00
$7.99
Add 2 DVDs
$7.00
$11.99

It used to cost only $2 to add 1 DVD to the streaming only plan. That cost shot up to $7.99 in the new pricing plan. As a reference, the cheapest alternative is to rent a DVD from RedBox (or equivalent) for $1 a day. If the average 1 DVD subscriber watches 4 movies in a month, Netflix price comes out to be $1.99 per DVD.  99 cent is the price of convenience (home delivery + you can keep the DVD longer) which in my opinion is still a very good deal. However, a 60% jump in price ($9.99 to $15.98) is a huge psychological barrier for most people.


What does this mean for Netflix?
  
  • Streaming + 1 DVD customers are likely to switch to streaming only plan
The 60% price jump is going to be a big barrier for customers in this segment and they are likely to switch to the cheaper streaming only plan for $7.99 which is $2.00 less than what they pay today.
  •  Streaming + 2 DVD customers are likely to swallow the price hike
For this segment, the price jump is relatively small compared to the streaming + 1 DVD plan. Given the fact that these customers are already paying $14.99, an increase to $19.98 is more likely to be accepted.As we will see later, Netflix is counting on this!
  • There is a significant % of  streaming + 2 DVD subscribers
If we assume that the remaining 15% of the customer base (other than the S+nD segment) pays an average of $15.99 per month (the least of other pricing plans), the average revenue per user in the S+nD segment is about $11.52 per month. 

If at least 10% of the S+nD segment is streaming only, then about we have 4.40 million streaming +2 D customers (a good 35% of the S+nD segment), 6.91 million streaming + 1D customers and 1.26 million streaming only customers.  

The total annual revenue from S+nD segment is $1.74b . Revenues from other customer segments is about $425m.


Post-price Increase Scenario

So we have the following segments of customers (well, at least 85% of them):

                Old Pricing
Segment
Number of Customers (million)
Streaming Only
1.26
Streaming + 1 DVD
6.91
Streaming + 2 DVD
4.40

Total Annual Revenues = $1.74b

  • Scenario 1
After the price increase if all streaming + 1 DVD customers drop to streaming only option and Streaming + 2 DVD customers stay put, then we have:
                Segment
Number of Customers (million)
Streaming Only
8.17
Streaming + 1 DVD
0.00
Streaming + 2 DVD
4.40

Total Annual Revenues = $1.83b, an increase of 5.17%

  • Scenario 2
If 50% of the streaming + 1 DVD customers drop to streaming only option and 50% leave Netflix while streaming +2 DVD customers stay, then we have:
                Segment
Number of Customers (million)
Streaming Only
4.71
Streaming + 1 DVD
0.00
Streaming + 2 DVD
4.40

Total Annual Revenues= $1.50b, a decrease of 13.79%

  • Scenario 3
50% of the streaming + 1 DVD customers drop to streaming only option and 50% leave Netflix; 50% of streaming + 2 DVD leave as well, we have:
                Segment
Number of Customers (million)
Streaming Only
4.71
Streaming + 1 DVD
0.00
Streaming + 2 DVD
2.20

Total Annual Revenues= $979m, a decrease of 43.74%

Netflix is hoping that the streaming + 2 DVD customers will not leave or drop to a lower price plan for the new pricing to make sense in the short run.

Wednesday, July 20, 2011

Deconstructing Pandora’s S-1

Pandora’s IPO filing with the SEC (S-1 form here) revealed some interesting information about its customer base, sources of revenues, licensing costs and other financial data. When I first saw the numbers, I got curious as to what the numbers meant. Here is what I could deduce:

Data from S-1

1. 9 month revenues: $90,123,000 (Jan-Oct, 2010)

2. Total registered users: 71m

3. Pandora has two classes of users:

  • Free users who can listen to up to 40 hours of music per month. If a free user exceeds the 40 hour cap, he/she can pay $0.99 to remove that limit for the rest of the month.
  • Subscribers who pay $36 per year ($3/month) to get higher quality audio and no ads.

4. 13.6% of revenues come from paid customers (subscribers as well as users who paid the $0.99 for overage)

If we assume that all registered users are active and all of the paid customers are subscribers (i.e. we ignore overage users), we have:

Revenue Mix

  • Revenues per month = $10.01m ($90.12/9)
  • Revenues from paid customers per month = $1.36m ($10.01*13.6%)
  • Revenues from free users per month = $8.65m ($10.01 - $1.36)
  • Number of paid subscribers = 0.45m ($1.36/$3)
  • Number of free users = 70.55m (71m – 0.45m)

86.40% of the revenues are generated by the free users.


Implied CPM

If we assume that on an average each free user listens to 15 hours of music, we have:

  • Number of songs streamed per month = 257 (15*60/3.5, assuming an average 3.5 mins per song)

Pandora shows an ad for every three songs on an average. It also shows an ad when the user interacts with the Pandora application (skip or rate a song). There is limit of 10 skips per hour. But let us ignore all the skipping/rating part for a moment.

  • Advertisements per song = 0.33 (1 ad per 3 songs)
  • Number of ads per month per free user = 86 (257*0.33)
  • Total number of ads served (all free users) per month = 6047m (86 * 70.55)
  • Implied CPM = $1.43 ($8.65/(6047/1000))

Now that's a pretty low CPM! I am also assuming that all registered free users are active listeners which is certainly a stretch. If we assume only 50% of free users are active, we get:

Implied CPM = $2.86 ($8.65/(3023/1000)) which is also fairly low.

We can also do a backwards calculation to estimate % of active users by assuming a reasonable CPM rate. Lets say Pandora's CPM is $10.

This gets an active free user % of about 14%.


Paid vs. Free Customers

If we assume a CPM of $10, the ARPU for free user is $10.32 (12 * $10*86/1000) vs $36.00 for a paid subscriber.



Monday, June 27, 2011

Innovation in Media & Entertainment Industry

Innovation and its adoption is fairly complex in the M&E industry because of the need for different players in each part of the media value chain to be involved in the process. Many of the players do not have internal R&D capabilities and rely on external technology providers for innovation. Patent filing data shows that very few content creators and distributors have been creators of innovation (while patent data may not a very good indicator of innovation as some firms may choose to keep the innovations a trade secret, it does give a view of how M&E firms see innovation).In most cases they have either been users or "influencers" of innovation. Very few firms span the entire value chain, primarily due to the varied nature of the businesses. Each has different technological requirements and different cost structures (think Dreamworks vs. Comcast).

Technology
Adoption Cycles

In the M&E industry the skew of the S-curve is large with much higher adoption time compared to, say the microprocessor technology. To demonstrate this point, the adoption of HDTV can be a helpful example. The process of HDTV standardization in the US was started with the formation of the “Grand Alliance” in 1993, with the standard being adopted by the FCC in 1996. Even today, 14+ years after the standard was ratified, HDTV penetration in the US is just close to 46%. On the other hand, adoption of VCR was fairly rapid because of lack of strong interdependencies among the players in the value chain. In general, the more complex the technology in terms of the need for involvement from multiple players, the slower its adoption technology by the industry and consumers. This can be attributed to the following key reasons:

a) Cyclic interdependencies
In the case of the M&E industry, players have strong dependency on each other and in many cases this creates a chicken-and-egg situation where no player wants to invest in new technology before others make a commitment. In the case of HDTV, content creators would not invest in new cameras and post-production equipment before they saw the CE industry pushing HDTV technology for in-home viewing. The CE industry, on the other, wanted the content creators to first create compelling HD content to spur interest and demand for in-home players. In the media industry, technology adoption by the players is required to be done in lock-step for it to be successful.

b) Mismatch in innovation cycles in sub-industries
Innovation cycles within the M&E industry are unique for each of the four main categories of players - content creators, distributors, CE firms, and technology providers, adding complexity. For HDTV, though the technology providers came together to create the required standard, the distribution networks (cable/satellite) did not have enough capacity to handle the HDTV bandwidth requirements economically. Efficient video compression technology that would reduce the bandwidth requirements for HDTV was still under development. And from a consumer device perspective, the HDTV technology was still expensive. Because of high costs for LCD and plasma display technology, the price of an HDTV was prohibitive to a common household 10 years ago. Thus timing of innovation cycles can be a limiting, or encouraging, factor in the adoption of new technologies.

Tuesday, January 27, 2009

H.264/Theora Debate Continues

Mozilla foundation announced a $100k grant to support the development of Theora (see VentureBeat). The basic idea is to improve Theora and make it more widely available as an alternative to non-free video codecs. I was at the W3C session on "Video on the Web" in December of 2007 and a heated discussion broke on the issue of standardizing the codec for web video. Stephan Wenger from Nokia recommended H.264 ( Nokia position paper) and this stirred the hornet's nest with an ensuing debate on patents (submarine or otherwise) and royalties. In a codec shootout by OSNews, H.264 won clearly over Theora in visual quality and H.264 is already the video codec of choice for Apple. Microsoft finally yielding to H.264 over its own VC-1 surely tells you something. Giving people a choice is always a good idea but in the end it is a winner takes all game and it looks like H.264 has already won.

How to Implement a System Call in FreeBSD

I wrote this long time ago (1998/1999?) when I was hacking BSD for an implementation of Network Border Patrol and then it got buried somewhere. Based on some email requests, I am reviving this doc with the disclaimer that this is really old and may not work at all. So use this information at your own risk!

Steps involved in implementing a new system call in FreeBSD


There are three main source and header files that are associated with system calls. These are :
a) /usr/src/sys/kern/init_sysent.c
This file contains a table sysent , each entry of which stores two things :
1. the number of parameters to the system call and
2. the function that implements the system call.

b) /usr/src/sys/kern/syscalls.c
This file contains the table of names of all the system calls.

c) /usr/src/sys/sys/syscalls.h
This is the header file that contains the #defines for all system call numbers. For example getpid() has a system call number 20 that is defined as :

#define SYS_getpid 20

Luckily you don't have to edit any of these files yourself to implement a new system call. The process of setting up the correct prototypes, #defines, etc is automated which will becme clear shortly.
Let us take up a contrived example of implementing a fictitious and arguably useless system call : int syshello(char *) that simply returns the string "hello" in the buffer supplied. Note that I did not bother to check the size of the buffer (bad programming karma!) before copying the string.

1. Edit /usr/src/sys/kern/syscalls.master to add an entry for hello. There are multiple types of system calls:
a) STD : always included in the kernel
b) COMPAT : included if COMPAT is #defined
c) LIBCOMPAT : included if COMPAT is #defined and placed in syscalls.h
d) OBSOL : obsolete, and is not included in the kernel.
e) UNIMPL : not implemented yet and only a placeholder is provided for the system call. Each entry in the file has the following format:

systemcall_ number type namespace { systemcall_prototype } syscall_name argument_struct_name return_type

syscall_name, argument_struct_name and return value if not specified are defaulted to systemcall_prototype, 'systemcall_name'_args and int respectively if not supplied. When adding a new system call, always add it to the end of the syscalls.master file. Bump the last sytem call's number by one and assign it to syshello. For example's sake, let us assign number 338 to syshello. The entry for syshello in syscalls.master should look like this:

338 STD BSD { int syshello(char *buf); }


Here, the name of the system call is syshello, the argument name is syshello_args and the return type is int.

2. Run "makesyscalls.sh syscalls.master" in /usr/src/sys/kern directory. This will generate init_sysent.c, syscalls.c and syscalls.h files for you.

3. Now that you have everything in place, the only thing left is to implement the system call. It is a good idea to create a new file to implement the new system call. Basically your philosophy in kernel hacking should be : "Dont touch any existing code unless you really have to" . Believe me, it carries a lot of wisdom.Let us name our implementation file sys_hello.c. Every system call is passed two parameters : 1. pointer to struct proc and 2. pointer to the user defined system call argumet structure, which in our case is : syshello_args. The structure syshello_args should be defined by the implementor of the system call and should contain all the arguments to the system call. In our case it should have a pointer to char.

struct syshello_args
{
char *buf;
};


The system call itself should be implemented like this:

int syshello(p, uap)
struct proc* p; struct syshello_args uap;
{
sprintf(uap->buf,"Hello");
/* fill the buffer with Hello */
p->p_retval[0] = 0;
/* set the return value of the system call*/
return 0;
}

4.
Modify the Makefile to include sys_hello.c,etc and recompile the kernel.

5.
Boot the new kernel and viola, we are all set. You would ofcourse, do more meaningful stuff within your system call implementation. To invoke your new system call from a user program, just use another systemcall, syscall (more info can be obtained via the man pages of syscall).