SlideShare une entreprise Scribd logo
1  sur  71
Télécharger pour lire hors ligne
Frontend Monoliths: 

Run if you can!
Jonas Bandi
Freelance Developer &Teacher
jonas.bandi@ivorycode.com
@jbandi
Daniel Wiehl
Developer mtrail GmbH
daniel.wiehl@mtrail.ch
Agenda
From Frontend Monolith to Micro-Frontends
Introducing the SCION Workbench
SCION Workbench Demo
In 2016 the average webpage size passed the size of Doom
https://mobiforge.com/research-analysis/the-web-is-doom
Size does Matter!
Single Page Applications (SPA)
optional ajax request
data
http://thedomain:80/app
http://thedomain:80/api/data/first
http://thedomain:80/app#first
"navigate" to "first"
screen
Start using the applicaton
Browser Serverinitial request
html-shell
assets
load data &
render screen with JS
html-shell is loaded
loading...
appbootstrapping
Network
CostCPU Cost
The Cost of JavaScript
https://medium.com/@addyosmani/the-cost-of-javascript-in-2018-7d8950fbb5d4
For mobile, aim for a JS budget of < 170KB minified/compressed.
Speed == Money
Amazon did tests that showed they would lose 

$1.6 BILLION every year if they slowed down by just
one second.
Walmart Study: For every 100 ms of improvement,
they grew incremental revenue by up to 1%.
... Enterprise Applications?
But ...
https://twitter.com/AdamRackis/status/1071793443175915521
Jake Archibald, Developer Advocate at Google
https://twitter.com/jaffathecake/status/1071079244246237184
For typical enterprise-applications, the
performance of big JavaScript bundles is not
the primary problem:
• network and processing power is typically good
enough
• often there are other performances bottlenecks
(data-fetching, back-end performance ...)
Size still might be a problem ...
History of Enterprise Apps
The Fat Client
Feature 1 Feature 2 Feature 2
Rich Client
Workbench & Monolith
Feature 1 Feature 2 Feature 2
Workbench
Monolithic Server
Feature 1 Feature 2 Feature 3
Microservices
Feature 1 Feature 2 Feature 3
Frontend
API API API
Composition &
Orchestration
happens in the
Client
Rich Client Migrations: 

The Rise of the Frontend Monoliths
API
Workbench
Monolithic Server
Feature 1 Feature 2 Feature 3
Feature 1 Feature 2 Feature 3
Feature 1
API
Feature 1
API
Feature 1
Frontend
App
API
Workbench
Monolithic Server
Feature 1 Feature 2 Feature 3
Feature 1 Feature 2 Feature 3
Feature 1
API
Feature 1
API
Feature 1
SPA Monolith
App
Improvement!
Much Worse!
Beware of the Monolith
Unfortunately, we've seen many teams create front-end
monoliths - a single, large and sprawling browser
application - on top of their back-end services.
-ThoughtWorksTechnology Radar, 2017
App1 App2 App3
API 1 API 2 API 3
SPA Monolith
The real Problem of the
Frontend Monolith:
• Coupling
The real problem of 

the monolith:
Coupling
The frontend is not an implementation
detail. It is a critical part of a microservices
architecture.
StefanTilkov :Wait, what!? Our microservices have actual human users?
https://www.youtube.com/watch?v=pU1gXA0rfwc
https://speakerdeck.com/stilkov/wait-what-our-microservices-have-actual-human-users-1
The goal of microservices:
enable autonomy
• independent & parallel development
• independent deployments/lifecycles
• autonomus operation / runtime isolation
• technology agnostic
Frontend Monolith
... especially in the enterprise.
Size does matter ...
Break the Monolith!
Isolation at development time

Isolation at run time
The first rule of huge 

enterprise applications is: 

You do not build huge enterprise
applications.
The second rule of huge
enterprise applications is:
You do not build huge
enterprise applications.
How?
Micro Frontends:
An architectural style where
independently deliverable frontend
applications are composed into a
greater whole.
?
Micro Frontends
App 1 App 2 App 3
App
API 1 API 2 API 3
SPA Monolith
API 1 API 2 API 3
? ?
The million dollar question:

Modularizing frontend applications.
https://micro-frontends.org/
Build Time Modularization
Code Splitting
https://webpack.js.org/guides/code-splitting/
const	routes:	Routes	=	[	
		{	path:	'customers',	loadChildren:	'./customers/customers.module#CustomersModule'	},	
		{path:	'orders',	loadChildren:	'./orders/orders.module#OrdersModule'	}	]	
@NgModule({	
		imports:	[RouterModule.forChild(routes)],	
...	
}); https://angular.io/guide/lazy-loading-ngmodules
const	LazyComponent	=	React.lazy(()	=>	import('./OtherComponent'));
const	LazyComponent	=	Vue.component('my-comp',	()	=>	import('./Foo.vue')
Angular:
React:
Vue:
❓parallel development
❌ independent lifecycles / deployments
❌ runtime isolation
What we get: ✅ performance at runtime (incremental loading)
Libraries
Libraries can be developed and versioned independently.
Tools like yarn workspaces, lerna, angular cli or Nx nrwl extensions
can help to manage libraries in a mono repo.
✅ parallel development
❌ independent lifecycles / deployments
❌ runtime isolation
What we get:
"dependencies":	{	
"@angular/material":	"^6.0.1",	
"@ngrx/store":	"^4.1.1",	
				"my-common-widgets":	"^3.1.0",	
				"my-feature-1":	"^2.0.1",	
				"my-feature-2":	"^7.1.0",	
...	
}
package.json
Build Time Modularization does not solve the
core problems of the frontend monolith.
- lifecycle / releases are coupled

- no isolation at run time
Runtime Modularization
The Link ...
<a	href="..."	>
... the magical integration pattern of the web!
Microfrontend Flavors: Mini SPAs
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Page Page PageLink Link
You have complete isolation. But jumping between apps is a full page load!
But I need a single SPA!
Microfrontend Flavors: Sinlge SPA
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Shell D0M D0M
https://github.com/CanopyTax/single-spa
All applications live
on the same DOM.
App-communication
happens over the
DOM.
Sinlge SPA: One Document
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Shell
dependencies dependencies dependencies
D0M D0M
Browser can leverage
caching, but for each app
all dependencies have to
be parsed, compiled and
executed.
Each application bundles its
own dependencies.
Therefore applications are
isolated as long as
dependencies don't pollute
the global scope.
Note:Angular comes with Zone.js,
which heavily pollutes the global
scope!
DEMO: Single-Spa
https://single-spa.surge.sh/
Shared DOM
empty
empty
Optimization: Sharing Dependencies
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Shell
shared dependencies
D0M D0M
Analogy: shared
classloader
Sinlge SPA: iframes
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Shell
dependencies dependencies dependencies
D0M D0M Analogy: complete
classloader isolation.
Browser can leverage
caching, but for each app
all dependencies have to
be parsed, compiled and
executed.
iframeiframeiframe
Apps are constrained to the
iframe, which results in
challenges for layout
(resiszing, dialogs, tooltips ...)
There is no Silver Bullet for 

Frontend Modularization
WebComponents ... Rescue?
Web Components
Custom Elements API:
customElements.define('my-component',		class	extends	HTMLElement	{	...	})
WebComponents is a series of browser standards for
creating reusable custom elements:
https://developer.mozilla.org/en-US/docs/Web/Web_Components

https://developer.mozilla.org/en-US/docs/Web/API/Window/customElements
Shadow DOM Encapsulation
HTML
templates
markup that is not initially rendered and can be instantiated.
Custom
elements
JavaScript API to define custom elements that can be used in
html and their behavior
JavaScript
html:
<div>	<my-component></my-component>	<div>	
Browser support:
native: Chrome, Safari
polyfill: Firefox, Edge, IE11
Framework integrations:
Angular elements
Vue & React wrappers
Promise: Frontend Composition
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Shell
C3 C2 C2 C3
Size Does Matter!
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Shell
670KB
430KB
932KB
If a component should be autonomous, 

it must bring it's own dependencies!
WebComponents do not provide
JavaScript isolation!
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Shell The Shadow DOM only
provides encapsulation for
styling not for JavaScript!
There is still one single
global scope per document.
-There is no guarantee that
the components do not
have side-effects on each
other.
C2 C3 C3 C2
WebComponents are global!
Feature 1 Feature 2 Feature 3
App 1
API API API
App 2 App 3
Shell
All applications must use the
same version of a given
component!
C2 C3 C3 C2
Version 1.2
Version 1.1
https://github.com/w3c/webcomponents/issues/716
WebComponents are
registered on the document
by name.
customElements.define(	
'my-component',			
class	extends	HTMLElement	{	...	})
Web Components:The Reality
✅ parallel development (when packaged as a library)
❌ independent lifecycles / deployments
❌ runtime isolation (Shadow DOM only isolates styling)
What we get:
✅ simple consumption/embedding
WebComponents are not the solution!
https://github.com/SchweizerischeBundesbahnen/scion-workbench
DatabaseBackendFrontend
Application 1
Mission 1
Application 3
Mission 3
Application N
Mission N
Application 2
Mission 2
?
DatabaseBackendFrontend
Application 1
Mission 1
Application 3
Mission 3
Application N
Mission N
Application 2
Mission 2
?
Yes No Cancel
https://www.app.com/#/(view.1:person/39//view.2:person/38)?viewgrid=WyJ2aWV3cGFydC4xIiw
Provides a lightweight application frame and
helps to build multi-view Angular applications.
SCION Workbench
https://github.com/SchweizerischeBundesbahnen/scion-workbench
Yes No Cancel
https://www.app.com/#/(view.1:person/39//view.2:person/38)?viewgrid=WyJ2aWV3cGFydC4xIiw
Frontend
Backend
App 1
Frontend
Backend
App 2
Manifest
capabilities
intents
Manifest
capabilities
intents
Frontend
Backend
App 1
Frontend
Backend
App 2
Intent Router
Workbench Application Platform in Host App
Manifest
capabilities
intents
Manifest
capabilities
intents
MANIFEST of App 1
"intent": {
"type": "view",
"qualifier": {
entity: "person",
id: "*"
}
}
MANIFEST of App 2
"capability": {
"type": "view",
"qualifier": {
entity: "person",
id: "*"
},
"properties": {
"path": "/persons/:id",
}
}
<a [wbRouterLink]="{entity: 'person', id: '5’}”>Open Person</a>
SCION Workbench Application Platform
Enables a micro frontend architecture by
integrating content from multiple web applications in a coherent way.
Micro Frontend
Host App
workbench
workbench-application-platform
Workbench Guest API
window.postMessage
https://github.com/SchweizerischeBundesbahnen/scion-workbench
Contact App
Host App
Manifest
capabilities
intents
Contact List Contact View
Save
Contact Create
Popup
create
Manifest
capabilities
intents
Joke App
Joke View
SCION Workbench Application Platform Live Hacking
http://geek-and-poke.com
§ Fast boostrap time
§ Separate document per app instance
§ Limited to iframes boundaries
https://responsivedesign.is/examples/outdated-browsers/
https://github.com/SchweizerischeBundesbahnen/scion-workbench
Questions?
Jonas Bandi
JavaScript / Angular / React
Courses, Consulting, Reviews,
Project-Setup, Proof-of-Concept
jonas.bandi@ivorycode.com
https://github.com/jbandi/voxxed-days-zuerich-2019
Daniel Wiehl
mtrail GmbH
Tech Lead SCION Workbench
daniel.wiehl@mtrail.ch

Contenu connexe

Tendances

AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
Carlo Bonamico
 
Android crash course
Android crash courseAndroid crash course
Android crash course
Showmax Engineering
 

Tendances (20)

Review on React JS
Review on React JSReview on React JS
Review on React JS
 
Top 10 Javascript Frameworks For Easy Web Development
Top 10 Javascript Frameworks For Easy Web DevelopmentTop 10 Javascript Frameworks For Easy Web Development
Top 10 Javascript Frameworks For Easy Web Development
 
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
AngularJS: How to code today with tomorrow tools - Codemotion Milan 2013
 
Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4Testdrive AngularJS with Spring 4
Testdrive AngularJS with Spring 4
 
Why does .net maui deserve your attention if you’re planning to use xamarin
Why does .net maui deserve your attention if you’re planning to use xamarin  Why does .net maui deserve your attention if you’re planning to use xamarin
Why does .net maui deserve your attention if you’re planning to use xamarin
 
Web Application Security Reloaded for the HTML5 era
Web Application Security Reloaded for the HTML5 eraWeb Application Security Reloaded for the HTML5 era
Web Application Security Reloaded for the HTML5 era
 
Know the difference - Angular.js vs Node.js
Know the difference - Angular.js vs Node.jsKnow the difference - Angular.js vs Node.js
Know the difference - Angular.js vs Node.js
 
AngularJS - A Powerful Framework For Web Applications
AngularJS - A Powerful Framework For Web ApplicationsAngularJS - A Powerful Framework For Web Applications
AngularJS - A Powerful Framework For Web Applications
 
Reactjs Basics
Reactjs BasicsReactjs Basics
Reactjs Basics
 
How backbone.js is different from ember.js?
How backbone.js is different from ember.js?How backbone.js is different from ember.js?
How backbone.js is different from ember.js?
 
React js vs angularjs which framework to choose in 2022_
React js vs angularjs  which framework to choose in 2022_React js vs angularjs  which framework to choose in 2022_
React js vs angularjs which framework to choose in 2022_
 
Android crash course
Android crash courseAndroid crash course
Android crash course
 
50 common web developer interview questions [2020 updated] [www.full stack....
50 common web developer interview questions [2020 updated]   [www.full stack....50 common web developer interview questions [2020 updated]   [www.full stack....
50 common web developer interview questions [2020 updated] [www.full stack....
 
Angular.js vs node.js how are they different
Angular.js vs node.js  how are they different Angular.js vs node.js  how are they different
Angular.js vs node.js how are they different
 
Top 11 Front-End Web Development Tools To Consider in 2020
 Top 11 Front-End Web Development Tools To Consider in 2020 Top 11 Front-End Web Development Tools To Consider in 2020
Top 11 Front-End Web Development Tools To Consider in 2020
 
Migrating to Angular 4 for Spring Developers
Migrating to Angular 4 for Spring Developers Migrating to Angular 4 for Spring Developers
Migrating to Angular 4 for Spring Developers
 
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
 
The Future Of Web Frameworks
The Future Of Web FrameworksThe Future Of Web Frameworks
The Future Of Web Frameworks
 
Migrating to Angular 5 for Spring Developers
Migrating to Angular 5 for Spring DevelopersMigrating to Angular 5 for Spring Developers
Migrating to Angular 5 for Spring Developers
 
[English version] JavaFX and Web Integration
[English version] JavaFX and Web Integration[English version] JavaFX and Web Integration
[English version] JavaFX and Web Integration
 

Similaire à Frontend Monoliths: Run if you can!

The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - RecifeThe challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
Caridy Patino
 
WebGL games with Minko - Next Game Frontier 2014
WebGL games with Minko - Next Game Frontier 2014WebGL games with Minko - Next Game Frontier 2014
WebGL games with Minko - Next Game Frontier 2014
Minko3D
 
Jose l ugia 6 wunderkinder, momenta
Jose l ugia  6 wunderkinder, momentaJose l ugia  6 wunderkinder, momenta
Jose l ugia 6 wunderkinder, momenta
apps4allru
 

Similaire à Frontend Monoliths: Run if you can! (20)

Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!
 
Micro Front Ends : Divided We Rule by Parth Ghiya - AhmedabadJS
Micro Front Ends : Divided We Rule by Parth Ghiya - AhmedabadJSMicro Front Ends : Divided We Rule by Parth Ghiya - AhmedabadJS
Micro Front Ends : Divided We Rule by Parth Ghiya - AhmedabadJS
 
Shift Remote FRONTEND: Micro Frontend Architecture: A Look Into the Future - ...
Shift Remote FRONTEND: Micro Frontend Architecture: A Look Into the Future - ...Shift Remote FRONTEND: Micro Frontend Architecture: A Look Into the Future - ...
Shift Remote FRONTEND: Micro Frontend Architecture: A Look Into the Future - ...
 
Micro Frontends
Micro FrontendsMicro Frontends
Micro Frontends
 
Micro frontends
Micro frontendsMicro frontends
Micro frontends
 
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - RecifeThe challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
The challenges of building mobile HTML5 applications - FEEC Brazil 2012 - Recife
 
WebGL games with Minko - Next Game Frontier 2014
WebGL games with Minko - Next Game Frontier 2014WebGL games with Minko - Next Game Frontier 2014
WebGL games with Minko - Next Game Frontier 2014
 
Top Cordova Challenges and How to Tackle Them
Top Cordova Challenges and How to Tackle ThemTop Cordova Challenges and How to Tackle Them
Top Cordova Challenges and How to Tackle Them
 
Scaling frontend applications with micro-frontends Presentation.pdf
Scaling frontend applications with micro-frontends Presentation.pdfScaling frontend applications with micro-frontends Presentation.pdf
Scaling frontend applications with micro-frontends Presentation.pdf
 
IRJET- Polymer Javascript
IRJET- Polymer JavascriptIRJET- Polymer Javascript
IRJET- Polymer Javascript
 
Apache Flex and the imperfect Web
Apache Flex and the imperfect WebApache Flex and the imperfect Web
Apache Flex and the imperfect Web
 
Micro Frontends.pptx
Micro Frontends.pptxMicro Frontends.pptx
Micro Frontends.pptx
 
Codename one
Codename oneCodename one
Codename one
 
Mobile Widgets Development
Mobile Widgets DevelopmentMobile Widgets Development
Mobile Widgets Development
 
Inside Mobile Widgets Publish
Inside Mobile Widgets PublishInside Mobile Widgets Publish
Inside Mobile Widgets Publish
 
Jose l ugia 6 wunderkinder, momenta
Jose l ugia  6 wunderkinder, momentaJose l ugia  6 wunderkinder, momenta
Jose l ugia 6 wunderkinder, momenta
 
How to Build a Hybrid App: A Detailed Outline
How to Build a Hybrid App: A Detailed Outline How to Build a Hybrid App: A Detailed Outline
How to Build a Hybrid App: A Detailed Outline
 
Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3
 
Build your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App EngineBuild your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App Engine
 
Intro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin ElementsIntro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin Elements
 

Dernier

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Dernier (20)

The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 

Frontend Monoliths: Run if you can!