Lessons Learned - Building YDN

44
Lessons learned - Building the Yahoo! Developer Network Dan Theurer Developer Relations Conference 2009

description

Lessons learned from building the Yahoo! Developer Network. An overview of what YDN does, did and learned along the way.

Transcript of Lessons Learned - Building YDN

Page 1: Lessons Learned - Building YDN

Lessons learned -

Building the Yahoo! Developer NetworkDan Theurer

Developer Relations Conference 2009

Page 2: Lessons Learned - Building YDN

2

Yahoo! Developer Network

• Joined at incubation

• 4 years

• Technical Evangelist

• Manager Partner Integration

• Hack Program

eBay Developer Program

• Technical Evangelist

About Me

Page 3: Lessons Learned - Building YDN

3

• 10 min YDN Update

• What history tells us

• Key learnings

• The four pillars

• Key takeaways

What are we going to cover

Page 4: Lessons Learned - Building YDN

4

10 min YDN Update

Page 5: Lessons Learned - Building YDN

5

Yahoo Developer Network (YDN)

• Open Source

• Developer Tools

• Data Services

Yahoo! Open Strategy (YOS)

YQL Code Samples

Open Strategy :: Applied

Page 6: Lessons Learned - Building YDN

6

• YUI

• Hadoop

• Apache

• PHP

• Perl

• MySQL

YDN :: Open Source

Page 7: Lessons Learned - Building YDN

7

• YSlow

• Pipes

• Blueprint Mobile Widgets

YDN :: Developer Tools

Page 8: Lessons Learned - Building YDN

8

• BOSS

• Address Book

• Flickr

YDN :: Data Services

Page 9: Lessons Learned - Building YDN

9

YOS :: Technology Stack

Page 10: Lessons Learned - Building YDN

10

• SQL-like syntax

• Allows you to query (SELECT), filter

(WHERE) and join (IN) data across

WebServices.

• Self Describing - SHOW, DESC table

• Public / Private Data

• Bindings for many YDN APIs

• Can query external structured data (USE)

• http://developer.yahoo.com/yql

Yahoo! Query Language (YQL) - SELECT * FROM internet

Page 11: Lessons Learned - Building YDN

11

<query yahoo:count="46" yahoo:created="2009-02-20T08:16:03Z" yahoo:lang="en-US" yahoo:updated="2009-02-20T08:16:03Z" yahoo:uri="http://query.yahooapis.com/v1/yql?q=show+tables"> <results> <table>atom</table> <table>csv</table> <table>feed</table> <table>flickr.photos.exif</table> <table>flickr.photos.info</table> <table>flickr.photos.interestingness</table> <table>flickr.photos.recent</table> <table>flickr.photos.search</table> <table>flickr.photos.sizes</table> <table>flickr.places</table> <table>flickr.places.info</table> <table>geo.places</table> <table>geo.places.ancestors</table> … </results></query

YQL :: SHOW tables

Page 12: Lessons Learned - Building YDN

12

<query yahoo:count="1" yahoo:created="2009-02-21T01:41:28Z" yahoo:lang="en-US" yahoo:updated="2009-02-21T01:41:28Z" yahoo:uri="http://query.yahooapis.com/v1/yql?q=desc+flickr.photos.search"> <results> <table name="flickr.photos.search”> <request> <select usesRemoteLimit="true”> <key name="machine_tags" type="xs:string"/> <key name="radius_units" type="xs:string"/> <key name="safe_search" type="xs:string"/> <key name="privacy_filter" type="xs:string"/> <key name="contacts" type="xs:string"/> <key name="tags" type="xs:string"/> <key name="place_id" type="xs:string"/> <key name="text" type="xs:string"/> … </select> </request> </table> </results></query>

YQL :: DESC flickr.photos.search

Page 13: Lessons Learned - Building YDN

13

<query yahoo:count="6" yahoo:created="2009-02-21T02:09:55Z" yahoo:lang="en-US" yahoo:updated="2009-02-21T02:09:55Z" yahoo:uri="http://query.yahooapis.com/v1/yql?q=select+*+from+flickr.photos.search+where+user_id%3D%2228569531%40N00%22+and+text%3D%22jump%22+limit+6"> <results> <photo farm="4" id="3154107557" isfamily="0" isfriend="0" ispublic="1" owner="28569531@N00" secret="6f22e677c3" server="3101" title="Jump - Fremont Older"/> <photo farm="4" id="2563123589" isfamily="0" isfriend="0" ispublic="1" owner="28569531@N00" secret="7811c91934" server="3087" title="Jump"/> <photo farm="3" id="2159479534" isfamily="0" isfriend="0" ispublic="1" owner="28569531@N00" secret="785e671cd4" server="2080" title="Hollywood - Jump - Dan"/> <photo farm="3" id="2066431773" isfamily="0" isfriend="0" ispublic="1" owner="28569531@N00" secret="c61604d090" server="2208" title="JUMP!"/> <photo farm="2" id="1304849768" isfamily="0" isfriend="0" ispublic="1" owner="28569531@N00" secret="7271c8f9b3" server="1233" title="Testing the suit"/> <photo farm="2" id="1178261094" isfamily="0" isfriend="0" ispublic="1" owner="28569531@N00" secret="3dac28807f" server="1241" title="Jump, jump!"/> </results></query>

YQL ::SELECT * FROM flickr.photos.search WHERE user_id="28569531@N00” AND text="jump” LIMIT 6

Page 14: Lessons Learned - Building YDN

14

1. Download the SDK

http://developer.yahoo.com/social/sdk

2. Unzip yos_php_sdk-1.1

3. Get a Developer Key

http://developer.yahoo.com/dashboard

4. Start to write some code

Developer Key / PHP SDK

Page 15: Lessons Learned - Building YDN

15

<?php// Include the PHP SDK for YSP library.require_once("yosdk/lib/Yahoo.inc");

// Define values for keys required for authorizationdefine(CONSUMER_KEY,"dj0yJmk9ZDNwaXdQSEZ…j");define(CONSUMER_SECRET,"37fe717538e0598e6c70d4262…");

// The YahooApplication class is used for two-legged authorization, which doesn't need user authorization.$two_legged_app = new YahooApplication(CONSUMER_KEY,CONSUMER_SECRET);

// Create queries for Flickr$yql_request = 'select * from flickr.photos.search where user_id="28569531@N00" and text="jump" limit 6';

// Make the request$results = $two_legged_app->query($yql_request);$photos = $results->query->results->photo;

// Build the output HTMLforeach($photos as $k=>$v) { $imgs .= '<img src="http://farm' . $v->farm . '.static.flickr.com/' . $v->server . '/' . $v->id . '_' . $v->secret . '_m.jpg" alt="Image' . $k . '"/>' ;}echo "<html><body>" . $imgs . '</body></html>’;?>

YQL :: 2-legged OAuth – PHP SDK

Page 16: Lessons Learned - Building YDN

16

YQL :: 2-legged OAuth – Result

Page 17: Lessons Learned - Building YDN

17

<?php// Include the PHP SDK for YSP library.require_once("yosdk/lib/Yahoo.inc");

// Define values for keys required for authorizationdefine(CONSUMER_KEY,"dj0yJmk9ZDNwaXd…j");define(CONSUMER_SECRET,"37fe717538e0598e6…");

$session=YahooSession::requireSession(CONSUMER_KEY,CONSUMER_SECRET);

// Define YQL queries for the Social Directory APIs$query = "SELECT * FROM social.connections WHERE owner_guid=me LIMIT 2";$result = $session->query($query);

// Build the output HTMLecho("<html><body><pre><h2>Connection Data</h2>" );var_dump($result) ;echo("</pre></body></html>");?>

YQL :: 3-legged OAuth – PHP SDK

Page 18: Lessons Learned - Building YDN

18

YQL :: 3-legged OAuth – Result

Page 19: Lessons Learned - Building YDN

19

What history tells us

Page 20: Lessons Learned - Building YDN

March 2005

• Developer Network launched

• 2 people (+ 1 at Search)

• Search API only

• About 10 web service calls

• Servers only on the west coast

• Funded by Jerry

20

Page 21: Lessons Learned - Building YDN

March 2006

• 20 APIs

• YUI Libraries

• JSON, Serialized PHP

• 2 Developer centers

• Servers in two colos

• Web 2.0 & Mashups

21

Page 22: Lessons Learned - Building YDN

Hackday 06

Event:• Learning, Hacking, Camping

Numbers:• 350 developers came to Yahoo!• 4000 Pictures on Flickr (hackday06)• 56 hacks presented• Launched several APIs & BBAuth• One month of planning• Beck performed a full show

Winners:• Blogging in motion• Related: http://purplepedals.com/

22

Page 23: Lessons Learned - Building YDN

March 2007

• Categories -> Four pillars

• Not pretty - but functional

• Pipes launched

• YDN international

• Local developer events

• More Hackdays

23

Page 24: Lessons Learned - Building YDN

March 2008

• Over 50 APIs

• Big YOS initiative started

• Retired less valuable of APIs

• Incorporated a lot of video

• Various international

Hackdays

• 2009: Will charge for BOSS

24

Page 25: Lessons Learned - Building YDN

25

Key learnings

Page 26: Lessons Learned - Building YDN

26

• Developers are lazy

• Developers are impatient

• Developers are opinionated

• They look under the cover, analyze, hack.

• Of course they are smart, innovative and driven to optimize!

• Your success depends on that!

Learnings :: Developers are …

Page 27: Lessons Learned - Building YDN

27

Value => Adoption

• Solve their problems

• Help them be efficient

• Standards instead of buzz words

• Facts instead of slogans

• Time!!!

Learnings :: Developers are lazy

Page 28: Lessons Learned - Building YDN

28

• Capture their interest – direct it quickly

• Fast access to high value offers

• Easy signup

• Quick start guide

• Build on what they know

Learnings :: Developers are impatient

Page 29: Lessons Learned - Building YDN

29

Learnings :: Content Unfiltered

RSS FeedsRuby Language CenterSearchMonkeySecurity Best PracticesShopping APISilverlight Language CenterSite Explorer APIStencils for DesignersTraffic APITravel APIUpcoming APIUtilities APIVideo Search APIWeather APIWeb Search APIWidgetsYahoo! User Interface LibraryYAP / YOSYDN TheaterYslowZimbra…

HadoopHotJobs APIImage Search APIJava Language CenterJavaScript Language Centerl10n & i18n ToolsLive Video BroadcastLocal Search APIGeocoder APITraffic APIMail APIMedia Player PluginMessage BoardsMyBlogLog APIMyWeb API.NET Language CenterNews Search APIoAuthOpenIDPHP Language CenterPipesPython Language Center

Address Book APIAjax MapsAnswers APIASTRA LibraryAudio Search APIAutos Custom APIBBAuthBlogBlueprintBOSSCodeSamplesColdFusion Language CenterContent Analysis APIdel.icio.us APIDesign Pattern LibraryExceptional PerformanceFinance APIFire Eagle™ APIFlash Language CenterFlash MapsFlickr APIGeoPlanet™ API

Page 30: Lessons Learned - Building YDN

Learnings :: Content Unfiltered cont.

30

Page 31: Lessons Learned - Building YDN

31

Learnings :: Content Structured

Page 32: Lessons Learned - Building YDN

32

Learnings :: Content Visually Organized

Page 33: Lessons Learned - Building YDN

33

• Developers are connected – Online and offline

• Your product gets discussed in public forums

• You should be part of that discussion

• If you don’t build a community around it, they will

Learnings :: Developers are opinionated

Page 34: Lessons Learned - Building YDN

34

• Join developer channels to communicate (not to market)

• Twitter, Message Boards, Blog comments, IRC

• Slideshare

• Del.icio.us, Flickr, Upcoming

• The right events - Unconferences

• Provide value, have conversations, share code

• Be accessible, embrace feedback

Developers don’t respond to formal marketing!

Learnings :: Developers are opinionated contd

Page 35: Lessons Learned - Building YDN

35

"If you can not measure it, you can not improve it.”-- Lord

Kelvin

• Know your winners

• Measure as much as you can

• Web site stats

• API calls

• Forum post

• Personal interactions - documented feedback properly

• ...

• Keep doing what works – Fix or retire what’s broken

Learnings :: Metrics

Page 36: Lessons Learned - Building YDN

36

• Set expectations, communicate a roadmap / vision

• Avoid pre-announcements

• The macro affects the developer products

• High appreciation of events outside of Silicon Valley

• Coding competitions rather then car give aways

Learnings :: Others

Page 37: Lessons Learned - Building YDN

37

Four Pillars

Page 38: Lessons Learned - Building YDN

The four critical parts of a Developer Network offer

Data

38

Page 39: Lessons Learned - Building YDN

The four critical parts of a Developer Network offer

Data Tools

39

Page 40: Lessons Learned - Building YDN

The four critical parts of a Developer Network offer

Data

HowTos

Tools

40

Page 41: Lessons Learned - Building YDN

The four critical parts of a Developer Network offer

Data

HowTos

Support Communication

Tools

41

Page 42: Lessons Learned - Building YDN

42

Key Take Aways

Page 43: Lessons Learned - Building YDN

43

• Developers are lazy, impatient and opinionated

• Traditional marketing does not work

However

• Developers are willing to pay for value

Take Aways

Page 44: Lessons Learned - Building YDN

44

Thank YouQuestions?

[email protected]