SlideShare uma empresa Scribd logo
1 de 121
Friday, March 7, 14
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/javascript-compiler-deploy
Presented at QCon London
www.qconlondon.com
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Mapping Etsy’s Frontend
Tools and Techniques for
Managing Complexity at Scale
@danielespeset
Friday, March 7, 14
@danielespeset
Seth Walker
Allison McKnight Jonathan Klein
@sethwalker
@aemcknig @jonathanklein
Daniel Espeset
@danielespeset
Brought to you by
Friday, March 7, 14
@danielespeset
Etsy
Friday, March 7, 14
@danielespeset
A global marketplace for
buying and selling unique goods.
Etsy
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
roughly
180 engineers
Friday, March 7, 14
@danielespeset
50 deploys a day
Friday, March 7, 14
@danielespeset
Deployinator
IRC Push Queue
Friday, March 7, 14
@danielespeset
Anybody can touch anything.
Friday, March 7, 14
@danielespeset
Anybody can touch anything.
try not to break the site
Friday, March 7, 14
@danielespeset
Continuous
Experimentation
Friday, March 7, 14
@danielespeset
Engineers own their code
through the entire stack.
Friday, March 7, 14
@danielespeset
Bootcamps
Friday, March 7, 14
@danielespeset
Our frontend is made up of
300
different “pages”
Friday, March 7, 14
@danielespeset
At any given time we
may be running dozens
of experiments per page
Friday, March 7, 14
@danielespeset
2
12
4,096=
Friday, March 7, 14
@danielespeset
2
12
300 = 1,228,800x
Friday, March 7, 14
@danielespeset
OMG, how do actually
you do anything?
Friday, March 7, 14
@danielespeset
12 month growth of CSS code
last year
992 files
197,812 lines
last week
1,653 files (1.67x)
319,152 lines (1.61x)
Friday, March 7, 14
@danielespeset
12 month growth of JavaScript code
last year
1,451 files
425,915 lines
last week
2,394 files (1.65x)
639,484 lines (1.5x)
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
sup?
Friday, March 7, 14
@danielespeset
html * #buttons button.button {
modules/buttons.css
Friday, March 7, 14
@danielespeset
html * #buttons button.button {
wtf?
modules/buttons.css
Friday, March 7, 14
@danielespeset
$css/> grep “@import modules/buttons”
Friday, March 7, 14
@danielespeset
$css/> grep “@import modules/buttons”
a/browse.css
a/taxeditor.css
a/taxonomies.css
a/weddings.css
b/modules-responsive.css
b/modules.css
a/orders/refund.css
a/scout/scout.css
c/account/credit-card.css
c/bill/autobilling.css
c/bill/index.css
c/bill/payments.css
c/shop/registration/billing.css
Friday, March 7, 14
@danielespeset
$css/> for ... grep “@import $1” ...
a/browse.css
a/taxeditor.css
a/taxonomies.css
a/weddings.css
b/modules-responsive.css
b/modules.css
a/orders/refund.css
a/scout/scout.css
c/account/credit-card.css
c/bill/autobilling.css
c/bill/index.css
c/bill/payments.css
c/shop/registration/billing.css
base-responsive
base
base_after_inline
Friday, March 7, 14
@danielespeset
$css/> for ... grep “@import $1” ...
a/browse.css
a/taxeditor.css
a/taxonomies.css
a/weddings.css
b/modules-responsive.css
b/modules.css
a/orders/refund.css
a/scout/scout.css
c/account/credit-card.css
c/bill/autobilling.css
c/bill/index.css
c/bill/payments.css
c/shop/registration/billing.css
/base-responsive
/base
/base_after_inline
c/template_editor
c/mini
a/scout/dashboard
Friday, March 7, 14
@danielespeset
$templates/> for ... grep “{% css=$1” ...
a/browse.css
a/taxeditor.css
a/taxonomies.css
a/weddings.css
b/modules-responsive.css
b/modules.css
a/orders/refund.css
a/scout/scout.css
c/account/credit-card.css
c/bill/autobilling.css
c/bill/index.css
c/bill/payments.css
c/shop/registration/billing.css
/base-responsive
/base
/base_after_inline
c/template_editor
c/mini
a/scout/dashboard
wholesale/modules/vendor_avatar
wholesale/modules/address_from_array
wholesale/pages/purchase_order/modules/uneditable_fields/payment_method
wholesale/pages/purchase_order/modules/uneditable_fields/payment_terms
wholesale/pages/purchase_order/modules/uneditable_fields/ship_date
wholesale/pages/purchase_order/modules/uneditable_fields/billing_address
wholesale/pages/purchase_order/modules/uneditable_fields/shipping_address
wholesale/pages/purchase_order/modules/product_grid
modules/time_utils
base
Friday, March 7, 14
@danielespeset
$templates/> for ... grep “{% css=$1” ...
a/browse.css
a/taxeditor.css
a/taxonomies.css
a/weddings.css
b/modules-responsive.css
b/modules.css
a/orders/refund.css
a/scout/scout.css
c/account/credit-card.css
c/bill/autobilling.css
c/bill/index.css
c/bill/payments.css
c/shop/registration/billing.css
/base-responsive
/base
/base_after_inline
c/template_editor
c/mini
a/scout/dashboard
wholesale/modules/vendor_avatar
wholesale/modules/address_from_array
wholesale/pages/purchase_order/modules/uneditable_fields/payment_method
wholesale/pages/purchase_order/modules/uneditable_fields/payment_terms
wholesale/pages/purchase_order/modules/uneditable_fields/ship_date
wholesale/pages/purchase_order/modules/uneditable_fields/billing_address
wholesale/pages/purchase_order/modules/uneditable_fields/shipping_address
wholesale/pages/purchase_order/modules/product_grid
modules/time_utils
base
modules/deferred_clientlogger
modules/jquery
modules/async_analytics_init
notice/experiment_notice
modules/locale/dismissible_link
pages/recommendations/friends/v2/modules/gift-ideas-reminder
header
pages/translator/_modules/md5_overlay
modules/breadcrumbs
pages/browse/_modules/footer
footer
Friday, March 7, 14
@danielespeset
$templates/> for ... grep “{% css=$1” ...
a/browse.css
a/taxeditor.css
a/taxonomies.css
a/weddings.css
b/modules-responsive.css
b/modules.css
a/orders/refund.css
a/scout/scout.css
c/account/credit-card.css
c/bill/autobilling.css
c/bill/index.css
c/bill/payments.css
c/shop/registration/billing.css
/base-responsive
/base
/base_after_inline
c/template_editor
c/mini
a/scout/dashboard
wholesale/modules/vendor_avatar
wholesale/modules/address_from_array
wholesale/pages/purchase_order/modules/uneditable_fields/payment_method
wholesale/pages/purchase_order/modules/uneditable_fields/payment_terms
wholesale/pages/purchase_order/modules/uneditable_fields/ship_date
wholesale/pages/purchase_order/modules/uneditable_fields/billing_address
wholesale/pages/purchase_order/modules/uneditable_fields/shipping_address
wholesale/pages/purchase_order/modules/product_grid
modules/time_utils
base
modules/deferred_clientlogger
modules/jquery
modules/async_analytics_init
notice/experiment_notice
modules/locale/dismissible_link
pages/recommendations/friends/v2/modules/gift-ideas-reminder
header
pages/translator/_modules/md5_overlay
modules/breadcrumbs
pages/browse/_modules/footer
footer
Some/Controller/Class.php
Other/Controller/Class.php
Foo/Controller/Class.php
Bar/Controller/Class.php
Baz/Controller/Class.php
Batman/Controller/Class.php
...
Friday, March 7, 14
@danielespeset
$templates/> for ... grep “{% css=$1” ...
a/browse.css
a/taxeditor.css
a/taxonomies.css
a/weddings.css
b/modules-responsive.css
b/modules.css
a/orders/refund.css
a/scout/scout.css
c/account/credit-card.css
c/bill/autobilling.css
c/bill/index.css
c/bill/payments.css
c/shop/registration/billing.css
/base-responsive
/base
/base_after_inline
c/template_editor
c/mini
a/scout/dashboard
wholesale/modules/vendor_avatar
wholesale/modules/address_from_array
wholesale/pages/purchase_order/modules/uneditable_fields/payment_method
wholesale/pages/purchase_order/modules/uneditable_fields/payment_terms
wholesale/pages/purchase_order/modules/uneditable_fields/ship_date
wholesale/pages/purchase_order/modules/uneditable_fields/billing_address
wholesale/pages/purchase_order/modules/uneditable_fields/shipping_address
wholesale/pages/purchase_order/modules/product_grid
modules/time_utils
base
modules/deferred_clientlogger
modules/jquery
modules/async_analytics_init
notice/experiment_notice
modules/locale/dismissible_link
pages/recommendations/friends/v2/modules/gift-ideas-reminder
header
pages/translator/_modules/md5_overlay
modules/breadcrumbs
pages/browse/_modules/footer
footer
Some/Controller/Class.php
Other/Controller/Class.php
Foo/Controller/Class.php
Bar/Controller/Class.php
Baz/Controller/Class.php
Batman/Controller/Class.php
...
htdocs/my_endpoint.php
htdocs/foo.php
htdocs/other_endpoint.php
htdocs/baz/index.php
htdocs/index.php
Friday, March 7, 14
@danielespeset
$templates/> for ... grep “{% css=$1” ...
a/browse.css
a/taxeditor.css
a/taxonomies.css
a/weddings.css
b/modules-responsive.css
b/modules.css
a/orders/refund.css
a/scout/scout.css
c/account/credit-card.css
c/bill/autobilling.css
c/bill/index.css
c/bill/payments.css
c/shop/registration/billing.css
/base-responsive
/base
/base_after_inline
c/template_editor
c/mini
a/scout/dashboard
wholesale/modules/vendor_avatar
wholesale/modules/address_from_array
wholesale/pages/purchase_order/modules/uneditable_fields/payment_method
wholesale/pages/purchase_order/modules/uneditable_fields/payment_terms
wholesale/pages/purchase_order/modules/uneditable_fields/ship_date
wholesale/pages/purchase_order/modules/uneditable_fields/billing_address
wholesale/pages/purchase_order/modules/uneditable_fields/shipping_address
wholesale/pages/purchase_order/modules/product_grid
modules/time_utils
base
modules/deferred_clientlogger
modules/jquery
modules/async_analytics_init
notice/experiment_notice
modules/locale/dismissible_link
pages/recommendations/friends/v2/modules/gift-ideas-reminder
header
pages/translator/_modules/md5_overlay
modules/breadcrumbs
pages/browse/_modules/footer
footer
Some/Controller/Class.php
Other/Controller/Class.php
Foo/Controller/Class.php
Bar/Controller/Class.php
Baz/Controller/Class.php
Batman/Controller/Class.php
...
htdocs/my_endpoint.php
htdocs/foo.php
htdocs/other_endpoint.php
htdocs/baz/index.php
htdocs/index.php
RewriteRule ^(.*)/ve/(.*)$ $1/voluntary-employee/$2 [L,R=301]
RewriteRule ^(.*)/hsa/(.*)$ $1/health-saving-account/$2 [L,R=301]
 
RewriteCond %{REQUEST_FILENAME} !-f # Existing File
RewriteCond %{REQUEST_FILENAME} !-d # Existing Directory
RewriteRule . /index.php [L]
 
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(subdomain.)?domain.tld/.*$ [NC]
RewriteRule ^.*.(bmp|tif|gif|jpg|jpeg|jpe|png)$ - [F]
Friday, March 7, 14
@danielespeset
CC Image courtesy of Mark Skipper (bitterjug) on Flickr
Halp!
Friday, March 7, 14
@danielespeset
Reasoning about our
frontend is hard.
Friday, March 7, 14
@danielespeset
Deleting code is scary.
Friday, March 7, 14
@danielespeset
Testing changes is difficult.
Friday, March 7, 14
@danielespeset
Mental overhead is a
performance problem.
Friday, March 7, 14
@danielespeset
What are our options?
• Static Analysis
• Synthetic Testing
• Access Logs
• Dynamic Analysis
Friday, March 7, 14
@danielespeset
What are our options?
• Static Analysis
• Synthetic Testing
• Access Logs
• Dynamic Analysis
Friday, March 7, 14
@danielespeset
What are our options?
• Static Analysis
• Synthetic Testing
• Access Logs
• Dynamic Analysis
Friday, March 7, 14
@danielespeset
What are our options?
• Static Analysis
• Synthetic Testing
• Access Logs
• Dynamic Analysis
Friday, March 7, 14
@danielespeset
What are our options?
• Static Analysis
• Synthetic Testing
• Access Logs
• Dynamic Analysis
Friday, March 7, 14
@danielespeset
What are our options?
• Static Analysis
• Synthetic Testing
• Access Logs
• Dynamic Analysis
Friday, March 7, 14
Builda
Friday, March 7, 14
@danielespeset
A brief history of JS loading at Etsy
• <script>
Friday, March 7, 14
@danielespeset
A brief history of JS loading at Etsy
• <script>
• Etsy.loader
Friday, March 7, 14
@danielespeset
A brief history of JS loading at Etsy
• <script>
• Etsy.loader
• //= require
Friday, March 7, 14
@danielespeset
Builda
Loading JS in development
assets/js
<script src="foo.js">
builda.php?name=foo.js
processing
Etsy.loader
// require
Friday, March 7, 14
@danielespeset
Building JS in deploys
bin/builda
Builda
Friday, March 7, 14
@danielespeset
Builda
Building JS in deploys
bin/builda
assets/js
dist/js
processing
Etsy.loader
// require
compiled output
Friday, March 7, 14
@danielespeset
Builda
dist/js
Building JS in deploys
bin/builda
assets/js
processing
Etsy.loader
// require
compiled output
Friday, March 7, 14
@danielespeset
Builda
dist/js
Building JS in deploys
bin/builda
assets/js
processing
Etsy.loader
// require
compiled output
Friday, March 7, 14
@danielespeset
Builda
Building JS in deploys
bin/builda
assets/js
dist/js
Minification
Friday, March 7, 14
@danielespeset
bin/builda
assets/jsBuilda
Building JS in deploys
dist/js
Minification
Friday, March 7, 14
@danielespeset
Building JS in deploys
bin/builda
assets/js
dist/js WWW
Builda
Friday, March 7, 14
@danielespeset
A brief history of JS loading at Etsy
• <script>
• Etsy.loader
• //= require
• AMD (requirejs)
Friday, March 7, 14
@danielespeset
Asyncronous
Module
Definition
Friday, March 7, 14
define(function() {
return function Lightsaber(color) {
this.color = color;
};
});
lightsaber.js
Friday, March 7, 14
define(function() {
return function Lightsaber(color) {
this.color = color;
};
});
lightsaber.js
define(['lightsaber'], function(Lightsaber) {
return function Luke() {
this.lightsaber = new Lightsaber('green');
};
});
luke.js
Friday, March 7, 14
define(function() {
return function Lightsaber(color) {
this.color = color;
};
});
lightsaber.js
define(['lightsaber'], function(Lightsaber) {
return function Luke() {
this.lightsaber = new Lightsaber('green');
};
});
luke.js
require(['plot','luke','vader'], function(plot, Luke,
Vader) {
var luke = new Luke(),
vader = new Vader();
plot.exploreFatherIssues(luke, vader);
});
starwars.js
Friday, March 7, 14
@danielespeset
define(function() {
return function Lightsaber(color) {
this.color = color;
};
});
lightsaber.js
define(['lightsaber'], function(Lightsaber) {
return function Luke() {
this.lightsaber = new Lightsaber('green');
};
});
luke.js
require(['plot','luke','vader'], function(plot, Luke, Vader) {
var luke = new Luke(),
vader = new Vader();
plot.exploreFatherIssues(luke, vader);
});
starwars.js
<script type="text/javascript" src="starwars.js"></script>
Builda
HTTP GET starwars.js
Async loading AMD in development
Friday, March 7, 14
@danielespeset
require(['plot','luke','vader'], function(plot, Luke, Vader) {
define(function() {
return function Lightsaber(color) {
this.color = color;
};
});
lightsaber.js
define(['lightsaber'], function(Lightsaber) {
return function Luke() {
this.lightsaber = new Lightsaber('green');
};
});
luke.js
Async loading AMD in development
Builda
uilda
HTTP GET luke.js
Friday, March 7, 14
@danielespeset
define(function() {
return function Lightsaber(color) {
this.color = color;
};
});
lightsaber.js
define(['lightsaber'], function(Lightsaber) {
Builda
HTTP GET lightsaber.js
Async loading AMD in development
Friday, March 7, 14
@danielespeset
Async loading AMD in development
Friday, March 7, 14
Incorporating AMD into
Builda, phase 1
Friday, March 7, 14
@danielespeset
Building JS with AMD in deploys
bin/builda
Builda assets/js
dist/js
r.jsr.jsr.jsr.js
Friday, March 7, 14
define(function() {
return function Lightsaber(color) {
this.color = color;
};
});
lightsaber.js
define(['lightsaber'], function(Lightsaber) {
return function Luke() {
this.lightsaber = new Lightsaber('green');
};
});
luke.js
require(['plot','luke','vader'], function(plot, Luke,
Vader) {
var luke = new Luke(),
vader = new Vader();
plot.exploreFatherIssues(luke, vader);
});
starwars.js
Friday, March 7, 14
// more modules...
starwars.12345678901234.js
define('lightsaber', function() {
return function Lightsaber(color) {
this.color = color;
};
});
define('luke', ['lightsaber'], function(Lightsaber) {
return function Luke() {
this.lightsaber = new Lightsaber('green');
};
});
require(['plot','luke','vader'], function(plot, Luke,
Vader) {
var luke = new Luke(),
vader = new Vader();
plot.exploreFatherIssues(luke, vader);
});
// more modules...
Friday, March 7, 14
This broke dev-prod
environment parity
Friday, March 7, 14
Also it was crazy slow
Friday, March 7, 14
Builda Revised
Friday, March 7, 14
@danielespeset
AKA taking the
A out of AMD
Friday, March 7, 14
@danielespeset
assets/js
dist/js
Building JS in development
Builda
Friday, March 7, 14
@danielespeset
assets/js
Save foo.js
Building JS in development
Buildadist/js
inotify
IN_CLOSE_WRITE
foo.js
"foo": {
"dependency_of": ["bar", "baz"]
}
Friday, March 7, 14
@danielespeset
Builda
assets/js
dist/js
AMD (r.js)
Etsy.loader
// require
foo.js
Building JS in development
Friday, March 7, 14
@danielespeset
Builda
assets/js
dist/js
AMD (r.js)
Etsy.loader
// require
bar.js
Building JS in development
Friday, March 7, 14
@danielespeset
Builda
assets/js
dist/js
AMD (r.js)
Etsy.loader
// require
baz.js
Building JS in development
Friday, March 7, 14
@danielespeset
assets/js
dist/js
Building JS in development
Builda
HTTP GET foo.js
Friday, March 7, 14
@danielespeset
assets/js
dist/js
Building JS in development
Builda
Friday, March 7, 14
Ranger
Friday, March 7, 14
@danielespeset
Jason Huff Aaron Moodie
@jsnhff @aaronmoodie
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
CSS
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
Pages
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
JavaScript
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
Ranger is an API
Lodge is a client
Friday, March 7, 14
@danielespeset
Ranger
Friday, March 7, 14
@danielespeset
Ranger
Friday, March 7, 14
@danielespeset
log host
Ranger
WWW
Friday, March 7, 14
@danielespeset
Ranger
log host
WWW
Friday, March 7, 14
@danielespeset
Ranger
rollup
linter
hinter
escomplex
scp stuff
log host
WWW
Friday, March 7, 14
@danielespeset
Ranger
rollup
linter
hinter
escomplex
scp stuff
log host
WWW
Friday, March 7, 14
@danielespeset
Now we know enough
to surface dead files
with confidence
Friday, March 7, 14
@danielespeset
Finding dead code paths
is still hard
Friday, March 7, 14
Shrinkray
Friday, March 7, 14
@danielespeset
Justin Donato Kelly Norton
@justindo @kellegous
Friday, March 7, 14
@danielespeset
Friday, March 7, 14
@danielespeset
What’s next?
• Adding Templates as a resource
Friday, March 7, 14
@danielespeset
What’s next?
• Adding Templates as a resource
• Shrinkray powered delete button
Friday, March 7, 14
@danielespeset
What’s next?
• Adding Templates as a resource
• Shrinkray powered delete button
• Detecting inefficiently grouped code
Friday, March 7, 14
@danielespeset
What’s next?
• Adding Templates as a resource
• Shrinkray powered delete button
• Detecting inefficiently grouped code
• Feature / User-state asset signatures
Friday, March 7, 14
@danielespeset
What’s next?
• Adding Templates as a resource
• Shrinkray powered delete button
• Detecting inefficiently grouped code
• Feature / User-state asset signatures
• Shrinkray for JavaScript
Friday, March 7, 14
@danielespeset
The frontend is getting more
complex everywhere.
Friday, March 7, 14
@danielespeset
We need new strategies to
manage and understand it.
Friday, March 7, 14
@danielespeset
The browser is part of your
distributed system, not
just a client you support.
Friday, March 7, 14
@danielespeset
The more extensible a tool
the more useful it will be.
Friday, March 7, 14
@danielespeset
Thanks!
codeascraft.com
@codeascraft
etsy.github.io
etsy.com/codeascraft/talks
etsy.com/careers
Friday, March 7, 14
Friday, March 7, 14
Watch the video with slide synchronization on
InfoQ.com!
http://www.infoq.com/presentations/javascript
-compiler-deploy

Mais conteúdo relacionado

Semelhante a Mapping Etsy's Front-end

Brightspace South Carolina Connection Opening Session
Brightspace South Carolina Connection Opening SessionBrightspace South Carolina Connection Opening Session
Brightspace South Carolina Connection Opening SessionD2L Barry
 
Open source delivers great digital experiences
Open source delivers great digital experiencesOpen source delivers great digital experiences
Open source delivers great digital experiencesJeffrey McGuire
 
NativeScript Developer Day Keynote - Todd Anglin & Burke Holland
NativeScript Developer Day Keynote - Todd Anglin & Burke HollandNativeScript Developer Day Keynote - Todd Anglin & Burke Holland
NativeScript Developer Day Keynote - Todd Anglin & Burke HollandBrian Rinaldi
 
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...Galvanize
 
Fullstack JavaScript Developer - E-Degree
Fullstack JavaScript Developer - E-DegreeFullstack JavaScript Developer - E-Degree
Fullstack JavaScript Developer - E-DegreeDineshSingh398
 
How To Structure Your Search Team for Success
How To Structure Your Search Team for SuccessHow To Structure Your Search Team for Success
How To Structure Your Search Team for SuccessOpenSource Connections
 
Engaging your organisation in an intranet rebuild
Engaging your organisation in an intranet rebuildEngaging your organisation in an intranet rebuild
Engaging your organisation in an intranet rebuildRebecca Jackson
 
Internship template for review 1
Internship template for review 1Internship template for review 1
Internship template for review 1Lahari Gowda
 
API-first Architecture Transformation at Etsy
API-first Architecture Transformation at EtsyAPI-first Architecture Transformation at Etsy
API-first Architecture Transformation at EtsyC4Media
 
Massively maintained accessibility: WordPress
Massively maintained accessibility: WordPressMassively maintained accessibility: WordPress
Massively maintained accessibility: WordPressJoseph Dolson
 
Guidance, Code and Education: ScalaCenter and the Scala Community, Heather Mi...
Guidance, Code and Education: ScalaCenter and the Scala Community, Heather Mi...Guidance, Code and Education: ScalaCenter and the Scala Community, Heather Mi...
Guidance, Code and Education: ScalaCenter and the Scala Community, Heather Mi...OW2
 
Adapt Multi-Device Learning Webinar - January 22nd 2014
Adapt Multi-Device Learning Webinar - January 22nd 2014Adapt Multi-Device Learning Webinar - January 22nd 2014
Adapt Multi-Device Learning Webinar - January 22nd 2014Kineo
 
Adapt Webinar on Responsive E-learning | Learning Pool, C&G Kineo, Sponge UK
Adapt Webinar on Responsive E-learning | Learning Pool, C&G Kineo, Sponge UKAdapt Webinar on Responsive E-learning | Learning Pool, C&G Kineo, Sponge UK
Adapt Webinar on Responsive E-learning | Learning Pool, C&G Kineo, Sponge UKLearning Pool Ltd
 
Google Developer Student Clubs - Brand Guide & Event Kit for Leads (goo.gle_g...
Google Developer Student Clubs - Brand Guide & Event Kit for Leads (goo.gle_g...Google Developer Student Clubs - Brand Guide & Event Kit for Leads (goo.gle_g...
Google Developer Student Clubs - Brand Guide & Event Kit for Leads (goo.gle_g...Pawar Singh
 
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...DevDay.org
 
Scaling Pinterest
Scaling PinterestScaling Pinterest
Scaling PinterestC4Media
 
MSP Kick-off Meeting
MSP Kick-off MeetingMSP Kick-off Meeting
MSP Kick-off MeetingUK MSPs
 

Semelhante a Mapping Etsy's Front-end (20)

Brightspace South Carolina Connection Opening Session
Brightspace South Carolina Connection Opening SessionBrightspace South Carolina Connection Opening Session
Brightspace South Carolina Connection Opening Session
 
Philly Tech Fest Publishing
Philly Tech Fest PublishingPhilly Tech Fest Publishing
Philly Tech Fest Publishing
 
Open source delivers great digital experiences
Open source delivers great digital experiencesOpen source delivers great digital experiences
Open source delivers great digital experiences
 
NativeScript Developer Day Keynote - Todd Anglin & Burke Holland
NativeScript Developer Day Keynote - Todd Anglin & Burke HollandNativeScript Developer Day Keynote - Todd Anglin & Burke Holland
NativeScript Developer Day Keynote - Todd Anglin & Burke Holland
 
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
How to Become a Data Scientist – By Ryan Orban, VP of Operations and Expansio...
 
Fullstack JavaScript Developer - E-Degree
Fullstack JavaScript Developer - E-DegreeFullstack JavaScript Developer - E-Degree
Fullstack JavaScript Developer - E-Degree
 
How To Structure Your Search Team for Success
How To Structure Your Search Team for SuccessHow To Structure Your Search Team for Success
How To Structure Your Search Team for Success
 
Engaging your organisation in an intranet rebuild
Engaging your organisation in an intranet rebuildEngaging your organisation in an intranet rebuild
Engaging your organisation in an intranet rebuild
 
Internship template for review 1
Internship template for review 1Internship template for review 1
Internship template for review 1
 
API-first Architecture Transformation at Etsy
API-first Architecture Transformation at EtsyAPI-first Architecture Transformation at Etsy
API-first Architecture Transformation at Etsy
 
Massively maintained accessibility: WordPress
Massively maintained accessibility: WordPressMassively maintained accessibility: WordPress
Massively maintained accessibility: WordPress
 
Guidance, Code and Education: ScalaCenter and the Scala Community, Heather Mi...
Guidance, Code and Education: ScalaCenter and the Scala Community, Heather Mi...Guidance, Code and Education: ScalaCenter and the Scala Community, Heather Mi...
Guidance, Code and Education: ScalaCenter and the Scala Community, Heather Mi...
 
Adapt Multi-Device Learning Webinar - January 22nd 2014
Adapt Multi-Device Learning Webinar - January 22nd 2014Adapt Multi-Device Learning Webinar - January 22nd 2014
Adapt Multi-Device Learning Webinar - January 22nd 2014
 
Adapt Webinar on Responsive E-learning | Learning Pool, C&G Kineo, Sponge UK
Adapt Webinar on Responsive E-learning | Learning Pool, C&G Kineo, Sponge UKAdapt Webinar on Responsive E-learning | Learning Pool, C&G Kineo, Sponge UK
Adapt Webinar on Responsive E-learning | Learning Pool, C&G Kineo, Sponge UK
 
Ws 16
Ws 16Ws 16
Ws 16
 
Google Developer Student Clubs - Brand Guide & Event Kit for Leads (goo.gle_g...
Google Developer Student Clubs - Brand Guide & Event Kit for Leads (goo.gle_g...Google Developer Student Clubs - Brand Guide & Event Kit for Leads (goo.gle_g...
Google Developer Student Clubs - Brand Guide & Event Kit for Leads (goo.gle_g...
 
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
[DevDay2018] Javascript on the Rise - By Trang Tran, Co-founder & Manager at ...
 
Scaling Pinterest
Scaling PinterestScaling Pinterest
Scaling Pinterest
 
ION Hangzhou - Opening Remarks
ION Hangzhou - Opening RemarksION Hangzhou - Opening Remarks
ION Hangzhou - Opening Remarks
 
MSP Kick-off Meeting
MSP Kick-off MeetingMSP Kick-off Meeting
MSP Kick-off Meeting
 

Mais de C4Media

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileC4Media
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020C4Media
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No KeeperC4Media
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like OwnersC4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideC4Media
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDC4Media
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine LearningC4Media
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at SpeedC4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerC4Media
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleC4Media
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeC4Media
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereC4Media
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing ForC4Media
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data EngineeringC4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
 

Mais de C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 

Último

Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
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 WoodJuan lago vázquez
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
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...DianaGray10
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
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 WorkerThousandEyes
 
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 educationjfdjdjcjdnsjd
 
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 FMESafe Software
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 

Último (20)

Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
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
 
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
 
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
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

Mapping Etsy's Front-end