SlideShare a Scribd company logo
1 of 53
by
september launch 8 million installs 18-35 demographic
mobile HTML5 double digit traffic native (coming soon)
 
FB.api(‘/me/news.reads’, {method: ‘POST’})
 
 
mobile HTML5 double digit traffic native (coming soon)
1. coding for the futures
1. coding for the futures “ <coding for the futures” +
everything you write effects possible futures “ coding for the futures” +
be deliberate when you have to do it wrong “ coding for the futures” +
architect for the foreseeable futures “ coding for the futures” +
short term futures
window.FB.api(‘/me’, callback)
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
and long term futures
backbone.js and REST JSON api before we could even support single page
closed off the fewest future options
conceived, design, built, and shipped mobile in 6 weeks
coding for the futures “ coding for the futures />”
2. building mobile second
2. building mobile second “ <building mobile second” +
“ building mobile second” + makes us (me) feel better =)
“ building mobile second” + but we learned a lot, too
“ building mobile second” + mobile and web are facets of the same product
“ building mobile second” + it will probably be multiplatform at the end of the day no matter what
“ building mobile second” + use <platform> second as a chance to rethink the core of your experience
social reading had no conventions or boundaries
screen shot of first app implementation
used mobile to rethink boundaries
 
 
we’ll roll mobile learning back into web app
and then do the whole thing again
“ building mobile second />” building mobile second
some tips and tricks for HTML5 and single page apps
avoid these two
HTML in your views View.render = function(name){ return ‘<span>’+name+‘<span>’ }
lots of keys in localStorage window.localStorage.length > 1000
‘ tis good stuff
black box your js templates $(‘.fp’).html(Templates.facepile(peopleJSON))
get javascript weekly javascriptweekly.com/
don’t wait for the FB js sdk fbQueue = $.Deferred(); fbAsyncInit = function(){ fbQueue.resolve() }
for native SSO around HTML5, try passing the tokens if(access_token && user_id){ _startApp() } else { Auth.getUserAuth(_startApp) }
consolidate you data structures around spec ActivityStreamsArticle = { objectType: ‘article’, id: ‘x6hf3’, url: ‘ https://myapp.com/a/x6hf3 ’ }
/* clowntown */
handwritten templates template = function(data){ return ‘<div></div>’ };
our stack
on ye old client requirejs jQuery underscore Backbone amplify.store typekit.js RESTful routes coffeescript less
on ye old backend AWS Cloud Services python pyramid groovy grails MySQL, SimpleDB, Redis, Memcache
questions [email_address]

More Related Content

Similar to Washington Post Social Reader: FB Hack Preso 01-18-2012

App engine devfest_mexico_10
App engine devfest_mexico_10App engine devfest_mexico_10
App engine devfest_mexico_10
Chris Schalk
 

Similar to Washington Post Social Reader: FB Hack Preso 01-18-2012 (20)

Intro to Android Programming
Intro to Android ProgrammingIntro to Android Programming
Intro to Android Programming
 
Mobile Java with GWT: Still "Write Once, Run Everywhere"
Mobile Java with GWT: Still "Write Once, Run Everywhere"Mobile Java with GWT: Still "Write Once, Run Everywhere"
Mobile Java with GWT: Still "Write Once, Run Everywhere"
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...
 
Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
 
jQuery Presentation - Refresh Events
jQuery Presentation - Refresh EventsjQuery Presentation - Refresh Events
jQuery Presentation - Refresh Events
 
Eugene Andruszczenko: jQuery
Eugene Andruszczenko: jQueryEugene Andruszczenko: jQuery
Eugene Andruszczenko: jQuery
 
mobicon_paper
mobicon_papermobicon_paper
mobicon_paper
 
Having Fun Building Web Applications (Day 1 Slides)
Having Fun Building Web Applications (Day 1 Slides)Having Fun Building Web Applications (Day 1 Slides)
Having Fun Building Web Applications (Day 1 Slides)
 
mobl
moblmobl
mobl
 
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
Встреча Google Post IO ( Владимир Иванов, Катерина Заворотченко и Сергей Комлач)
 
Creating Rajanikant Powered Site
Creating Rajanikant Powered SiteCreating Rajanikant Powered Site
Creating Rajanikant Powered Site
 
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
 
Introduction to html5
Introduction to html5Introduction to html5
Introduction to html5
 
Creating Yahoo Mobile Widgets
Creating Yahoo Mobile WidgetsCreating Yahoo Mobile Widgets
Creating Yahoo Mobile Widgets
 
App engine devfest_mexico_10
App engine devfest_mexico_10App engine devfest_mexico_10
App engine devfest_mexico_10
 
Android Minnebar
Android MinnebarAndroid Minnebar
Android Minnebar
 
Developing Applications for WebOS
Developing Applications for WebOSDeveloping Applications for WebOS
Developing Applications for WebOS
 
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
Hybrid Application Development for Maemo N900 Device using Qt Webkit - Discov...
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

Washington Post Social Reader: FB Hack Preso 01-18-2012

Editor's Notes

  1. 1. Hey all, thanks for coming to this NYC facebook hackathon. I hope everyone&apos;s been having a good morning so far. I&apos;m Charles Covey-Brandt. I&apos;m the tech lead for a product called The Washington Post Social Reader, a news reading app that Washington Post Labs launched with Facebook&apos;s Custom Graph in September of last year.
  2. Social Reader is a big product for us and a great experiment into news distribution, personalization, and social reading. Since launch, we&apos;ve totaled 8 million users. And, more importantly, a very large number of our users are 18-35 years old, which, if you&apos;re familiar with the traditional news industry is pretty unheard of.
  3. We are on the web in the Facebook Canvas, on mobile web, and targeting a native release in the next month. So far, we&apos;re seeing that social news can be very successful.
  4. The app is centered on social reading, this means that when you read an article, all your friends will be able to see that you read that article. and you will be able to see what your friends read.
  5. to do this we&apos;re leveraging Facebook custom open graph and read action. Whenever a user reads an article, we fire this to facebook.
  6. And the result is a really nice aggregation in a user&apos;s news feed of all the articles their friends recently read.
  7. and here&apos;s the mobile version.
  8. so building all of this out has been quite an interesting process, I want to share today with you two ideas we&apos;ve picked up and sorta latched onto over the past year or so building the Social Reader.
  9. --- Also, I like to be informal with presentations, so just yell or something if you have a question before I&apos;m done.
  10. Code for the future So, first thought that I&apos;d like to share is the importance of is coding for the futures.
  11. 1. So what does this mean? Well, probably three things to us. First, coding for the futures means that every line of code we write will effect the possible paths we can take down the line. So we try our best to implement each template, method, or new lib we write with and understanding of how it will effect the paths we have available down the line.
  12. 2. coding for the future also means when we can&apos;t do it the right way, we try to be deliberate so that our less than pretty decisions (whether a function or a full on service) are properly abstracted away in their own little box. It makes cleanup much easier for us when we actually can get around to it, and it makes everyone working on the project much much happier.
  13. 3. thirdly, and perhaps most importantly, coding for the futures means that whenever we make a larger architectural decision, whether its a RESTful route path, or a decision to use a new library, we take the time to figure out how that decision will effect where we want our product to be in the foreseeable future. and i&apos;m not talking about next month, but the next year. this saves us time down the line when we need to move quickly.
  14. so I know that these seem like basic ideas, but its amazing how often I find my own code completely tangled, or realize later on that i made an architectural decision without considering the long term effect on our product.
  15. a great, relevant example on the micro scale from my own code is failing to abstract away the FB SDK. Is it possible that at some point in the future we’ll not have the FB js sdk available in the DOM? If so, then this is suddenly really unmaintanable code. Better yet, what if at some point in the future we decide to serve the user object off of our own servers?
  16. For about 4 months, our code base has referring to the FB javascript sdk directly. Now, that really sucks when a method disappears or doesn&apos;t return the way you expect it to, or when you decide you want to fire that graph call differently. so we abstract this stuff away.
  17. and then, down the line, this helps us when we have to change the underlying methods. i know this is basic stuff, but it really happens all the time that we fail to do this.
  18. So that&apos;s just a really short term example of coding for the futures. a good example of thinking for the long term might be decisions we made when we first built to the social reader
  19. when we first architected the social reader about a year ago, we decided to go with a single page javascript implementation of Social Reader. so this might seem really obvious now, but a year ago we couldn&apos;t even implement the features that a single page app would offer like hash routing (have you tried hash routing in facebook&apos;s canvas? its not pretty).
  20. but we had a sense at the time about where we wanted to be in a year, so we went with a stack that would close off the fewest options.
  21. about a year later it allowed us to move really fast on mobile: conceiving, designing, coding and shipping the mobile app in about 6 weeks.
  22. so the first thing i want to leave you with is the idea of coding for the futures. it should be a different take on a well worn concept, the idea of trying to see the short term and long term possible implementations of your product and make sure to close off as few of those options as possible with every decisions you make.
  23. Mobile second The second concept that we sorta like to toss around is the idea of mobile second.
  24. So this one might just be a way for us to feel better after having spent months building a web app only to have everyone start talking about mobile first.
  25. On the other hand, I think that we learned a lot building a web app first, and I think it has helped us to think about our development cycle in different way and how our product as a whole will grow and change over time. also, i understand that we&apos;re here for a mobile hack, so bear with me here.
  26. 1. So what does mobile second mean to us? First off, building mobile second means understanding that mobile and web and native and desktop and whatever else we are on are all facets of the same product, and its a business decision for us to choose one or another to develop for first. We had the most potential users on the web, so we concentrated our resources there when we first built the Social Reader.
  27. 2. For us, mobile second also means that it is an engineering imperative that we recognize that we will eventually be developing for all platforms. its not mobile first, its really multiplatform first. at any one point we are talking about mobile, tablet, desktop, full web, set top box, game console, etc.. so when we built social reader, we started with an architecture that would serve multiplatform as best as possible from the get-go, and whenever we make an architectural decision, we try to consider how all our possible implementations will be effected. This definitely slows us down, but again, it makes it much easier to move fast when we need to.
  28. 2. But probably the most important part of our mobile second mantra is meant highlight the cyclical nature of our development, and how we use the development cycle to iterate and make all of our platform implementations better. This really means that we are using whatever platform we develop for next as an opportunity to rethink our core product and experience.
  29. So, this has actually become really important to us from a product and development standpoint, so I want to quickly share how this has effected our process building the mobile web app. When we started with our web product, we were really starting with a blank canvas because no one had really done social reading yet the way we wanted to. because of this, we didn&apos;t have UX convention to follow, or frankly any UX boundaries.
  30. So our initial application in some way reflects this: a lot of our navigation is pivoted around streams of articles like a newspaper. When we released in september we didn&apos;t see nearly the engagement in the personalized front page of our application that we expected. At the same time we were starting our mobile development.
  31. So we used working on mobile second as a chance to rethink what navigation meant in a social reading context.
  32. The result is that our mobile app doesn&apos;t assume that our users will go to their &amp;quot;front page&amp;quot; to get more articles. instead, we put more articles right below whatever they&apos;re reading.
  33. We also did away with article streams navigation and built our nav completely pivoted on friends. And we essentially did away with the front page as a landing place. From one perspective these are pretty drastic moves, but for us, these changes are part of the learning cycle.
  34. Now with our mobile implementation, we&apos;re learning a lot by seeing users interact with this new navigation, and we are rolling these learnings back into the full web
  35. And we&apos;re looking forward to running this cycle again by taking what we learn from the web app and rolling it into mobile and our other platforms down the line.
  36. So that&apos;s really the essence of what we think of with mobile second. The big takeaway here, by the way, isn&apos;t that mobile second is that way to go. that&apos;s just how we did it. the real takeaway is that there should always be a second. use multiplatform as a chance to rethink your core product and experience, and roll what you learn on one platform back into the others.