SlideShare une entreprise Scribd logo
1  sur  20
Evolving an
application
architecture
Garret Fick
Software Architect - ChinaNetCloud
email: garret@ficksworkshop.com
web: ficksworkshop.com
微信: keokje
const person = ;
console.log(person);
const product = ;
console.log(product);
console.log(product.history);
const arch = requirements
.sort(byImportance)
.slice(0, executionCapacity)
.reduce(toArch)
Laravel (Blade templates)
Laravel
Simplest possible Laravel app
Known language
Reuse former code
Fast to setup
Easy to test
Simple deployment
while (curReq === pastReq) {
pastReq = curReq
curReq = getRequirements(Data.now())
}
alert(‘Panic!’)
Angular
Ember
Express
Meteor
React
Vue
Other
Evaluation Matrix
Framework Angular React jQuery …
Type MVC V Library
GitHub Stars 49,421 42,443 39,506
Sponsor Google Facebook N/A
Top 10k 7.3% 0.6% 69.9%
# Amazon Books 414 61 2,353
Initial Release 5 years 3 years 9 years
LinkedIn Hits 288,599 34,239 1,477,898
Laravel (Blade templates)
Laravel
Validate fast
React
const choices = [
‘beAmbitious’,
‘createRefactorBranch’,
‘planToRefixBugFixes’, ...
]
const failure = choices
.filter(c => did(c))
.reduce((a, b) => 1, 0) > 0
Laravel
Keep things working
Laravel (Blade) React
Laravel
Progressively migrate
React
http://theredlist.com/media/database/films/cinema/1930/mutiny-on-the-bounty/023-mutiny-on-the-bounty-theredlist.jpg
Laravel
Series of apps
Easy to integrate
Fast to setup
Component
State
Redux Flux Other
Component
State
Redux Flux Other
1. Requirements define arch decisions
2. Make changes with limited ambition
https://openclipart.org/detail/188792/conversation
“the decisions that are hard to change”
Patterns of Enterprise Application Architecture
Martin Fowler

Contenu connexe

Tendances

API workshop: Deep dive into Java
API workshop: Deep dive into JavaAPI workshop: Deep dive into Java
API workshop: Deep dive into JavaTom Johnson
 
Process-oriented reactive service architecture
Process-oriented reactive service architectureProcess-oriented reactive service architecture
Process-oriented reactive service architecturePeter Hilton
 
Improving the Design of Existing Software
Improving the Design of Existing SoftwareImproving the Design of Existing Software
Improving the Design of Existing SoftwareSteven Smith
 
API Testing with Frisby and Mocha
API Testing with Frisby and MochaAPI Testing with Frisby and Mocha
API Testing with Frisby and MochaLyudmila Anisimova
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemAndres Almiray
 
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...Tom Johnson
 
Introduction to JavaScript for APEX Developers - Module 1: JavaScript Basics
Introduction to JavaScript for APEX Developers - Module 1: JavaScript BasicsIntroduction to JavaScript for APEX Developers - Module 1: JavaScript Basics
Introduction to JavaScript for APEX Developers - Module 1: JavaScript BasicsDaniel McGhan
 
Eclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
Eclipse IDE Tips and Tricks - Lakshmi Priya ShanmugamEclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
Eclipse IDE Tips and Tricks - Lakshmi Priya ShanmugamEclipse Day India
 
Scaling business app development with Play and Scala
Scaling business app development with Play and ScalaScaling business app development with Play and Scala
Scaling business app development with Play and ScalaPeter Hilton
 
Play with Angular JS
Play with Angular JSPlay with Angular JS
Play with Angular JSKnoldus Inc.
 
WinAppDriver Development
WinAppDriver DevelopmentWinAppDriver Development
WinAppDriver DevelopmentJeremy Kao
 
Quick run in with Swagger
Quick run in with SwaggerQuick run in with Swagger
Quick run in with SwaggerMesh Korea
 
Angular JS, A dive to concepts
Angular JS, A dive to conceptsAngular JS, A dive to concepts
Angular JS, A dive to conceptsAbhishek Sur
 
2010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week12010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week1Wolfram Arnold
 
Utilizing JSF Front Ends with Microservices
Utilizing JSF Front Ends with MicroservicesUtilizing JSF Front Ends with Microservices
Utilizing JSF Front Ends with MicroservicesJosh Juneau
 
How to build Sdk? Best practices
How to build Sdk? Best practicesHow to build Sdk? Best practices
How to build Sdk? Best practicesVitali Pekelis
 
Ant - Another Neat Tool
Ant - Another Neat ToolAnt - Another Neat Tool
Ant - Another Neat ToolKanika2885
 

Tendances (20)

API workshop: Deep dive into Java
API workshop: Deep dive into JavaAPI workshop: Deep dive into Java
API workshop: Deep dive into Java
 
Process-oriented reactive service architecture
Process-oriented reactive service architectureProcess-oriented reactive service architecture
Process-oriented reactive service architecture
 
Improving the Design of Existing Software
Improving the Design of Existing SoftwareImproving the Design of Existing Software
Improving the Design of Existing Software
 
API Testing with Frisby and Mocha
API Testing with Frisby and MochaAPI Testing with Frisby and Mocha
API Testing with Frisby and Mocha
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX Ecosystem
 
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
Survival Strategies for API Documentation: Presentation to Southwestern Ontar...
 
Introduction to JavaScript for APEX Developers - Module 1: JavaScript Basics
Introduction to JavaScript for APEX Developers - Module 1: JavaScript BasicsIntroduction to JavaScript for APEX Developers - Module 1: JavaScript Basics
Introduction to JavaScript for APEX Developers - Module 1: JavaScript Basics
 
Eclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
Eclipse IDE Tips and Tricks - Lakshmi Priya ShanmugamEclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
Eclipse IDE Tips and Tricks - Lakshmi Priya Shanmugam
 
Scaling business app development with Play and Scala
Scaling business app development with Play and ScalaScaling business app development with Play and Scala
Scaling business app development with Play and Scala
 
PyUIA 0.3
PyUIA 0.3PyUIA 0.3
PyUIA 0.3
 
Play with Angular JS
Play with Angular JSPlay with Angular JS
Play with Angular JS
 
WinAppDriver Development
WinAppDriver DevelopmentWinAppDriver Development
WinAppDriver Development
 
Introduction to django
Introduction to djangoIntroduction to django
Introduction to django
 
Quick run in with Swagger
Quick run in with SwaggerQuick run in with Swagger
Quick run in with Swagger
 
Angular JS, A dive to concepts
Angular JS, A dive to conceptsAngular JS, A dive to concepts
Angular JS, A dive to concepts
 
2010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week12010-07-19_rails_tdd_week1
2010-07-19_rails_tdd_week1
 
Utilizing JSF Front Ends with Microservices
Utilizing JSF Front Ends with MicroservicesUtilizing JSF Front Ends with Microservices
Utilizing JSF Front Ends with Microservices
 
How to build Sdk? Best practices
How to build Sdk? Best practicesHow to build Sdk? Best practices
How to build Sdk? Best practices
 
Inversion Of Control: Spring.Net Overview
Inversion Of Control: Spring.Net OverviewInversion Of Control: Spring.Net Overview
Inversion Of Control: Spring.Net Overview
 
Ant - Another Neat Tool
Ant - Another Neat ToolAnt - Another Neat Tool
Ant - Another Neat Tool
 

En vedette

Containerd - core container runtime component
Containerd - core container runtime component Containerd - core container runtime component
Containerd - core container runtime component Docker, Inc.
 
Domain Driven Design using Laravel
Domain Driven Design using LaravelDomain Driven Design using Laravel
Domain Driven Design using Laravelwajrcs
 
Services Oriented Architecture with PHP and MySQL
Services Oriented Architecture with PHP and MySQLServices Oriented Architecture with PHP and MySQL
Services Oriented Architecture with PHP and MySQLJoe Stump
 
Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture AppDynamics
 
Software Design Patterns in Laravel by Phill Sparks
Software Design Patterns in Laravel by Phill SparksSoftware Design Patterns in Laravel by Phill Sparks
Software Design Patterns in Laravel by Phill SparksPhill Sparks
 
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...Aaron Saray
 
Docker introduction
Docker introductionDocker introduction
Docker introductiondotCloud
 

En vedette (7)

Containerd - core container runtime component
Containerd - core container runtime component Containerd - core container runtime component
Containerd - core container runtime component
 
Domain Driven Design using Laravel
Domain Driven Design using LaravelDomain Driven Design using Laravel
Domain Driven Design using Laravel
 
Services Oriented Architecture with PHP and MySQL
Services Oriented Architecture with PHP and MySQLServices Oriented Architecture with PHP and MySQL
Services Oriented Architecture with PHP and MySQL
 
Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture
 
Software Design Patterns in Laravel by Phill Sparks
Software Design Patterns in Laravel by Phill SparksSoftware Design Patterns in Laravel by Phill Sparks
Software Design Patterns in Laravel by Phill Sparks
 
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 

Similaire à Evolving an Application Architecture

A Quick Intro to ReactiveX
A Quick Intro to ReactiveXA Quick Intro to ReactiveX
A Quick Intro to ReactiveXTroy Miles
 
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一scalaconfjp
 
4 JVM Web Frameworks
4 JVM Web Frameworks4 JVM Web Frameworks
4 JVM Web FrameworksJoe Kutner
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016Matt Raible
 
Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleRaimonds Simanovskis
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016Matt Raible
 
Alberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsAlberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsScala Italy
 
Scala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSAlberto Paro
 
Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)Michael Rys
 
AKKA and Scala @ Inneractive
AKKA and Scala @ InneractiveAKKA and Scala @ Inneractive
AKKA and Scala @ InneractiveGal Aviv
 
Scala in a wild enterprise
Scala in a wild enterpriseScala in a wild enterprise
Scala in a wild enterpriseRafael Bagmanov
 
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016Matt Raible
 
Sparkling Water Applications Meetup 07.21.15
Sparkling Water Applications Meetup 07.21.15Sparkling Water Applications Meetup 07.21.15
Sparkling Water Applications Meetup 07.21.15Sri Ambati
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016Matt Raible
 
Bringing the Power and Familiarity of .NET, C# and F# to Big Data Processing ...
Bringing the Power and Familiarity of .NET, C# and F# to Big Data Processing ...Bringing the Power and Familiarity of .NET, C# and F# to Big Data Processing ...
Bringing the Power and Familiarity of .NET, C# and F# to Big Data Processing ...Michael Rys
 
從狗熊到英雄 - 我的.Net 6 blazor新體驗
從狗熊到英雄 - 我的.Net 6 blazor新體驗從狗熊到英雄 - 我的.Net 6 blazor新體驗
從狗熊到英雄 - 我的.Net 6 blazor新體驗Ron Zhong
 
Survive JavaScript - Strategies and Tricks
Survive JavaScript - Strategies and TricksSurvive JavaScript - Strategies and Tricks
Survive JavaScript - Strategies and TricksJuho Vepsäläinen
 
Server-side Web development via Ruby on Rails
Server-side Web development via Ruby on RailsServer-side Web development via Ruby on Rails
Server-side Web development via Ruby on Railsg3ppy
 
ChemAxon For Developers
ChemAxon For DevelopersChemAxon For Developers
ChemAxon For DevelopersChemAxon
 

Similaire à Evolving an Application Architecture (20)

A Quick Intro to ReactiveX
A Quick Intro to ReactiveXA Quick Intro to ReactiveX
A Quick Intro to ReactiveX
 
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
 
4 JVM Web Frameworks
4 JVM Web Frameworks4 JVM Web Frameworks
4 JVM Web Frameworks
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
 
Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on Oracle
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
 
Alberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsAlberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.js
 
Scala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJS
 
Full Stack Scala
Full Stack ScalaFull Stack Scala
Full Stack Scala
 
Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)
 
AKKA and Scala @ Inneractive
AKKA and Scala @ InneractiveAKKA and Scala @ Inneractive
AKKA and Scala @ Inneractive
 
Scala in a wild enterprise
Scala in a wild enterpriseScala in a wild enterprise
Scala in a wild enterprise
 
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
 
Sparkling Water Applications Meetup 07.21.15
Sparkling Water Applications Meetup 07.21.15Sparkling Water Applications Meetup 07.21.15
Sparkling Water Applications Meetup 07.21.15
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016
 
Bringing the Power and Familiarity of .NET, C# and F# to Big Data Processing ...
Bringing the Power and Familiarity of .NET, C# and F# to Big Data Processing ...Bringing the Power and Familiarity of .NET, C# and F# to Big Data Processing ...
Bringing the Power and Familiarity of .NET, C# and F# to Big Data Processing ...
 
從狗熊到英雄 - 我的.Net 6 blazor新體驗
從狗熊到英雄 - 我的.Net 6 blazor新體驗從狗熊到英雄 - 我的.Net 6 blazor新體驗
從狗熊到英雄 - 我的.Net 6 blazor新體驗
 
Survive JavaScript - Strategies and Tricks
Survive JavaScript - Strategies and TricksSurvive JavaScript - Strategies and Tricks
Survive JavaScript - Strategies and Tricks
 
Server-side Web development via Ruby on Rails
Server-side Web development via Ruby on RailsServer-side Web development via Ruby on Rails
Server-side Web development via Ruby on Rails
 
ChemAxon For Developers
ChemAxon For DevelopersChemAxon For Developers
ChemAxon For Developers
 

Dernier

%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
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 🔝✔️✔️Delhi Call girls
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedDelhi Call girls
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
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.comFatema Valibhai
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
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 WorkerThousandEyes
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 

Dernier (20)

%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
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
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
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 🔝✔️✔️
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verifiedSector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
Sector 18, Noida Call girls :8448380779 Model Escorts | 100% verified
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
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
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
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
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 

Evolving an Application Architecture

Notes de l'éditeur

  1. First, I want to thank Coco for inviting me. Second, I want to ask her what she was thinking inviting me here. I don’t consider myself a JavaScript developer. In fact, I have spent most of my career in C and C++ land developing CAD tools for electronics. This is basically something like AutoDesk, but for designing electronics. I left that about 4 year ago, founded a company, got funded, then decided I valued sleep more than the company. So here I am now, relatively new to the web landscape. In fact, you might all know more about JavaScript than me. However, I can probably claim one title. So, lets do this by a show of hands. Who here was writing JavaScript in 2015? 2010? 2005? 2000? 1995? Well, I wrote my first JavaScript around 1997, when it was also known as dynamic HTML. Enough about me. If I’m not an expert JS developer, what am I going to talk to you about?
  2. OpsStack – the web application we have been developing at ChinaNetCloud. I know none of you are here to listen to a sales pitch, and I promise you wont get that from me. My goal for this talk is convince you that application architecture should be suited the particular circumstances and not your personal preferences. I hope to convince you by sharing with you how the front end of our web application architecture has evolved over the last year, and most importantly, the decisions that influenced this evolution. But to do that, I think it helps a lot for you to have some basic knowledge about the company and application.
  3. OpsStack is a product of ChinaNetCloud. It’s primary business has been to help companies that don’t have lots of expertise run their website by providing operations as a service. As an operations company, our customers regularly ask us to do work on their website, which means they create tickets. Long before I joined the ChinaNetCloud, it had a customer portal where customers could login, create tickets and view a history of work we had done on their website. About a week after joining the company, I was given the task to rewrite the website and have it done in a few weeks. This project eventually became known as OpsStack. That’s all I’m going to tell you about the product, and that brings me to my first lesson.
  4. Your application architecture is determined by your most important requirements. I do know this is a JavaScript meetup, so what I’m about to say verges on blasphemy. It was already decided before I joined that we would do this re-write in PHP using the Laravel framework. Those were our first requirements. We wanted to show something fast to quickly validate – think fail fast. Although the project was new, it needed to connect to many legacy systems. If we weren’t going to be able to use Laravel or we were going to find fundamental issues where it wouldn’t work with the legacy systems, we wanted to know before we invested lots of time. On the front end, the only objective was to replace a website where customers would login, there was one page where they could create tickets, and everything else was simply viewing data from a database. There was no long term thoughts about what it might become. In addition, we had a small team of PHP developers, none of whom had ever used Laravel and as I found out later, had very little JavaScript experience. Taking all those things together, they pretty precisely defined what the website could and could not look like.
  5. The answer was the simplest possible Laravel application. Starting from scratch, we were able to duplicate most of the functionality of the existing site in a couple weeks. That was good. There were few reasons for this. First, the team didn’t need to learn a new language. In fact, because the original site was also written in PHP, we could reuse pieces of code from it. This architecture was also very easy setup and test. Yes, setting up gulp, webpack or just plain node scripts is pretty easy, but 0 setup is even easier. If you want to make a change and see the effect, you simply reload the page. If you want to debug a problem, it is easy to run the entire code in a debugger or print out extra data to the browser. Deployment was also trivially easy – basically a git pull. As a site that simply displayed data, this architecture worked very well, and I don’t think there is anything inherently wrong with this design. In fact, it isn’t that different from many CMS sites. There were lots of fancy things we could use, and we thought about using a JS framework, but there was no clear problem that it would solve. If you are going to introduce something more complex, So we continued to expand functionality, but mostly stayed within the same model of displaying data from other systems. But then, something changed. We started getting requests for more interactive functionality.
  6. In reality, this wasn’t entirely a surprise and there was no immediate cause for alarm. We simply added more jQuery and more jQuery plugins. This again worked reasonable well, but it also became increasingly clear that we were going to want something more interactive on the front end, but the architecture made it too easy to create a poor user experience and too much work to make a good user experience. In addition, I was pretty dissatisfied with our code re-use on the front end. We used all sorts of tricks to improve re-use on the font end, but there were limits to how far and easily this could go. I was also unhappy with overall cohesion, and the difficulty in writing automated tests. In fact, as far as I know, there are no tools that let you write style checks for Laravel’s blade templates. All combined, as the requirements continued to change, it became clear that we should at least consider a using a JS framework to resolve these issues. Where to start?
  7. Lets do another survey. I’ve listed 6 common JS frameworks here. My question for you is – which framework do you think is the best one for my project? As the architect, I need to make a recommendation about which one I think is the best one for our project. If you can, ask around. But in the end, you are the person responsible for your project. Choosing the wrong technology gives no one else to blame but yourself. That decision shouldn’t be based on emotion. It needs to be data-based.
  8. Right now, JavaScript is probably in the midst of the innovation product life cycle phase an incredible explosion of frameworks and platforms, but this will end and we will eventually see standardization on a few technologies. It is very easy to get caught up in hype about a new technology, only to find that in a few years, it has been abandoned and the community has moved one. As much as possible, you want to remove your emotion from evaluation. I looked at a number of different factors coming. Using Laravel for the backend was non-negotiable, which quickly eliminated a few choices such as Meteor. From there, I looked at a number of different attributes. Some of these might be a bit of a surprise – why would we care about LinkedIn hits. The answer is it tells you something about how easy it will be to hire developers with that experience. Similarly with the number of published books. Published books is a very good sign of adoption. We also looked at Angular’s breaking transition from version 1 to version 2 as risk. Python 3 was first released in 2008 and still many systems ship with only Python 2. Silverlight – even had a contractual agreement from Microsoft, until they changed their strategy Eventually, we selected to write our applications in React, which brings us to architecture number 2 (alpha).
  9. Using React was going to require substantial changes to our application – not simply that we would write most of the front end in JavaScript. It was going to fundamentally change how we can deploy our application code. It meant we would need to actually build the application. If you are going to invest the time and effort to make that work, then you want to make sure that you are going to use it. To avoid that work until we had certainty that we were going to use React, our initial setup was to embed React and JSX directly in the PHP blade templates. This meant including the babel.js library on the page, but it allowed us to validate quickly with minimal investment. The answer was yes to React, but certainly no to using it in this form. Let’s review the scenario. We have a application that is being actively used and it needs to keep moving forward. You have also decided that you are going to make a major architectural change. How do you make this change?
  10. There are a few ways you can approach this. You can create a separate branch and make your changes in that branch until have everything converted and then merge your code back. This is almost doomed to fail because your few developers are not going to be able to develop faster than the rest of the team. You can convince management to have the team drop everything and focus on the re-architecture. But you need management fully committed to the re-architecture or they will get impatient waiting to see something working and eventually declare the project a failure. Your goal is to make the smallest possible change so that you can get your code into production as soon as possible, without causing any regressions. This might mean a big if statement deep in your application code to switch between the two architectures. Normally, we try to avoid this kind of architecture, but in my opinion, this is preferable to the alternatives.
  11. Which brings us to architecture version 2. We end up with a small piece that represents our new React code. Over time, that React piece grows in size while the old piece shrinks.
  12. Perhaps the most important thing here is that we didn’t need any long refactor branch and minimal risk of introducing regressions because the application was in a working state as we were making the architectural change. This is truly a gradual and progressive change. Eventually we will get far enough along that we may decide to migrate all remaining content in a single step. But this will be far easier than if we did that initially because we will have built up the controls and library components we need to do that efficiently.
  13. It was also about this time that I nearly had a mutiny on my hands. This is something you many need to prepare yourself for. In the middle of this re-architecture, the developers were afraid. React was a big change to how they previously had written code. It was in a language that was relatively new to them. And to top it all off, it was with ES6 + JSX syntax. Management was also worried – our velocity had dropped dramatically. Just before National Holiday this year, the team had an impromptu sit-down. The question on their minds was – should we be continuing with React. A majority on the team felt it was simply too hard. Others were interested in the opportunity to learn something new. Management had a similar sit-down, even proposing a date by which we would abandon the effort. It was pretty hard to tell the team to trust me that we would get through it. There was at least one night where I went home wondering if I had made the right choice. Remember how I talked about before about making decisions for the right choices. That helps a lot here. I am pretty confident that if we had taken another approach, one where we didn’t have a site that worked throughout the change or where we had a long period of branching, we probably would have abandoned the effort before is was completed. In the end, we have succeeded and are fully on react now.
  14. Lets get back on track. And talk a look at our applications structure today. In fact, our current architecture looks a lot like the following. We have a series of applications, one per page. Given this history of the application, this shouldn’t be a surprise. Changing to React and a single page application in one stop would be a more ambitious change than simply converting the pages to React. This diagram is still a bit inaccurate because each React application is hosted within a wrapper Laravel template.
  15. This avoided re-writing a bunch of code and we can also share the same menu system as the pages that have not yet been converted. This overall made it much faster to migrate to the new architecture because we didn’t have to touch those pieces.
  16. Ok, it is audience participation time. I’ve told you about my philosophy and guidelines for decision making. And I’ve told you a bit about the project – that we don’t have lots of interaction, but growing. We don’t have a strong team of JS developers – but are learning. We have a strong need to produce things quickly. With that in mind, there are a few common design patterns in React. Can you guess which pattern represents the bulk of our application?
  17. If you guessed we manage state by putting it in the top-level component, then you guessed correctly. We are currently consistently managing component state in a top level component that we call an app and it owns the state. There are exceptions, but I consider each of those to be a bug and we are slowly and progressively removing those so that our application follows this common pattern. As it turns out, I do have a bigger plan for our architecture. In fact, my long term vision is to enable us to become a single page application. Since we cannot stop what we are doing in to make that transition, the transition needs to be gradual. We will introduce this change gradually by implementing common error reporting over the next month and use that to start migrating the application to have a common global state. This will probably be in Redux, but that decision has yet to be made because we have not yet evaluated alternatives. And that change will eventually allow us to migrate towards a single page application.