SlideShare a Scribd company logo
EBAY’S

CUBEJS:

NODE.JS ADOPTION JOURNEY

@
Patrick Steele-Idem
Senior Platform Architect @

@psteeleidem
psteeleidem@ebay.com
github.com/patrick-steele-idem
EBAY HAS EMBRACED NODE.JS…
SO HOW DID WE GET HERE?
BEFORE NODE.JS, JAVA WAS KING
BUT THINGS EVOLVED…
XML + XSLT  JAVA
PROPRIETARY  OPEN SOURCE
ONE LANGUAGE  POLYGLOT
ONE IDE  ANY EDITOR/IDE
HEAVY FRONT-END  LIGHTWEIGHT FRONT-END
CLEARCASE  GIT + GITHUB
SLOW DEVELOPMENT  RAPID DEVELOPMENT
JAVA APIS  SERVICE APIS
“A DECLARATIVE, DATA-RETRIEVAL AND
AGGREGATION GATEWAY FOR QUICKLY
CONSUMING HTTP APIS”
…BUILT USING NODE.JS

WHY NODE.JS?
• Non-blocking I/O
• Single-threaded
NODE.JS IS GREAT,
BUT CAN EBAY USE IT TO
BUILD FRONT-ENDS AS WELL?
WHY NODE.JS FOR THE FRONT-END?
DEVELOPER AGILITY, SCALABILITY AND
PERFORMANCE
―My advice: always bet on JavaScript‖
–Brendan Eich
WHAT IS REQUIRED TO SUPPORT
NODE.JS AT EBAY?
Tracking

Monitoring
Security

Encryption/Decryption

I18n Testing

Deployment

Personalization
Resource Optimization
Release Process
Look & Feel
CSRF

Tools

Scalability

SOAP

REST

Logging

Configuration
Authentication

App Metadata
POLYGLOT CHALLENGE:
HUGE INVESTMENT IN JAVA CODE
Possible Solutions

Pros

Cons

Port code to
JavaScript

• Works for Node.js
• Easy to debug

• Tedious
• Error prone
• What about Python, Ruby,
etc.?

Expose as a service • Polyglot friendly

•
•
•
•

Latency
Monitoring
Network Failures
Infrastructure

Port code to C/C++

• Fast
• Bindings available

• Difficult to debug
• Difficult to maintain

JVM ↔ JavaScript
Bridge

• Polyglot friendly

• Difficult to debug
• Slower startup
• Monitoring multiple VMs
1ST CHOICE: EXPOSE AS A SERVICE
MAXIMIZE CODE REUSE
CALLS CAN BE MADE IN PARALLEL

2ND CHOICE: PORT CODE TO JAVASCRIPT
PERFORMANCE CRITICAL
BEST HANDLED LOCALLY
RUNTIME ARCHITECTURE
Application Layer

Infrastructure Layer
Resource
Server
Distributed
Logging

Tracking
cluster2

Client Layer

…

App Service Layer
Search
…
DEVELOPMENT AND DEPLOYMENT
INFRASTRUCTURE

Source Code

an

initiative
powered by:

npm-delegate
Private npm

Public npm
DESIGN GOAL:
MAXIMIZE DEVELOPER PRODUCTIVITY
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

Small, bite-sized and easy-to-digest
modules
Keep the documentation with the code.
README files for the win
Encourage contributions
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

Avoid “magic”
If developers cannot reason about a system
then they will not be happy or productive.
Do not be a restrictive framework
Developers love options and being able to
use the latest and greatest.
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

+ File Watching
+ Hot Reloading
+ Web Sockets
Live Coding
Instant Gratification
Web Development is Fun Again
CHECKOUT:
• hot-reload https://github.com/philidem/node-hot-reload
• socket.io http://socket.io/
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

NO BUILD STEP FOR RESOURCE
OPTIMIZATION!

Resource
bundling, minification, compilation, externalization—
all at runtime.
Compile Raptor
Templates, LESS, Dust, CoffeeScript, etc.

MORE INFO:
• RaptorJS Optimizer: http://raptorjs.org/optimizer/
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

Command Line Tools
Powered by Rápido
Features
• Module and application lifecycle
• Scaffolding
• IDE/editor independence
• PaaS integration
• Jenkins CI integration
• Command-line auto-completion
• Colorized output

Example:
ecube create app
ecube create page
ecube register
ecube create pool
ecube publish
ecube deploy

CHECKOUT:
Rápido: https://github.com/raptorjs/rapido
DESIGN GOAL:
HIGH PERFORMANCE
DESIGN GOAL: HIGH PERFORMANCE

PERFORMANCE IS GREAT*
• Node.js provides a very low-level programming platform

• V8 is a powerful and fast JavaScript engine
• Node.js can be extended with C/C++ libraries
• Clustering based on OS-level socket sharing
• High performance evented I/O at its core (libuv)

• Single-threaded so no synchronization issues or locks
* The not-so-great:
• Garbage collection is slow
• Memory usage can easily get out of control
DESIGN GOAL: HIGH PERFORMANCE

STREAMING, ASYNCHRONOUS
UI RENDERING
• Why?
•
•
•
•

Start rendering the template immediately
Give the browser a head start
Let the template drive the data
Minimize idle time on the server
DESIGN GOAL: HIGH PERFORMANCE

Traditional

ASYNCHRONOUS UI RENDERING
1. Make service calls
2. Wait for all data to come back
3. Prepare view model

Input

Controller

View Model

Template

HTML

Long Delay

CubeJS

1. Setup data providers
2. Go straight to the
template!

Data Providers

Input

Controller

View Model
No Delay

Template

HTML
DESIGN GOAL: HIGH PERFORMANCE

Raptor Templates
Extensible, high performance, asynchronous template
rendering engine for JavaScript that works on both the
server and the client

MORE

INFO:

Raptor Templates: http://raptorjs.org/raptor-templates/
DESIGN GOAL:
ROBUST
DESIGN GOAL: ROBUST

cluster2
•
•
•
•
•
•
•

Multi-process cluster management
Live production debugging
Monitoring
Idle timeouts
Pause and resume (out-of-traffic GC!)
Process warm-up (coming soon)
Shared cache (coming soon)

MORE INFO:
https://github.com/cubejs/cluster2
DESIGN GOAL: ROBUST

Monitoring Infrastructure

Adapted to eBay Ops
Monitoring Tools
DESIGN GOAL: ROBUST

Automated Testing
• Netmorphic
• Simulate network failures and slowness
• Mocha
• Asynchronous tests
• Code coverage reporting
• JSHint
• Flexible JavaScript static code analysis tool
• Casper + PhantomJS (in-progress)
• Headless browser testing
• Jenkins CI
DESIGN GOAL: ROBUST

Configuration Management
• Per-module configuration
• Real-time configuration updates
• Configuration repository based on MongoDB
ASYNCHRONOUS PROGRAMMING
USING PROMISES
All CubeJS modules have standardized on promises for
asynchronous programming.
Example:
Q()
.then(loadUserPreferences)
.then(performSearch)
.then(renderSearchResults)
.fail(function(error) {
res.end();

console.error("Something went wrong!")
})
ADOPTION:
PULL RATHER

THAN

PUSH

• 10+ customers before CubeJS goes GA
• Several live CubeJS applications running in
production
• Overwhelming attendance of CubeJS Tech Talks
• ―Word of Mouth‖ spreading within eBay
application teams
• No need to push
QUESTIONS?
psteeleidem@ebay.com
@psteeleidem
https://github.com/cubejs
http://raptorjs.org

More Related Content

What's hot (20)

PPTX
Lessons Learned with Unity and WebGL
Lior Tal
 
PPTX
Node js
Fatih Şimşek
 
PPT
Node
Manav Prasad
 
PDF
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Codemotion
 
PDF
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
Nurul Ferdous
 
PDF
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
Fredrik Vraalsen
 
PDF
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Demi Ben-Ari
 
PDF
Pragmatic Monolith-First, easy to decompose, clean architecture
Piotr Pelczar
 
PDF
Best node js course
bestonlinecoursescoupon
 
PDF
Webpack & React Performance in 16+ Steps
Grgur Grisogono
 
PPTX
XPages build automation and testing
mpradny
 
PDF
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Frank van der Linden
 
PDF
Rami Sayar - Node microservices with Docker
Web à Québec
 
PPTX
An XPager's Guide to Process Server-Side Jobs on Domino
Frank van der Linden
 
PPT
QEWD.js: Have your Node.js Cake and Eat It Too
Rob Tweed
 
PDF
REST in Peace. Long live gRPC!
QAware GmbH
 
PPTX
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
E. Camden Fisher
 
PDF
RubyStack: the easiest way to deploy Ruby on Rails
elliando dias
 
PPTX
Dockerize the World
damovsky
 
ODP
Dynamic Languages Web Frameworks Indicthreads 2009
Arun Gupta
 
Lessons Learned with Unity and WebGL
Lior Tal
 
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Codemotion
 
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
Nurul Ferdous
 
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
Fredrik Vraalsen
 
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Demi Ben-Ari
 
Pragmatic Monolith-First, easy to decompose, clean architecture
Piotr Pelczar
 
Best node js course
bestonlinecoursescoupon
 
Webpack & React Performance in 16+ Steps
Grgur Grisogono
 
XPages build automation and testing
mpradny
 
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Frank van der Linden
 
Rami Sayar - Node microservices with Docker
Web à Québec
 
An XPager's Guide to Process Server-Side Jobs on Domino
Frank van der Linden
 
QEWD.js: Have your Node.js Cake and Eat It Too
Rob Tweed
 
REST in Peace. Long live gRPC!
QAware GmbH
 
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
E. Camden Fisher
 
RubyStack: the easiest way to deploy Ruby on Rails
elliando dias
 
Dockerize the World
damovsky
 
Dynamic Languages Web Frameworks Indicthreads 2009
Arun Gupta
 

Similar to CubeJS: eBay’s Node.js Adoption Journey (20)

KEY
Ship It ! with Ruby/ Rails Ecosystem
Yi-Ting Cheng
 
PDF
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Howard Greenberg
 
PPTX
Be faster then rabbits
Vladislav Bauer
 
KEY
Google App Engine Java, Groovy and Gaelyk
Guillaume Laforge
 
PDF
Web Development using Ruby on Rails
Avi Kedar
 
PPTX
Philly CocoaHeads 20160414 - Building Your App SDK With Swift
Jordan Yaker
 
PDF
Netflix oss season 2 episode 1 - meetup Lightning talks
Ruslan Meshenberg
 
PPTX
Building a REST API Microservice for the DevNet API Scavenger Hunt
Ashley Roach
 
PDF
Understand the Trade-offs Using Compilers for Java Applications
C4Media
 
PPTX
Kiss.ts - The Keep It Simple Software Stack for 2017++
Ethan Ram
 
PPTX
Best Practices for Building WordPress Applications
Taylor Lovett
 
KEY
Standardizing and Managing Your Infrastructure - MOSC 2011
Brian Ritchie
 
PPTX
DevNetCreate Workshop - build a react app - React crash course
Cisco DevNet
 
PDF
Play2 Java
XP Conference India
 
PDF
Play 2 Java Framework with TDD
Basav Nagur
 
KEY
Rapid development with Rails
Yi-Ting Cheng
 
KEY
Benefits of an Open environment with Wakanda
Alexandre Morgaut
 
PDF
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Indrajit Poddar
 
PDF
Stackato
Jonas Brømsø
 
PPTX
DevOps and AWS - Code PaLOUsa 2017
James Strong
 
Ship It ! with Ruby/ Rails Ecosystem
Yi-Ting Cheng
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Howard Greenberg
 
Be faster then rabbits
Vladislav Bauer
 
Google App Engine Java, Groovy and Gaelyk
Guillaume Laforge
 
Web Development using Ruby on Rails
Avi Kedar
 
Philly CocoaHeads 20160414 - Building Your App SDK With Swift
Jordan Yaker
 
Netflix oss season 2 episode 1 - meetup Lightning talks
Ruslan Meshenberg
 
Building a REST API Microservice for the DevNet API Scavenger Hunt
Ashley Roach
 
Understand the Trade-offs Using Compilers for Java Applications
C4Media
 
Kiss.ts - The Keep It Simple Software Stack for 2017++
Ethan Ram
 
Best Practices for Building WordPress Applications
Taylor Lovett
 
Standardizing and Managing Your Infrastructure - MOSC 2011
Brian Ritchie
 
DevNetCreate Workshop - build a react app - React crash course
Cisco DevNet
 
Play 2 Java Framework with TDD
Basav Nagur
 
Rapid development with Rails
Yi-Ting Cheng
 
Benefits of an Open environment with Wakanda
Alexandre Morgaut
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Indrajit Poddar
 
Stackato
Jonas Brømsø
 
DevOps and AWS - Code PaLOUsa 2017
James Strong
 
Ad

Recently uploaded (20)

PDF
July Patch Tuesday
Ivanti
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Python basic programing language for automation
DanialHabibi2
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
July Patch Tuesday
Ivanti
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Python basic programing language for automation
DanialHabibi2
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Ad

CubeJS: eBay’s Node.js Adoption Journey

  • 2. Patrick Steele-Idem Senior Platform Architect @ @psteeleidem [email protected] github.com/patrick-steele-idem
  • 3. EBAY HAS EMBRACED NODE.JS… SO HOW DID WE GET HERE?
  • 4. BEFORE NODE.JS, JAVA WAS KING BUT THINGS EVOLVED… XML + XSLT  JAVA PROPRIETARY  OPEN SOURCE ONE LANGUAGE  POLYGLOT ONE IDE  ANY EDITOR/IDE HEAVY FRONT-END  LIGHTWEIGHT FRONT-END CLEARCASE  GIT + GITHUB SLOW DEVELOPMENT  RAPID DEVELOPMENT JAVA APIS  SERVICE APIS
  • 5. “A DECLARATIVE, DATA-RETRIEVAL AND AGGREGATION GATEWAY FOR QUICKLY CONSUMING HTTP APIS” …BUILT USING NODE.JS WHY NODE.JS? • Non-blocking I/O • Single-threaded
  • 6. NODE.JS IS GREAT, BUT CAN EBAY USE IT TO BUILD FRONT-ENDS AS WELL?
  • 7. WHY NODE.JS FOR THE FRONT-END? DEVELOPER AGILITY, SCALABILITY AND PERFORMANCE ―My advice: always bet on JavaScript‖ –Brendan Eich
  • 8. WHAT IS REQUIRED TO SUPPORT NODE.JS AT EBAY? Tracking Monitoring Security Encryption/Decryption I18n Testing Deployment Personalization Resource Optimization Release Process Look & Feel CSRF Tools Scalability SOAP REST Logging Configuration Authentication App Metadata
  • 9. POLYGLOT CHALLENGE: HUGE INVESTMENT IN JAVA CODE Possible Solutions Pros Cons Port code to JavaScript • Works for Node.js • Easy to debug • Tedious • Error prone • What about Python, Ruby, etc.? Expose as a service • Polyglot friendly • • • • Latency Monitoring Network Failures Infrastructure Port code to C/C++ • Fast • Bindings available • Difficult to debug • Difficult to maintain JVM ↔ JavaScript Bridge • Polyglot friendly • Difficult to debug • Slower startup • Monitoring multiple VMs
  • 10. 1ST CHOICE: EXPOSE AS A SERVICE MAXIMIZE CODE REUSE CALLS CAN BE MADE IN PARALLEL 2ND CHOICE: PORT CODE TO JAVASCRIPT PERFORMANCE CRITICAL BEST HANDLED LOCALLY
  • 11. RUNTIME ARCHITECTURE Application Layer Infrastructure Layer Resource Server Distributed Logging Tracking cluster2 Client Layer … App Service Layer Search …
  • 12. DEVELOPMENT AND DEPLOYMENT INFRASTRUCTURE Source Code an initiative powered by: npm-delegate Private npm Public npm
  • 14. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY Small, bite-sized and easy-to-digest modules Keep the documentation with the code. README files for the win Encourage contributions
  • 15. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY Avoid “magic” If developers cannot reason about a system then they will not be happy or productive. Do not be a restrictive framework Developers love options and being able to use the latest and greatest.
  • 16. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY + File Watching + Hot Reloading + Web Sockets Live Coding Instant Gratification Web Development is Fun Again CHECKOUT: • hot-reload https://github.com/philidem/node-hot-reload • socket.io http://socket.io/
  • 17. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY NO BUILD STEP FOR RESOURCE OPTIMIZATION! Resource bundling, minification, compilation, externalization— all at runtime. Compile Raptor Templates, LESS, Dust, CoffeeScript, etc. MORE INFO: • RaptorJS Optimizer: http://raptorjs.org/optimizer/
  • 18. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY Command Line Tools Powered by Rápido Features • Module and application lifecycle • Scaffolding • IDE/editor independence • PaaS integration • Jenkins CI integration • Command-line auto-completion • Colorized output Example: ecube create app ecube create page ecube register ecube create pool ecube publish ecube deploy CHECKOUT: Rápido: https://github.com/raptorjs/rapido
  • 20. DESIGN GOAL: HIGH PERFORMANCE PERFORMANCE IS GREAT* • Node.js provides a very low-level programming platform • V8 is a powerful and fast JavaScript engine • Node.js can be extended with C/C++ libraries • Clustering based on OS-level socket sharing • High performance evented I/O at its core (libuv) • Single-threaded so no synchronization issues or locks * The not-so-great: • Garbage collection is slow • Memory usage can easily get out of control
  • 21. DESIGN GOAL: HIGH PERFORMANCE STREAMING, ASYNCHRONOUS UI RENDERING • Why? • • • • Start rendering the template immediately Give the browser a head start Let the template drive the data Minimize idle time on the server
  • 22. DESIGN GOAL: HIGH PERFORMANCE Traditional ASYNCHRONOUS UI RENDERING 1. Make service calls 2. Wait for all data to come back 3. Prepare view model Input Controller View Model Template HTML Long Delay CubeJS 1. Setup data providers 2. Go straight to the template! Data Providers Input Controller View Model No Delay Template HTML
  • 23. DESIGN GOAL: HIGH PERFORMANCE Raptor Templates Extensible, high performance, asynchronous template rendering engine for JavaScript that works on both the server and the client MORE INFO: Raptor Templates: http://raptorjs.org/raptor-templates/
  • 25. DESIGN GOAL: ROBUST cluster2 • • • • • • • Multi-process cluster management Live production debugging Monitoring Idle timeouts Pause and resume (out-of-traffic GC!) Process warm-up (coming soon) Shared cache (coming soon) MORE INFO: https://github.com/cubejs/cluster2
  • 26. DESIGN GOAL: ROBUST Monitoring Infrastructure Adapted to eBay Ops Monitoring Tools
  • 27. DESIGN GOAL: ROBUST Automated Testing • Netmorphic • Simulate network failures and slowness • Mocha • Asynchronous tests • Code coverage reporting • JSHint • Flexible JavaScript static code analysis tool • Casper + PhantomJS (in-progress) • Headless browser testing • Jenkins CI
  • 28. DESIGN GOAL: ROBUST Configuration Management • Per-module configuration • Real-time configuration updates • Configuration repository based on MongoDB
  • 29. ASYNCHRONOUS PROGRAMMING USING PROMISES All CubeJS modules have standardized on promises for asynchronous programming. Example: Q() .then(loadUserPreferences) .then(performSearch) .then(renderSearchResults) .fail(function(error) { res.end(); console.error("Something went wrong!") })
  • 30. ADOPTION: PULL RATHER THAN PUSH • 10+ customers before CubeJS goes GA • Several live CubeJS applications running in production • Overwhelming attendance of CubeJS Tech Talks • ―Word of Mouth‖ spreading within eBay application teams • No need to push