SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Similaire à 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
 
MSP Kick-off Meeting
MSP Kick-off MeetingMSP Kick-off Meeting
MSP Kick-off MeetingUK MSPs
 
(beta version) KIDS, RUBY, FUN! - Introduction of the Smalruby and Ruby Prog...
(beta version) KIDS, RUBY, FUN! - Introduction of the Smalruby and RubyProg...(beta version) KIDS, RUBY, FUN! - Introduction of the Smalruby and RubyProg...
(beta version) KIDS, RUBY, FUN! - Introduction of the Smalruby and Ruby Prog...宏治 高尾
 

Similaire à 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 ...
 
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
 
(beta version) KIDS, RUBY, FUN! - Introduction of the Smalruby and Ruby Prog...
(beta version) KIDS, RUBY, FUN! - Introduction of the Smalruby and RubyProg...(beta version) KIDS, RUBY, FUN! - Introduction of the Smalruby and RubyProg...
(beta version) KIDS, RUBY, FUN! - Introduction of the Smalruby and Ruby Prog...
 

Plus 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
 

Plus 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
 

Dernier

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
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
 
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
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 

Dernier (20)

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
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
 
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
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 

Mapping Etsy's Front-end