SlideShare a Scribd company logo
About	Me
• Technical	Leader	and	Agile	Coach
• Front-end	Developer	(test	first!)
• Mobile	Developer	(Hybrid	with	Cordova,	iOS,	Android)
• Technology	Enthusiast
• Mentor	@	Airpair.com
What's	Next?
Scotch	Streaming
and	Scaling
11	Feb	2015
www.meetup.com/mobiletea
Agenda
• Monolithic	applications
• Identify	modules	and/or	components
• Distributing	modules	in	your	organization
• RESTful	and	Hypermedia	models	
• Demo
Enterprise
Applications
• Existing	code	base	and	legacy	code
• Short	time	to	market
• Prototype	based
• Lack	of	planning	and	strategy
• Adapting	to	marketing	needs
M/S	Size
Applications
• Unexpected	success	
• Budget	constraints		
• Missing	expertise		
• Lack	of	planning	and	strategy
• Adapting	to	customer	needs
What's	in	Common?
Lack	of	design	iterations	and	separation	of	concerns
monkey	animated	GIF
Major	Problems
• Maintainability	
• Scalability
• Learning	curve
• Difficult	setups
• Complex	release	procedures
• Difficult	to	test
• Integration	nightmares
• Long	build	cycles
Possible	Solutions
• Refactoring	
• Documenting
• Decoupling	
• Move	the	mode	on	the	server
• Add	computation	capabilities	(e.g.	clouds)
• Etc.
No	Escape
eating	animated	GIF
Modules
An	application	module	is	a	class	that	represents	a	business
application	task.	(Oracle)
Components
A	component	is	a	reusable	program	building	block	that	can	be
combined	with	other	components.
That's	Good!
robert	deniro	animated	GIF
Identify	Them
Starting	from	Your
Requirements
Small	and
Decoupled
• Identify	small	and	decoupled	parts	of	your	application
• Try	to	understand	which	are	reusable	across	several	apps
• Iterate	across	your	modules	and/or	components	list	before
implementing	a	new	feature
• Pick-up	the	right	toolset	to	implement	a	specific	set	of	features
• Never	reinvent	the	wheel!
Distribution
Requirements
• A	module/component	should	be	easy	to	install
• Dependencies	should	be	easy	to	manage
• The	features	of	every	module/component	should	be	very	clear
• All	the	releases	of	a	module/component	should	be
always	available	(eventually	dismiss	the	support)
Possible	Solutions
What's	About	my
Privacy?
wtf	animated	GIF
Bower
Use	a	private	git	repository	on	github.com	or	create	your	own	git
server	
{
		"name":	"my-amazing-component",
		"version":	"1.0.0",
		"ignore":	[
				"**/.*",
				"node_modules",
				"bower_components",
				"test",
				"tests"
NPM
Try	the	npmjs.com	enterprise	service	or	create	your	private	npm
server	using	Sinopia	to	create	private	packages
Using	NPM
You	can	then	use	npm	as	usual	but	everything	will	live	into	your
private	repo,	the	only	difference	is	that	you	set	a	different	registry
(actually	you	can	switch	between	them)
$	npm	set	registry	http://your_external_ip:4873
$	npm	adduser
$	npm	publish
Results
• You	can	install	and	uninstall	components	easily
• The	dependencies	management	process	is	automated	(kinda!)
• Every	component/module	can	be	unplugged	from	your
application	and	changed	
• The	source	code	is	better	organized	(components	should	work
also	stand	alone)
• Etc.
What's	Missing?
The	model...
tech	animated	GIF
Abstract	the	Model
• Keep	always	the	model	independent	from	your	client	side
architecture
• JSON	or	XML	are	valid	formats	to	distribute	the	data
• Use	data	adapters	(Backbone,	Ember	Data,	etc.)	to	deal	with	the
model	in	your	client	side	code
Enrich	the	Model
• Don't	deliver	just	data	but	also	business	logic	information	like
related	links
• Use	the	flexibility	of	JSON	or	XML	to	provide	a	structure	to	your
models	
{
		"href":	"http://example.com/api/v1/users/john",
		"type":	"user",
		"head":	{
				"allow":	["GET","PUT","PATCH","DELETE"],
				"related":	{
Deliver	Your	Rules
• Use	the	model	to	explicitly	set	the	rules	to	follow	to
post/put/delete/	information	to	your	system
• Deliver	form	validation	rules	(e.g	regexp)	to	avoid	to	re-build	the
client	if	something	change
• Provide	live	update	information	(e.g.	web	sockets)	to	update
your	application
• Etc.
Always	Avoid
To	define	a	model	that	fits	the	needs	of	a	specific	client	side	library,
it's	a	path	that	is	very	hard	to	undo
Recommendations	
• Try	to	don't	depend	only	on	a	single	client	side	library
• Don't	be	too	lazy,	JavaScript	can	handle	natively	the	tasks
performed	by	external	libriaries
• Keep	the	communication	as	simple	as	possible
• Write	clean	and	testable	code
• Etc.
Components	Scope
• Use	web	components	CSS	scoping	if	your	concern	is	the	look	and
feel	of	components/module
• Use	an	iFrame	to	enclose	your	component	in	a	sandbox
Demo
https://github.com/GiorgioNatili/undoable-architectures
Resources
• http://almostobsolete.net/talks/hypermedia
• http://liquidmedia.org/blog/2011/01/backbone-js-part-1
• http://madhatted.com/2013/3/19/suggested-rest-api-practices
• http://emberjs.com/guides/models/the-rest-adapter
• http://cwbuecheler.com/web/tutorials/2014/restful-web-app-
node-express-mongodb
• https://oncletom.io/2013/live-development-bower-component
• http://tech.pro/tutorial/1308/emberjs-views-and-live-templates-
with-handlebarsjs-part-1
@giorgionatili
#mobiletea	#javascript	#swift	#wearable	#agile	#android	#tdd
Thanks!
Grazie!	Graçias!	Danke!	Merci!	 !	
thanks	animated	GIF
Undoable architectures

More Related Content

Similar to Undoable architectures

LearnFlow Industrial Training for Y.C.C.E Students
LearnFlow Industrial Training for Y.C.C.E StudentsLearnFlow Industrial Training for Y.C.C.E Students
LearnFlow Industrial Training for Y.C.C.E Students
learnflow
 
LearnFlow Industrial Training Program
LearnFlow Industrial Training ProgramLearnFlow Industrial Training Program
LearnFlow Industrial Training Program
learnflow
 
Bridging the Gap: from Data Science to Production
Bridging the Gap: from Data Science to ProductionBridging the Gap: from Data Science to Production
Bridging the Gap: from Data Science to Production
Florian Wilhelm
 
Swati_Gupta_.NET_5.7Years
Swati_Gupta_.NET_5.7YearsSwati_Gupta_.NET_5.7Years
Swati_Gupta_.NET_5.7Years
swati gupta
 
Mobile App Development: Off the-Shelf vs Platform
Mobile App Development: Off the-Shelf vs PlatformMobile App Development: Off the-Shelf vs Platform
Mobile App Development: Off the-Shelf vs Platform
Dipesh Mukerji
 
Introduction To Agile Refresh Savannah July20 2010 V1 4
Introduction To Agile Refresh Savannah July20 2010 V1 4Introduction To Agile Refresh Savannah July20 2010 V1 4
Introduction To Agile Refresh Savannah July20 2010 V1 4
Marvin Heery
 

Similar to Undoable architectures (20)

DerbyDev_ModMonolith_290323.pptx
DerbyDev_ModMonolith_290323.pptxDerbyDev_ModMonolith_290323.pptx
DerbyDev_ModMonolith_290323.pptx
 
LearnFlow Industrial Training for Y.C.C.E Students
LearnFlow Industrial Training for Y.C.C.E StudentsLearnFlow Industrial Training for Y.C.C.E Students
LearnFlow Industrial Training for Y.C.C.E Students
 
LearnFlow Industrial Training Program
LearnFlow Industrial Training ProgramLearnFlow Industrial Training Program
LearnFlow Industrial Training Program
 
JDA: Building an Open Source Center of Excellence
JDA: Building an Open Source Center of ExcellenceJDA: Building an Open Source Center of Excellence
JDA: Building an Open Source Center of Excellence
 
Mastering BDD - Eran Kinsbruner Workshop Quest 2018
Mastering BDD - Eran Kinsbruner Workshop Quest 2018Mastering BDD - Eran Kinsbruner Workshop Quest 2018
Mastering BDD - Eran Kinsbruner Workshop Quest 2018
 
Software Engineering - Trends & Industry Practices
Software Engineering - Trends & Industry PracticesSoftware Engineering - Trends & Industry Practices
Software Engineering - Trends & Industry Practices
 
Introduction to GoLang
Introduction to GoLangIntroduction to GoLang
Introduction to GoLang
 
LearnFlow Industrial Training Program - Y.C.C.E
LearnFlow Industrial Training Program - Y.C.C.ELearnFlow Industrial Training Program - Y.C.C.E
LearnFlow Industrial Training Program - Y.C.C.E
 
Bridging the Gap: from Data Science to Production
Bridging the Gap: from Data Science to ProductionBridging the Gap: from Data Science to Production
Bridging the Gap: from Data Science to Production
 
Industrial Training
Industrial TrainingIndustrial Training
Industrial Training
 
1221 raise expectations_for_the_ always_on_enterprise
1221 raise expectations_for_the_ always_on_enterprise1221 raise expectations_for_the_ always_on_enterprise
1221 raise expectations_for_the_ always_on_enterprise
 
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
Webinar: Ten Ways to Enhance Your Salesforce.com Application in 2013
 
Swati_Gupta_.NET_5.7Years
Swati_Gupta_.NET_5.7YearsSwati_Gupta_.NET_5.7Years
Swati_Gupta_.NET_5.7Years
 
Oracle Forms Modernization Roadmap
Oracle Forms Modernization RoadmapOracle Forms Modernization Roadmap
Oracle Forms Modernization Roadmap
 
Mobile App Development: Off the-Shelf vs Platform
Mobile App Development: Off the-Shelf vs PlatformMobile App Development: Off the-Shelf vs Platform
Mobile App Development: Off the-Shelf vs Platform
 
Automate the sdlc process
Automate the sdlc processAutomate the sdlc process
Automate the sdlc process
 
Introduction To Agile Refresh Savannah July20 2010 V1 4
Introduction To Agile Refresh Savannah July20 2010 V1 4Introduction To Agile Refresh Savannah July20 2010 V1 4
Introduction To Agile Refresh Savannah July20 2010 V1 4
 
Practical Microservice Architecture (edition 2022).pdf
Practical Microservice Architecture (edition 2022).pdfPractical Microservice Architecture (edition 2022).pdf
Practical Microservice Architecture (edition 2022).pdf
 
Lean Solutions – Agile Transformation at the United States Postal Service
Lean Solutions  – Agile Transformation at the United States Postal ServiceLean Solutions  – Agile Transformation at the United States Postal Service
Lean Solutions – Agile Transformation at the United States Postal Service
 
Is Being Agile a Good Thing?
Is Being Agile a Good Thing?Is Being Agile a Good Thing?
Is Being Agile a Good Thing?
 

More from Giorgio Natili

The short path to ecma 6
The short path to ecma 6The short path to ecma 6
The short path to ecma 6
Giorgio Natili
 
WebRTC communication and wearable devices
WebRTC communication and wearable devicesWebRTC communication and wearable devices
WebRTC communication and wearable devices
Giorgio Natili
 
Multithreading development with workers
Multithreading development with workersMultithreading development with workers
Multithreading development with workers
Giorgio Natili
 
WebRTC and Mobile Integration
WebRTC and Mobile IntegrationWebRTC and Mobile Integration
WebRTC and Mobile Integration
Giorgio Natili
 
Develop, test and debug cross platforms apps with PhoneGap
Develop, test and debug cross platforms apps with PhoneGapDevelop, test and debug cross platforms apps with PhoneGap
Develop, test and debug cross platforms apps with PhoneGap
Giorgio Natili
 

More from Giorgio Natili (20)

Driving Assistant Solutions with Android
Driving Assistant Solutions with AndroidDriving Assistant Solutions with Android
Driving Assistant Solutions with Android
 
Isomorphic Reactive Programming
Isomorphic Reactive ProgrammingIsomorphic Reactive Programming
Isomorphic Reactive Programming
 
Service worker API
Service worker APIService worker API
Service worker API
 
The Little Shop of TDD Horrors
The Little Shop of TDD HorrorsThe Little Shop of TDD Horrors
The Little Shop of TDD Horrors
 
I beacon mobile_tea
I beacon mobile_teaI beacon mobile_tea
I beacon mobile_tea
 
Android, getting started
Android, getting startedAndroid, getting started
Android, getting started
 
Clear the UIViewController Mess
Clear the UIViewController MessClear the UIViewController Mess
Clear the UIViewController Mess
 
Big data and mobile
Big data and mobileBig data and mobile
Big data and mobile
 
The short path to ecma 6
The short path to ecma 6The short path to ecma 6
The short path to ecma 6
 
Jasmine 2.0
Jasmine 2.0Jasmine 2.0
Jasmine 2.0
 
Harmonik
HarmonikHarmonik
Harmonik
 
Mobile raspberry pi
Mobile raspberry piMobile raspberry pi
Mobile raspberry pi
 
WebRTC communication and wearable devices
WebRTC communication and wearable devicesWebRTC communication and wearable devices
WebRTC communication and wearable devices
 
Multithreading development with workers
Multithreading development with workersMultithreading development with workers
Multithreading development with workers
 
Ecma6 in 30 minutes
Ecma6 in 30 minutesEcma6 in 30 minutes
Ecma6 in 30 minutes
 
TDD and PhoneGap
TDD and PhoneGapTDD and PhoneGap
TDD and PhoneGap
 
Test first!
Test first!Test first!
Test first!
 
WebRTC and Mobile Integration
WebRTC and Mobile IntegrationWebRTC and Mobile Integration
WebRTC and Mobile Integration
 
Develop, test and debug cross platforms apps with PhoneGap
Develop, test and debug cross platforms apps with PhoneGapDevelop, test and debug cross platforms apps with PhoneGap
Develop, test and debug cross platforms apps with PhoneGap
 
Test first
Test firstTest first
Test first
 

Recently uploaded

AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
Alluxio, Inc.
 

Recently uploaded (20)

In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Breaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdfBreaking the Code : A Guide to WhatsApp Business API.pdf
Breaking the Code : A Guide to WhatsApp Business API.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Studiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting softwareStudiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting software
 
Agnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in KrakówAgnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in Kraków
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 

Undoable architectures