Lessons learned -  Building the Yahoo! Developer Network Dan Theurer   Developer Relations Conference 2009
Yahoo! Developer Network Joined at incubation  4 years Technical Evangelist Manager Partner Integration Hack Program eBay Developer Program Technical Evangelist About Me
10 min YDN Update What history tells us Key learnings The four pillars Key takeaways What are we going to cover
10 min YDN Update
Yahoo Developer Network (YDN) Open Source Developer Tools Data Services Yahoo! Open Strategy (YOS) YQL Code Samples Open Strategy :: Applied
YUI Hadoop Apache PHP Perl MySQL YDN :: Open Source
YSlow Pipes Blueprint Mobile Widgets YDN :: Developer Tools
BOSS Address Book Flickr YDN :: Data Services
YOS :: Technology Stack
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
<query yahoo:count=&quot;46&quot; yahoo:created=&quot;2009-02-20T08:16:03Z&quot; yahoo:lang=&quot;en-US&quot; yahoo:updated=&quot;2009-02-20T08:16:03Z&quot; yahoo:uri=&quot;http://query.yahooapis.com/v1/yql?q=show+tables&quot;> <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
<query yahoo:count=&quot;1&quot; yahoo:created=&quot;2009-02-21T01:41:28Z&quot; yahoo:lang=&quot;en-US&quot; yahoo:updated=&quot;2009-02-21T01:41:28Z&quot; yahoo:uri=&quot;http://query.yahooapis.com/v1/yql?q=desc+flickr.photos.search&quot;> <results> <table name=&quot;flickr.photos.search”> <request> <select usesRemoteLimit=&quot;true”> <key name=&quot;machine_tags&quot; type=&quot;xs:string&quot;/> <key name=&quot;radius_units&quot; type=&quot;xs:string&quot;/> <key name=&quot;safe_search&quot; type=&quot;xs:string&quot;/> <key name=&quot;privacy_filter&quot; type=&quot;xs:string&quot;/> <key name=&quot;contacts&quot; type=&quot;xs:string&quot;/> <key name=&quot;tags&quot; type=&quot;xs:string&quot;/> <key name=&quot;place_id&quot; type=&quot;xs:string&quot;/> <key name=&quot;text&quot; type=&quot;xs:string&quot;/> … </select> </request> </table> </results> </query> YQL :: DESC flickr.photos.search
<query yahoo:count=&quot;6&quot; yahoo:created=&quot;2009-02-21T02:09:55Z&quot; yahoo:lang=&quot;en-US&quot; yahoo:updated=&quot;2009-02-21T02:09:55Z&quot; yahoo:uri=&quot;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&quot;> <results> <photo farm=&quot;4&quot; id=&quot;3154107557&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot;  owner=&quot;28569531@N00&quot; secret=&quot;6f22e677c3&quot; server=&quot;3101&quot; title=&quot;Jump - Fremont Older&quot;/> <photo farm=&quot;4&quot; id=&quot;2563123589&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;7811c91934&quot; server=&quot;3087&quot; title=&quot;Jump&quot;/> <photo farm=&quot;3&quot; id=&quot;2159479534&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;785e671cd4&quot; server=&quot;2080&quot; title=&quot;Hollywood - Jump - Dan&quot;/> <photo farm=&quot;3&quot; id=&quot;2066431773&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;c61604d090&quot; server=&quot;2208&quot; title=&quot;JUMP!&quot;/> <photo farm=&quot;2&quot; id=&quot;1304849768&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;7271c8f9b3&quot; server=&quot;1233&quot; title=&quot;Testing the suit&quot;/> <photo farm=&quot;2&quot; id=&quot;1178261094&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;3dac28807f&quot; server=&quot;1241&quot; title=&quot;Jump, jump!&quot;/> </results> </query> YQL :: SELECT * FROM flickr.photos.search WHERE user_id=&quot;28569531@N00” AND text=&quot;jump” LIMIT 6
Download the SDK http://developer.yahoo.com/social/sdk Unzip yos_php_sdk-1.1 Get a Developer Key http://developer.yahoo.com/dashboard Start to write some code Developer Key / PHP SDK
<?php // Include the PHP SDK for YSP library. require_once(&quot;yosdk/lib/Yahoo.inc&quot;); // Define values for keys required for authorization define(CONSUMER_KEY,&quot;dj0yJmk9ZDNwaXdQSEZ…j&quot;); define(CONSUMER_SECRET,&quot;37fe717538e0598e6c70d4262…&quot;); // 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=&quot;28569531@N00&quot; and text=&quot;jump&quot; limit 6'; // Make the request $results = $two_legged_app->query($yql_request); $photos = $results->query->results->photo; // Build the output HTML foreach($photos as $k=>$v) { $imgs .= '<img src=&quot;http://farm' . $v->farm . '.static.flickr.com/' . $v->server . '/' . $v->id . '_' . $v->secret . '_m.jpg&quot; alt=&quot;Image' . $k . '&quot;/>' ; } echo &quot;<html><body>&quot; . $imgs . '</body></html>’; ?> YQL :: 2-legged OAuth – PHP  SDK
YQL :: 2-legged OAuth – Result
<?php // Include the PHP SDK for YSP library. require_once(&quot;yosdk/lib/Yahoo.inc&quot;); // Define values for keys required for authorization define(CONSUMER_KEY,&quot;dj0yJmk9ZDNwaXd…j&quot;); define(CONSUMER_SECRET,&quot;37fe717538e0598e6…&quot;); $session=YahooSession::requireSession(CONSUMER_KEY,CONSUMER_SECRET); // Define YQL queries for the Social Directory APIs $query = &quot;SELECT * FROM social.connections WHERE owner_guid=me LIMIT 2&quot;; $result = $session->query($query); // Build the output HTML echo(&quot;<html><body><pre><h2>Connection Data</h2>&quot; ); var_dump($result) ; echo(&quot;</pre></body></html>&quot;); ?> YQL :: 3-legged OAuth – PHP  SDK
YQL :: 3-legged OAuth – Result
What history tells us
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
March 2006 20 APIs YUI Libraries JSON, Serialized PHP 2 Developer centers Servers in two colos Web 2.0 & Mashups
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/
March 2007 Categories -> Four pillars Not pretty - but functional Pipes launched YDN international Local developer events More Hackdays
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
Key learnings
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 …
Value => Adoption Solve their problems Help them be efficient Standards instead of buzz words Facts instead of slogans Time!!! Learnings :: Developers are lazy
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
Learnings :: Content Unfiltered RSS Feeds Ruby Language Center SearchMonkey Security Best Practices Shopping API Silverlight Language Center Site Explorer API Stencils for Designers Traffic API Travel API Upcoming API Utilities API Video Search API Weather API Web Search API Widgets Yahoo! User Interface Library YAP / YOS YDN Theater Yslow Zimbra … Hadoop HotJobs API Image Search API Java Language Center JavaScript Language Center l10n & i18n Tools Live Video Broadcast Local Search API Geocoder API Traffic API Mail  API Media Player Plugin Message Boards MyBlogLog API MyWeb  API .NET Language Center News Search API oAuth OpenID PHP Language Center Pipes Python Language Center Address Book API Ajax Maps Answers API ASTRA Library Audio Search API Autos Custom API BBAuth Blog Blueprint BOSS CodeSamples ColdFusion Language Center Content Analysis API del.icio.us API Design Pattern Library Exceptional Performance Finance API Fire Eagle™ API Flash Language Center Flash Maps Flickr API GeoPlanet™ API
Learnings :: Content Unfiltered cont.
Learnings :: Content Structured
Learnings :: Content Visually Organized
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
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
&quot;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
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
Four Pillars
The four critical parts of a Developer Network offer Data
The four critical parts of a Developer Network offer Data Tools
The four critical parts of a Developer Network offer Data HowTos Tools
The four critical parts of a Developer Network offer Data HowTos   Support  Communication  Tools
Key Take Aways
Developers are lazy, impatient and opinionated Traditional marketing does not work However Developers are willing to pay for value Take Aways
Thank You Questions? [email_address]

Lessons Learned - Building YDN

  • 1.
    Lessons learned - Building the Yahoo! Developer Network Dan Theurer Developer Relations Conference 2009
  • 2.
    Yahoo! Developer NetworkJoined at incubation 4 years Technical Evangelist Manager Partner Integration Hack Program eBay Developer Program Technical Evangelist About Me
  • 3.
    10 min YDNUpdate What history tells us Key learnings The four pillars Key takeaways What are we going to cover
  • 4.
    10 min YDNUpdate
  • 5.
    Yahoo Developer Network(YDN) Open Source Developer Tools Data Services Yahoo! Open Strategy (YOS) YQL Code Samples Open Strategy :: Applied
  • 6.
    YUI Hadoop ApachePHP Perl MySQL YDN :: Open Source
  • 7.
    YSlow Pipes BlueprintMobile Widgets YDN :: Developer Tools
  • 8.
    BOSS Address BookFlickr YDN :: Data Services
  • 9.
  • 10.
    SQL-like syntax Allowsyou 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
  • 11.
    <query yahoo:count=&quot;46&quot; yahoo:created=&quot;2009-02-20T08:16:03Z&quot;yahoo:lang=&quot;en-US&quot; yahoo:updated=&quot;2009-02-20T08:16:03Z&quot; yahoo:uri=&quot;http://query.yahooapis.com/v1/yql?q=show+tables&quot;> <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
  • 12.
    <query yahoo:count=&quot;1&quot; yahoo:created=&quot;2009-02-21T01:41:28Z&quot;yahoo:lang=&quot;en-US&quot; yahoo:updated=&quot;2009-02-21T01:41:28Z&quot; yahoo:uri=&quot;http://query.yahooapis.com/v1/yql?q=desc+flickr.photos.search&quot;> <results> <table name=&quot;flickr.photos.search”> <request> <select usesRemoteLimit=&quot;true”> <key name=&quot;machine_tags&quot; type=&quot;xs:string&quot;/> <key name=&quot;radius_units&quot; type=&quot;xs:string&quot;/> <key name=&quot;safe_search&quot; type=&quot;xs:string&quot;/> <key name=&quot;privacy_filter&quot; type=&quot;xs:string&quot;/> <key name=&quot;contacts&quot; type=&quot;xs:string&quot;/> <key name=&quot;tags&quot; type=&quot;xs:string&quot;/> <key name=&quot;place_id&quot; type=&quot;xs:string&quot;/> <key name=&quot;text&quot; type=&quot;xs:string&quot;/> … </select> </request> </table> </results> </query> YQL :: DESC flickr.photos.search
  • 13.
    <query yahoo:count=&quot;6&quot; yahoo:created=&quot;2009-02-21T02:09:55Z&quot;yahoo:lang=&quot;en-US&quot; yahoo:updated=&quot;2009-02-21T02:09:55Z&quot; yahoo:uri=&quot;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&quot;> <results> <photo farm=&quot;4&quot; id=&quot;3154107557&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;6f22e677c3&quot; server=&quot;3101&quot; title=&quot;Jump - Fremont Older&quot;/> <photo farm=&quot;4&quot; id=&quot;2563123589&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;7811c91934&quot; server=&quot;3087&quot; title=&quot;Jump&quot;/> <photo farm=&quot;3&quot; id=&quot;2159479534&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;785e671cd4&quot; server=&quot;2080&quot; title=&quot;Hollywood - Jump - Dan&quot;/> <photo farm=&quot;3&quot; id=&quot;2066431773&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;c61604d090&quot; server=&quot;2208&quot; title=&quot;JUMP!&quot;/> <photo farm=&quot;2&quot; id=&quot;1304849768&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;7271c8f9b3&quot; server=&quot;1233&quot; title=&quot;Testing the suit&quot;/> <photo farm=&quot;2&quot; id=&quot;1178261094&quot; isfamily=&quot;0&quot; isfriend=&quot;0&quot; ispublic=&quot;1&quot; owner=&quot;28569531@N00&quot; secret=&quot;3dac28807f&quot; server=&quot;1241&quot; title=&quot;Jump, jump!&quot;/> </results> </query> YQL :: SELECT * FROM flickr.photos.search WHERE user_id=&quot;28569531@N00” AND text=&quot;jump” LIMIT 6
  • 14.
    Download the SDKhttp://developer.yahoo.com/social/sdk Unzip yos_php_sdk-1.1 Get a Developer Key http://developer.yahoo.com/dashboard Start to write some code Developer Key / PHP SDK
  • 15.
    <?php // Includethe PHP SDK for YSP library. require_once(&quot;yosdk/lib/Yahoo.inc&quot;); // Define values for keys required for authorization define(CONSUMER_KEY,&quot;dj0yJmk9ZDNwaXdQSEZ…j&quot;); define(CONSUMER_SECRET,&quot;37fe717538e0598e6c70d4262…&quot;); // 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=&quot;28569531@N00&quot; and text=&quot;jump&quot; limit 6'; // Make the request $results = $two_legged_app->query($yql_request); $photos = $results->query->results->photo; // Build the output HTML foreach($photos as $k=>$v) { $imgs .= '<img src=&quot;http://farm' . $v->farm . '.static.flickr.com/' . $v->server . '/' . $v->id . '_' . $v->secret . '_m.jpg&quot; alt=&quot;Image' . $k . '&quot;/>' ; } echo &quot;<html><body>&quot; . $imgs . '</body></html>’; ?> YQL :: 2-legged OAuth – PHP SDK
  • 16.
    YQL :: 2-leggedOAuth – Result
  • 17.
    <?php // Includethe PHP SDK for YSP library. require_once(&quot;yosdk/lib/Yahoo.inc&quot;); // Define values for keys required for authorization define(CONSUMER_KEY,&quot;dj0yJmk9ZDNwaXd…j&quot;); define(CONSUMER_SECRET,&quot;37fe717538e0598e6…&quot;); $session=YahooSession::requireSession(CONSUMER_KEY,CONSUMER_SECRET); // Define YQL queries for the Social Directory APIs $query = &quot;SELECT * FROM social.connections WHERE owner_guid=me LIMIT 2&quot;; $result = $session->query($query); // Build the output HTML echo(&quot;<html><body><pre><h2>Connection Data</h2>&quot; ); var_dump($result) ; echo(&quot;</pre></body></html>&quot;); ?> YQL :: 3-legged OAuth – PHP SDK
  • 18.
    YQL :: 3-leggedOAuth – Result
  • 19.
  • 20.
    March 2005 DeveloperNetwork launched 2 people (+ 1 at Search) Search API only About 10 web service calls Servers only on the west coast Funded by Jerry
  • 21.
    March 2006 20APIs YUI Libraries JSON, Serialized PHP 2 Developer centers Servers in two colos Web 2.0 & Mashups
  • 22.
    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/
  • 23.
    March 2007 Categories-> Four pillars Not pretty - but functional Pipes launched YDN international Local developer events More Hackdays
  • 24.
    March 2008 Over50 APIs Big YOS initiative started Retired less valuable of APIs Incorporated a lot of video Various international Hackdays 2009: Will charge for BOSS
  • 25.
  • 26.
    Developers are lazyDevelopers 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 …
  • 27.
    Value => AdoptionSolve their problems Help them be efficient Standards instead of buzz words Facts instead of slogans Time!!! Learnings :: Developers are lazy
  • 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
  • 29.
    Learnings :: ContentUnfiltered RSS Feeds Ruby Language Center SearchMonkey Security Best Practices Shopping API Silverlight Language Center Site Explorer API Stencils for Designers Traffic API Travel API Upcoming API Utilities API Video Search API Weather API Web Search API Widgets Yahoo! User Interface Library YAP / YOS YDN Theater Yslow Zimbra … Hadoop HotJobs API Image Search API Java Language Center JavaScript Language Center l10n & i18n Tools Live Video Broadcast Local Search API Geocoder API Traffic API Mail API Media Player Plugin Message Boards MyBlogLog API MyWeb API .NET Language Center News Search API oAuth OpenID PHP Language Center Pipes Python Language Center Address Book API Ajax Maps Answers API ASTRA Library Audio Search API Autos Custom API BBAuth Blog Blueprint BOSS CodeSamples ColdFusion Language Center Content Analysis API del.icio.us API Design Pattern Library Exceptional Performance Finance API Fire Eagle™ API Flash Language Center Flash Maps Flickr API GeoPlanet™ API
  • 30.
    Learnings :: ContentUnfiltered cont.
  • 31.
  • 32.
    Learnings :: ContentVisually Organized
  • 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
  • 34.
    Join developer channelsto 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
  • 35.
    &quot;If you cannot 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
  • 36.
    Set expectations, communicatea 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
  • 37.
  • 38.
    The four criticalparts of a Developer Network offer Data
  • 39.
    The four criticalparts of a Developer Network offer Data Tools
  • 40.
    The four criticalparts of a Developer Network offer Data HowTos Tools
  • 41.
    The four criticalparts of a Developer Network offer Data HowTos Support Communication Tools
  • 42.
  • 43.
    Developers are lazy,impatient and opinionated Traditional marketing does not work However Developers are willing to pay for value Take Aways
  • 44.
    Thank You Questions?[email_address]