Lessons learned - Building the Yahoo! Developer Network Dan Theurer Developer Relations Conference 2009
Lessons learned -
Building the Yahoo! Developer NetworkDan Theurer
Developer Relations Conference 2009
2
Yahoo! Developer Network
• Joined at incubation
• 4 years
• Technical Evangelist
• Manager Partner Integration
• Hack Program
eBay Developer Program
• Technical Evangelist
About Me
3
• 10 min YDN Update
• What history tells us
• Key learnings
• The four pillars
• Key takeaways
What are we going to cover
4
10 min YDN Update
5
Yahoo Developer Network (YDN)
• Open Source
• Developer Tools
• Data Services
Yahoo! Open Strategy (YOS)
YQL Code Samples
Open Strategy :: Applied
6
• YUI
• Hadoop
• Apache
• PHP
• Perl
• MySQL
YDN :: Open Source
7
• YSlow
• Pipes
• Blueprint Mobile Widgets
YDN :: Developer Tools
8
• BOSS
• Address Book
• Flickr
YDN :: Data Services
9
YOS :: Technology Stack
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
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
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
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
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
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
16
YQL :: 2-legged OAuth – Result
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
18
YQL :: 3-legged OAuth – Result
19
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
20
March 2006
• 20 APIs
• YUI Libraries
• JSON, Serialized PHP
• 2 Developer centers
• Servers in two colos
• Web 2.0 & Mashups
21
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
March 2007
• Categories -> Four pillars
• Not pretty - but functional
• Pipes launched
• YDN international
• Local developer events
• More Hackdays
23
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
25
Key learnings
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 …
27
Value => Adoption
• Solve 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 :: 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
Learnings :: Content Unfiltered cont.
30
31
Learnings :: Content Structured
32
Learnings :: Content Visually 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 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
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
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
37
Four Pillars
The four critical parts of a Developer Network offer
Data
38
The four critical parts of a Developer Network offer
Data Tools
39
The four critical parts of a Developer Network offer
Data
HowTos
Tools
40
The four critical parts of a Developer Network offer
Data
HowTos
Support Communication
Tools
41
42
Key Take Aways
43
• Developers are lazy, impatient and opinionated
• Traditional marketing does not work
However
• Developers are willing to pay for value
Take Aways