(Sandbox)-[:TEACHES]->(GraphDBs)
powered by:
@ryguyrg
Developed Web Apps + APIs for 5 years
Led Google Developer Relations teams for 8 years
Wrote O’Reilly book on OAuth 2.0
WHAT DO THESE
HAVE IN COMMON?!?!
WEB!
Led DevRel teams forGoogle
Developed web apps + APIs
Wrote book on OAuth
HUH!?!
IMPORTANT LIFE LESSON
“DOWNLOAD”IS A BAD WORD.
I SHOULDN’T CURSE
BUT IS IT ACTUALLY BAD?
“DOWNLOAD”STIGMA
?
Agenda
+
Goals
Stakeholders
Risks
Solution:Tech Stack
+Features
Architecture
LessonsLearned
+Next
+
Goals
Stakeholders
Risks
Solution:Tech Stack
+Features
Architecture
+Stakeholders
Risks
Solution: Tech Stack
+Features
Architecture
LessonsLearned
+Next
Architecture
LessonsLearned
+Next
Q & A
GoalsSolution:
Tech Stack+
Features
Fast Onboard Experience
Data Users Care About
Guided Experience
Guided Experience
*even if better than product
Fast Time to First Line of Code
Isolated Environment
+Stakeholders
RisksArchitecture
CEO Wants everyone to use
the Product
Marketing Wants to be able to
reach users
MarketingEngineering
Developer Relations
Developer Relations Wants to be able to
reach users
+Stakeholders
RisksArchitecture
$
$ Fixed CostsMachines ready to serve users
Variable CostsMore machines with demand
Low Data Quality
Low Data QualityNot asking for name, company, country, state, biz email
But OAuth2-provided and derived data may be better quality for many fields
Lower User “Stickiness”
vs Downloads
OperationalNightmares
Operational Nightmares
Server Maintenance and Security patches, outages, memory/CPU management
Scaling Challenges spikes in load, drops in load
Goals
Stakeholders
Solution:Tech Stack
+Features
Backend
EC2 Container Service (ECS)
Backend
AWS Lambda - Serverless
Backend
Backend
Backend
Backend Frontend
Backend Frontend
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlFUbENPRVV4UmtJNFJETkROakpETXpBME5EZzBRelV3UWpNek9UVTVNRFF4TlRKRk56STJOZyJ9.ecnVlLCJpc3MiOiJodHRwczovL25lbzRqLXN5bmMuYXV0aDAuY29tLyIsInN1YiI6Imdvb2dsZS1vYXVMTA2MjQ3MjUyODU3NzMwODYzNDMxIiwiYXVkIjoiRHhobWlGOFRDZXpuSTdYb2kwOFCJleHAiOjE0OTA5MTk5MzYsImlhdCI6MTQ5MDg0NzkzNiwibm9uY2UiOiIzNCJ9.QqZmFbqOTzJKmD7A70UYjeRchn4ME0v3Z7VsTSERrGMN6mi0Lz5vidMUaBzi22Sc6K62z7Du01dV15RnuKs79HrIYe0n0MkP1gO6LM59IxygAuTgO6cWC8xAGiNkcL76cDokYEsGGZiwtueEnuCBSF9K80llIsfR6Je6mgdk05f4z5kYAI2aauyfo4ntwhUY0RxUSP95lKJ9sSBYQBSVpPkuSkxO0vEmiSFN_tDa6A8buxfwLXX8BlJQ7yNMoeOO5COcE1j0h3oqDsjTWyczJ7bli0n6n3XOD3CWSa9zqR2oaIby92TitcZXkGEoP-18o0ZMQOKS7ioj8n1E-Qli0n8bD
JWT
Backend Frontend
JWT
{ "email": "[email protected]", "email_verified": true, "iss": "https://neo4j-sync.auth0.com/", "sub": "google-oauth2|106247252857730863431", "aud": "DxhmiF8TCeznI7Xoi08UyYScLGZnk4ke", "exp": 1490919936, "iat": 1490847936, "nonce": "34"}
Frontend
Frontend
Are We Done with the Tech Stack Yet?!?
Data Providers
{ "email": "[email protected]", "email_verified": true, "name": "Ryan Boyd", "given_name": "Ryan", "family_name": "Boyd", "picture": "https://lh4.googleusercontent.com/-BET-bMzn99g/AAAAAAAAAAI/AAAAAAAAFEc/h2y8oykJ0x8/photo.jpg", "gender": "male", "locale": "en", "updated_at": "2017-03-29T23:22:09.262Z", "id": "google-oauth2|113487456102835830811"}
Data Providers
Data Providers
Data Providers
Data Providers
Data Providers
"organizations": [
{
"isPrimary": true,
"name": "Neo4j",
"startDate": "2015",
"title": "Head of Developer Relations, NA",
"current": true
},
"socialProfiles": [ { "type": "facebook", "typeId": "facebook", "typeName": "Facebook", "url": "https://www.facebook.com/rboyd" }, { "followers": 500, "following": 500, "type": "linkedin", "typeId": "linkedin", "typeName": "LinkedIn", "url": "https://www.linkedin.com/in/ryguyrg", "username": "ryguyrg", "id": "11587745" }
Data Providers
{ "city": { "geoname_id": 5331920, "names": { "en": "Burlingame", } }, "continent": { "code": "NA", "geoname_id": 6255149, "names": { "en": "North America", } }, "country": { "iso_code": "US", "geoname_id": 6252001, "names": { "en": "United States", } }, "location": { "accuracy_radius": 5, "latitude": 37.5671, "longitude": -122.371, "metro_code": 807, "time_zone": "America/Los_Angeles" }, "postal": { "code": "94010" }, "registered_country": { "iso_code": "US", "geoname_id": 6252001, "names": { "en": "United States", } }, "subdivisions": [ { "iso_code": "CA", "geoname_id": 5332921, "names": { "en": "California" } } ], "traits": { "autonomous_system_number": 7922, "autonomous_system_organization": "Comcast Cable Communications, LLC", "domain": "comcast.net", "isp": "Comcast Cable", "organization": "Comcast Cable" }}
Goals
Stakeholders
Solution:Tech Stack
+Features
Social Sign-InLaunched with:Twitter, GitHub, Google
Added after launch:LinkedIn
Code Snippets
“Hidden” Sandboxes
FOLLOWS
FOLLOWS
POSTS
FOLLOWS
USIN
G
USING
USING
USING
TAGS
TAGSTAGS
TAGS
CONTAINS
CONTAINS
MENTIONS
FOLLOWS
POSTS
CONTAINS
CONTAINS
FOLLOWS
MENTIONS
POSTS
FOLLOWS
TAGSC
ONTAINS
CONTAINS
POSTS
CONTAINS
MENTIONS
FOLLOWS
Neo4j
5
Blaine
Mathieu
Buffer
neo4j
Alistair
Jones
Jeffrey
Morris
3
http://buf…
https://t…
anthony
suarez
1
cbbarclay
accessc…
2
Ben
Greenb…
Streaming Twitter Sandbox with OAuth permissions
NGINX Proxy for SSLand those annoying corporate firewalls
Neo4j Browser: https://10-0-1-237-32825.neo4jsandbox.com/
Direct Neo4j HTTP: http://54.197.91.106:32825/browser/
Single Sign On to Neo4j Browser
E-mail Nurturing
Features
Architecture
Lambda
nginx
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
…16
API Gatew
ay
Frontend
EC2 C
ontainer Service
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
…16
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
…16
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
…16
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
…16
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
…16
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
…16
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
neo4j-importer
neo4j-enterprise
…16
nginx
Neo4j Browser Proxy ELB
nginx
Auth0 Identity and Authorization
Neo4j Graph Database
EC2 Autoscaling
CloudFront C
DN
S3 Static Content H
osting
Solution: Tech Stack
+Features
LessonsLearned
+Next
Q & A
QUOTAS :-(
BALANCING LOAD SPIKES SMARTLY
NEEDED PAPERTRAIL TOO
CSS HELL
CODING IS REWARDING
Solution: Tech Stack
+Features
LessonsLearned
+Next
Q & A
More UsecasesData JournalismBYO API Data Enterprise Usecases
From You Too!
Backup and Deploy
Sharing with Colleagues and Friends
Architecture
Q & A