You are on page 1of 137

Lessons from Building

The World’s Largest


Social Music Platform
Matthew Ogle & Anil Bawa Cavia
FoWA 2007
How does it work?
How does it work?

Listen
- to your own music
- to Last.fm radio
How does it work?

Listen
- to your own music
- to Last.fm radio

Share
-your taste
instead of files
- automatic, via
“scrobbling”
How does it work?

Listen
- to your own music
- to Last.fm radio

Discover Share
-your taste
- via your friends
instead of files
- via people with
- automatic, via
similar taste
“scrobbling”
How does it work?

Listen
- to your own music
- to Last.fm radio

Discover Share
-your taste
- via your friends
instead of files
- via people with
- automatic, via
similar taste
“scrobbling”
15 million tracks scrobbled / day
15 million tracks scrobbled / day
(175 scrobbles per second)
15 million tracks scrobbled / day
(175 scrobbles per second)
Over 6 billion tracks scrobbled since 2003
15 million tracks scrobbled / day
(175 scrobbles per second)
Over 6 billion tracks scrobbled since 2003
10 million artists
15 million tracks scrobbled / day
(175 scrobbles per second)
Over 6 billion tracks scrobbled since 2003
10 million artists
70 million tracks
15 million tracks scrobbled / day
(175 scrobbles per second)
Over 6 billion tracks scrobbled since 2003
10 million artists
70 million tracks
700k tracks streamable on Last.fm radio
15 million tracks scrobbled / day
(175 scrobbles per second)
Over 6 billion tracks scrobbled since 2003
10 million artists
70 million tracks
700k tracks streamable on Last.fm radio
17 million items tagged
15 million tracks scrobbled / day
(175 scrobbles per second)
Over 6 billion tracks scrobbled since 2003
10 million artists
70 million tracks
700k tracks streamable on Last.fm radio
17 million items tagged
145k artist wikis
Last.fm World Domination Headquarters
Whitechapel, London, 2004
Early Growth Lessons
Early Growth Lessons

Don’t overextend – scale with your growth, not before


Early Growth Lessons

Don’t overextend – scale with your growth, not before

Make sure revenue sources scale with increased usage


Early Growth Lessons

Don’t overextend – scale with your growth, not before

Make sure revenue sources scale with increased usage


Google ads
Early Growth Lessons

Don’t overextend – scale with your growth, not before

Make sure revenue sources scale with increased usage


Google ads

User subscriptions
Early Growth Lessons

Don’t overextend – scale with your growth, not before

Make sure revenue sources scale with increased usage


Google ads

User subscriptions

Involve users in your web application’s story


Early Growth Lessons

Don’t overextend – scale with your growth, not before

Make sure revenue sources scale with increased usage


Google ads

User subscriptions

Involve users in your web application’s story


Make growth a selfish aim for existing users
Early Growth Lessons

Don’t overextend – scale with your growth, not before

Make sure revenue sources scale with increased usage


Google ads

User subscriptions

Involve users in your web application’s story


Make growth a selfish aim for existing users

Be as open as you can afford


Audioscrobbler.com homepage, late 2004
Openness and Growth
Openness and Growth
In 2004, we had a cool service, but needed data
Openness and Growth
In 2004, we had a cool service, but needed data

Audioscrobbler Protocol 1.0


Openness and Growth
In 2004, we had a cool service, but needed data

Audioscrobbler Protocol 1.0

Webservices for accessing users’ music profile data


Openness and Growth
In 2004, we had a cool service, but needed data

Audioscrobbler Protocol 1.0

Webservices for accessing users’ music profile data

Together, provided “round trip” incentive for plugin developers


Openness and Growth
In 2004, we had a cool service, but needed data

Audioscrobbler Protocol 1.0

Webservices for accessing users’ music profile data

Together, provided “round trip” incentive for plugin developers


Winamp, iTunes, WMP, Amarok
Openness and Growth
In 2004, we had a cool service, but needed data

Audioscrobbler Protocol 1.0

Webservices for accessing users’ music profile data

Together, provided “round trip” incentive for plugin developers


Winamp, iTunes, WMP, Amarok

Foobar, QCD, mpd, XMMS, mpg321


Openness and Growth
In 2004, we had a cool service, but needed data

Audioscrobbler Protocol 1.0

Webservices for accessing users’ music profile data

Together, provided “round trip” incentive for plugin developers


Winamp, iTunes, WMP, Amarok

Foobar, QCD, mpd, XMMS, mpg321

Noatun, Quod Libet, Jinzora, Ampache


Openness and Growth
In 2004, we had a cool service, but needed data

Audioscrobbler Protocol 1.0

Webservices for accessing users’ music profile data

Together, provided “round trip” incentive for plugin developers


Winamp, iTunes, WMP, Amarok

Foobar, QCD, mpd, XMMS, mpg321

Noatun, Quod Libet, Jinzora, Ampache

(and dozens more)


Openness and Users
Openness and Users

Involve non-technical users as well


Openness and Users

Involve non-technical users as well

Promote a community around your application


Openness and Users

Involve non-technical users as well

Promote a community around your application

Talk to your users (bad news > no news)


Openness and Users

Involve non-technical users as well

Promote a community around your application

Talk to your users (bad news > no news)

More likely to tolerate growing pains…


Moving into the new office
Old Street, London, May 2006
Growing up
Growing up
process
Growing up
process

product
Growing up
process

product
Growing up
process • 20 to 40+ employees in 6 months

product
Growing up
process • 20 to 40+ employees in 6 months

product • “people trump process”


Growing up
process • 20 to 40+ employees in 6 months

product • “people trump process”

• simple tools are effective tools


Growing up
process • 20 to 40+ employees in 6 months

product • “people trump process”

• simple tools are effective tools

• radiate information across different


channels in the company
Growing up
process excerpt from #last.fm irc channel
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764

felix: hey abc when did you put the adsense leaderboard on bottom cat pages live?
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764

felix: hey abc when did you put the adsense leaderboard on bottom cat pages live?

abc: friday
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764

felix: hey abc when did you put the adsense leaderboard on bottom cat pages live?

abc: friday

3:45 PM
Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764

felix: hey abc when did you put the adsense leaderboard on bottom cat pages live?

abc: friday

3:45 PM

mokele: ? lookup track 11082618


Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764

felix: hey abc when did you put the adsense leaderboard on bottom cat pages live?

abc: friday

3:45 PM

mokele: ? lookup track 11082618

irccat: track.id(11082618) Zetan Spore ??? Subspace Distortion http://www.last.fm/music/Zetan+Spore/_/Subspace+Distortion (lastfm=t)


Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764

felix: hey abc when did you put the adsense leaderboard on bottom cat pages live?

abc: friday

3:45 PM

mokele: ? lookup track 11082618

irccat: track.id(11082618) Zetan Spore ??? Subspace Distortion http://www.last.fm/music/Zetan+Spore/_/Subspace+Distortion (lastfm=t)

pete_bug: jonty, can you please suspend PP campaign 3670?


Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764

felix: hey abc when did you put the adsense leaderboard on bottom cat pages live?

abc: friday

3:45 PM

mokele: ? lookup track 11082618

irccat: track.id(11082618) Zetan Spore ??? Subspace Distortion http://www.last.fm/music/Zetan+Spore/_/Subspace+Distortion (lastfm=t)

pete_bug: jonty, can you please suspend PP campaign 3670?

jonty: pete_bug, sure one sec.


Growing up
process excerpt from #last.fm irc channel
irccat: SVN commit by norman (23872) 'randomSplitter: splits data into train and test sets randomly' (changeset: https://admindev.last.fm/
trac/changeset/23872)

3:40 PM

irccat: *** jonty is refreshing webnodes now: 'Fix for group owners'

mischa: jonty: memcache key should be set to: java-playlist-10093 where 10093 ==userid.

irccat: Trac: ticket #1779 (http://support.last.fm/trac/ticket/1779) changed by julian, Comment: Fixed for the next release..

irccat: number of anon flash streams is 1440, number of registered flash streams is 764

felix: hey abc when did you put the adsense leaderboard on bottom cat pages live?

abc: friday

3:45 PM

mokele: ? lookup track 11082618

irccat: track.id(11082618) Zetan Spore ??? Subspace Distortion http://www.last.fm/music/Zetan+Spore/_/Subspace+Distortion (lastfm=t)

pete_bug: jonty, can you please suspend PP campaign 3670?

jonty: pete_bug, sure one sec.

irccat: Trac: ticket #1526 (http://support.last.fm/trac/ticket/1526) "group recommendations are slow" created by muz.
Growing up
process excerpt from #last.fm irc channel

osmotic communication
Growing up
process

product
Growing up
process • 15 million unique users a month

product
Growing up
process • 15 million unique users a month

product • plan for going global


Growing up
process • 15 million unique users a month

product • plan for going global

• affiliations should enhance the user


experience
Growing up
process • 15 million unique users a month

product • plan for going global

• affiliations should enhance the user


experience

• harness critical mass


Growing up
process • 15 million unique users a month

product • plan for going global

• affiliations should enhance the user


experience

• harness critical mass

• embed your service in others


Growing up
process • 15 million unique users a month

product • plan for going global

• affiliations should enhance the user


experience

• harness critical mass

• embed your service in others

• make the transition from service to


platform
Growing up
product harness critical mass
Growing up
product harness critical mass
Growing up
product harness critical mass

user-generated content
Growing up
product harness critical mass
network effects of socialization

user-generated content
Growing up
product harness critical mass
network effects of socialization

affiliate services
user-generated content
Growing up
product harness critical mass
network effects of socialization

user moderation
affiliate services
user-generated content
Growing up
product harness critical mass

user-generated content
drives feature design
Growing up
product
Growing up
product embed your service in others
Growing up
product embed your service in others

quilts
Growing up
product embed your service in others

quilts charts
Growing up
product embed your service in others

quilts charts radio


Growing up
product embed your service in others

allow users to export


Growing up
product
Growing up
product transition from service to platform
Growing up
product transition from service to platform
Growing up
product transition from service to platform
Growing up
product transition from service to platform
Growing up
product transition from service to platform

openness is key to web


platforms
Attention and “Myware”
Attention and “Myware”
Attention and “Myware”

When you pay attention to something (or don’t), data is created


Attention and “Myware”

When you pay attention to something (or don’t), data is created

Myware: spying on yourself


Attention and “Myware”

When you pay attention to something (or don’t), data is created

Myware: spying on yourself

Attention economy alters traditional meaning of “active user”


Attention and “Myware”

When you pay attention to something (or don’t), data is created

Myware: spying on yourself

Attention economy alters traditional meaning of “active user”

Social web + attention aggregators = where the action is


Attention data
Monetizing attention
Attention data
Monetizing attention

1 - Microchunk it - Reduce the content to its simplest form.


Attention data
Monetizing attention

1 - Microchunk it - Reduce the content to its simplest form.


2 - Free it - Put it out there without walls around it or strings on it.
Attention data
Monetizing attention

1 - Microchunk it - Reduce the content to its simplest form.


2 - Free it - Put it out there without walls around it or strings on it.
3 - Syndicate it - Let anyone take it and run with it.
Attention data
Monetizing attention

1 - Microchunk it - Reduce the content to its simplest form.


2 - Free it - Put it out there without walls around it or strings on it.
3 - Syndicate it - Let anyone take it and run with it.
4 - Monetize it - Put the monetization and tracking systems into the
microchunk.
Attention data
Monetizing attention

1 - Microchunk it - Reduce the content to its simplest form.


2 - Free it - Put it out there without walls around it or strings on it.
3 - Syndicate it - Let anyone take it and run with it.
4 - Monetize it - Put the monetization and tracking systems into the
microchunk.

Fred Wilson, The Future of Media, November 2005


Attention data
Monetizing attention
Attention data
Monetizing attention

Powerplay is sponsored airtime


Attention data
Monetizing attention

Powerplay is sponsored airtime

Individualized targeting based on attention history


Attention data
Monetizing attention

Powerplay is sponsored airtime

Individualized targeting based on attention history

New attention metrics for reporting


Attention data
Monetizing attention

Powerplay is sponsored airtime

Individualized targeting based on attention history

New attention metrics for reporting

No more CPMs - the ‘scrobble’ is our attention unit


Attention data
Case study: tag cloud moderation
Attention data
Case study: tag cloud moderation

Paris Hilton tag cloud, October 2006


Attention data
Case study: tag cloud moderation

Paris Hilton tag cloud, October 2006 Paris Hilton tag cloud, February 2007
Attention data
Case study: tag cloud moderation
Attention data
Case study: tag cloud moderation

Censorship is not acceptable in a folksonomy


Attention data
Case study: tag cloud moderation

Censorship is not acceptable in a folksonomy

Attention data does not lie


Attention data
Case study: tag cloud moderation

Censorship is not acceptable in a folksonomy

Attention data does not lie

Weigh user tags by volume of attention user gives


to content
Attention data
Case study: tag cloud moderation

Censorship is not acceptable in a folksonomy

Attention data does not lie

Weigh user tags by volume of attention user gives


to content

Attention earns trust


Future of Last.fm
Future of Last.fm
more
Future of Last.fm
more

less
Future of Last.fm
more

less
Future of Last.fm
more • more growth

less
Future of Last.fm
more • more growth

less • more streamable music


Future of Last.fm
more • more growth

less • more streamable music

• more ambient findability


Future of Last.fm
more • more growth

less • more streamable music

• more ambient findability

• more personalization /
things you can do with your data
Future of Last.fm
more

less
Future of Last.fm
more • fewer interfaces

less
Future of Last.fm
more • fewer interfaces

less • fewer barriers to entry


Future of Last.fm
more • fewer interfaces

less • fewer barriers to entry

• fewer gradients?
Thank-you.
Questions?

matt@last.fm anil@last.fm

You might also like