SlideShare a Scribd company logo
Dive into the details of our web applications
Level: Intermediate - Advanced
All slides are available @
slideshare.net/heka1
Andrew Maxwell
About Me:
● GoPro, Inc.
● 10+ years in the industry
● I manage the front-end web-app team
Contact Info:
● Google+: Andrew Maxwell
● LinkedIn: Andrew Maxwell
● Twitter: @amaxwell02
● Github: amaxwell01
● Instagram: amaxwell01
● andrewcmaxwell.com
Gopro Web Applications
GoPro: Case Study
● Goals of our applications
● Development setup
● Coding process
● Problems & solutions
● What’s next?
Goals for our applications
Goals for our applications
1. Follow the Unix philosophy
“Do one thing and do it well”
2. All apps are isolated from each other and are
only connected through the login application
Goals for our applications
3. All Node applications are based off of
our web-base framework
Goals for our applications
4. All apps must run in docker
● Single docker image for all environments (local, QA, staging and production)
● Every deploy gets its own tagged image with code
Goals for our applications
5. All apps MUST be deployed independently
● No app should block one another from being deployed
● Move Fast
Goals for our applications
6. Easy roll backs thanks to every deploy getting its own tagged version
of a docker image
● Send an update notice to our cluster to roll back to the previous tag
● Removing the impact on our customers
Goals for our applications
Goals for our applications
7. Follow rolling release train to ship consistently, but only what’s ready
Development setup
Development setup
Isomorphic App Setup
Start from SCRATCH
● Start a new project
● Clone from web-base to the name of your new project
$git clone [gopro-web-base].git gopro-web-login
Development setup
● Hello World
Development setup
Development setup
Update our configuration files
● app-config.js
● gopro.json
● package.json
● docker-compose.yml
One command to run them all
Development setup
$MAKE
We can get you coding in 10 minutes:
$git clone gopro-web-login
$cd gopro-web-login
$make
Development setup
● $make install
○ Mapped to NPM install
● $make build
○ mapped to gulp build
■ runs webpack with node
● $make lint
○ gulp eslint
● $make test
○ Mapped to gulp test
■ runs Jest / Jasmine unit tests
● $make server
○ node babel.server.js
● $make dev
○ runs make install, make build, make
watch
● $make
○ make dev
All apps run with 7 simple commands:
Development setup
Build Process with Node and Gulp
Development setup
&
Quality and standards in our builds
Development setup
Watch files for changes
Development setup
Coding process
All components are react components
Lint our code
Coding process
Check docker
● Every time we make a change to our server setup, we make sure
that we run our changes locally in docker
$docker-compose run
Coding process
Push the changes up to Github and fires off our build
1. All features get their own branch
2. Circle CI automatically kicks off our build process for the new branch
3. Circle CI creates a tags a new docker image with the built code
4. Each branch can be tested in isolation with a unique sub-domain
Coding process
Create pull requests
1. Create a new PR for the changes
a. Must be a single commit or as little of commits as possible
b. Must include the ticket number as the first part of the commit title
2. Circle CI run’s our build process and adds badges to the Github PR
3. Code is reviewed by team
4. Original developer merges their own code and close the PR
Coding process
Pro’s & Con’s
Pro’s of isomorphic applications:
● One language (JavaScript)
● Shared components
● Faster rendering time
● Less moving parts
● Easy deployments
● Fast development
● Better S.E.O
● Running similar, but not identical, API requests on the server/client
● Unit tests require some HTML to be tested (blurs the line of unit vs E2E test)
● Some routes set in Hapi, some in React Router
● Debugging API requests can be tricky depending on if it is done on the client,
the server, or both
● 2 forms of logging
Con’s of isomorphic applications:
Problems & Solutions
Problems & Solutions:
Debugging API requests on the client / server
Set up better logging using Bunyan and moved to isomorphic fetch
Problems & Solutions:
React Router API changes
Updated web-base and changed how the API was used
Problems & Solutions:
Making reusable components
Made all applications manage state, not the reusable component
Problems & Solutions:
Lib-sass not staying up to date with Node changes
Node.js foundation - All is well again
Problems & Solutions:
30+ second startup times because Babel6 doesn’t play nice with NPM 2
Changed to a new version of Node.js with NPM 3
Problems & Solutions:
Building multiple apps at once and keeping them in sync
Set up Web-base, our internal “desired” collection of frameworks and configuration
Problems & Solutions:
100+ feature based deployments a day, leaving around unused docker images on server
A bi-hourly cleaner to remove unused docker images
What’s next?
1. Continue improving our web-base framework.
2. Improve feature-base branch development to work better with our API’s
3. Create a CLI-tool to help start new projects, create components, add tests, etc.
4. More tests!
Let’s dive into code
Questions?
All slides are available @ slideshare.net/heka1
Thank You!
● https://gopro.com
● https://www.docker.com
● https://nodejs.org/en
● http://hapijs.com
● http://gulpjs.com
● https://github.com/dlmanning/gulp-sass
● http://eslint.org
● https://babeljs.io
● https://facebook.github.io/react
● https://webpack.github.io
● https://github.com/trentm/node-bunyan
Links:

More Related Content

What's hot

Continuous Development Pipeline
Continuous Development PipelineContinuous Development Pipeline
Continuous Development Pipeline
Izzet Mustafaiev
 
CI/CD Pipeline as a Code using Jenkins 2
CI/CD Pipeline as a Code using Jenkins 2CI/CD Pipeline as a Code using Jenkins 2
CI/CD Pipeline as a Code using Jenkins 2
Mayank Patel
 
Jenkins introduction
Jenkins introductionJenkins introduction
Jenkins introduction
Gourav Varma
 
Using Git with WordPress - Presented by Nigel Rodgers.
Using Git with WordPress - Presented by Nigel Rodgers.Using Git with WordPress - Presented by Nigel Rodgers.
Using Git with WordPress - Presented by Nigel Rodgers.
WordCamp Harare
 
Android + jenkins
Android + jenkinsAndroid + jenkins
Android + jenkins
Fred Lin
 
Gradle Show and Tell
Gradle Show and TellGradle Show and Tell
Gradle Show and Tell
Steve Pember
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.org
MarcinStachniuk
 
LinkedIn's Consistent Android Testing Environments Using Gradle
LinkedIn's Consistent Android Testing Environments Using GradleLinkedIn's Consistent Android Testing Environments Using Gradle
LinkedIn's Consistent Android Testing Environments Using Gradle
Drew Hannay
 
Continuous Integration with Bamboo for Salesforce
Continuous Integration with Bamboo for SalesforceContinuous Integration with Bamboo for Salesforce
Continuous Integration with Bamboo for Salesforce
Klea Kolaric
 
Tech Talk on ReactJS
Tech Talk on ReactJSTech Talk on ReactJS
Tech Talk on ReactJS
Atlogys Technical Consulting
 
Docker and Selenoid - Make Autotests Great Again
Docker and Selenoid - Make Autotests Great Again Docker and Selenoid - Make Autotests Great Again
Docker and Selenoid - Make Autotests Great Again
COMAQA.BY
 
Story Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium FrameworkStory Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium Framework
Oleksiy Rezchykov
 
Jenkins
JenkinsJenkins
Itb2018 integrating mvc into legacy
Itb2018   integrating mvc into legacyItb2018   integrating mvc into legacy
Itb2018 integrating mvc into legacy
Ortus Solutions, Corp
 
Branching Strategies For Git and Subversion
Branching Strategies For Git and SubversionBranching Strategies For Git and Subversion
Branching Strategies For Git and Subversion
Elian, I.
 
Automated android testing using jenkins ci
Automated android testing using jenkins ciAutomated android testing using jenkins ci
Automated android testing using jenkins ci
sveinungkb
 
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Edureka!
 
How create react app help in creating a new react applications
How create react app help in creating a new react applications How create react app help in creating a new react applications
How create react app help in creating a new react applications
Concetto Labs
 
EVOLVE'13 | Keynote | Richard Brown
EVOLVE'13 | Keynote | Richard BrownEVOLVE'13 | Keynote | Richard Brown
EVOLVE'13 | Keynote | Richard Brown
Evolve The Adobe Digital Marketing Community
 
Configuration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL PluginConfiguration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL Plugin
Daniel Spilker
 

What's hot (20)

Continuous Development Pipeline
Continuous Development PipelineContinuous Development Pipeline
Continuous Development Pipeline
 
CI/CD Pipeline as a Code using Jenkins 2
CI/CD Pipeline as a Code using Jenkins 2CI/CD Pipeline as a Code using Jenkins 2
CI/CD Pipeline as a Code using Jenkins 2
 
Jenkins introduction
Jenkins introductionJenkins introduction
Jenkins introduction
 
Using Git with WordPress - Presented by Nigel Rodgers.
Using Git with WordPress - Presented by Nigel Rodgers.Using Git with WordPress - Presented by Nigel Rodgers.
Using Git with WordPress - Presented by Nigel Rodgers.
 
Android + jenkins
Android + jenkinsAndroid + jenkins
Android + jenkins
 
Gradle Show and Tell
Gradle Show and TellGradle Show and Tell
Gradle Show and Tell
 
Continuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.orgContinuous Delivery in OSS using Shipkit.org
Continuous Delivery in OSS using Shipkit.org
 
LinkedIn's Consistent Android Testing Environments Using Gradle
LinkedIn's Consistent Android Testing Environments Using GradleLinkedIn's Consistent Android Testing Environments Using Gradle
LinkedIn's Consistent Android Testing Environments Using Gradle
 
Continuous Integration with Bamboo for Salesforce
Continuous Integration with Bamboo for SalesforceContinuous Integration with Bamboo for Salesforce
Continuous Integration with Bamboo for Salesforce
 
Tech Talk on ReactJS
Tech Talk on ReactJSTech Talk on ReactJS
Tech Talk on ReactJS
 
Docker and Selenoid - Make Autotests Great Again
Docker and Selenoid - Make Autotests Great Again Docker and Selenoid - Make Autotests Great Again
Docker and Selenoid - Make Autotests Great Again
 
Story Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium FrameworkStory Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium Framework
 
Jenkins
JenkinsJenkins
Jenkins
 
Itb2018 integrating mvc into legacy
Itb2018   integrating mvc into legacyItb2018   integrating mvc into legacy
Itb2018 integrating mvc into legacy
 
Branching Strategies For Git and Subversion
Branching Strategies For Git and SubversionBranching Strategies For Git and Subversion
Branching Strategies For Git and Subversion
 
Automated android testing using jenkins ci
Automated android testing using jenkins ciAutomated android testing using jenkins ci
Automated android testing using jenkins ci
 
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
 
How create react app help in creating a new react applications
How create react app help in creating a new react applications How create react app help in creating a new react applications
How create react app help in creating a new react applications
 
EVOLVE'13 | Keynote | Richard Brown
EVOLVE'13 | Keynote | Richard BrownEVOLVE'13 | Keynote | Richard Brown
EVOLVE'13 | Keynote | Richard Brown
 
Configuration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL PluginConfiguration as Code: The Job DSL Plugin
Configuration as Code: The Job DSL Plugin
 

Viewers also liked

Gopro Strategic Audit
Gopro Strategic AuditGopro Strategic Audit
Gopro Strategic Audit
Kairi Niinepuu-Mark
 
Gopro case study
Gopro case studyGopro case study
Gopro case study
liamwhitemtb
 
GoPro - Case Study- Most Versatile Camera
GoPro - Case Study- Most Versatile CameraGoPro - Case Study- Most Versatile Camera
GoPro - Case Study- Most Versatile Camera
Saket Toshniwal
 
GoPro: Independent Internet Strategy Analysis
GoPro: Independent Internet Strategy AnalysisGoPro: Independent Internet Strategy Analysis
GoPro: Independent Internet Strategy Analysis
Michelle Lach, MSIMC
 
GoPro & The Future: A Full Digital Strategy
GoPro & The Future: A Full Digital StrategyGoPro & The Future: A Full Digital Strategy
GoPro & The Future: A Full Digital Strategy
Nicole S. Baumer
 
Marketing Proposal Final - GoPro
Marketing Proposal Final - GoProMarketing Proposal Final - GoPro
Marketing Proposal Final - GoPro
Mary Jane Boscia
 
GoPro Investor presentation - August 2016
GoPro Investor presentation - August 2016GoPro Investor presentation - August 2016
GoPro Investor presentation - August 2016
investorsgopro
 
Gopro Presentation
Gopro PresentationGopro Presentation
Gopro Presentation
David Davies
 
Gpro 2016 09-30 er supp slides.final
Gpro 2016 09-30 er supp slides.finalGpro 2016 09-30 er supp slides.final
Gpro 2016 09-30 er supp slides.final
investorsgopro
 
GoPro - UCLA project
GoPro - UCLA projectGoPro - UCLA project
GoPro - UCLA project
Lisandra Maioli
 
Brand management project gopro camera
Brand management project gopro cameraBrand management project gopro camera
Brand management project gopro camera
Hardy Ou
 
Gopro presentation
Gopro presentationGopro presentation
Gopro presentation
Ludovic Jolly
 
GoPro Brand Audit
GoPro Brand AuditGoPro Brand Audit
GoPro Brand Audit
Nicolas Leonard
 

Viewers also liked (13)

Gopro Strategic Audit
Gopro Strategic AuditGopro Strategic Audit
Gopro Strategic Audit
 
Gopro case study
Gopro case studyGopro case study
Gopro case study
 
GoPro - Case Study- Most Versatile Camera
GoPro - Case Study- Most Versatile CameraGoPro - Case Study- Most Versatile Camera
GoPro - Case Study- Most Versatile Camera
 
GoPro: Independent Internet Strategy Analysis
GoPro: Independent Internet Strategy AnalysisGoPro: Independent Internet Strategy Analysis
GoPro: Independent Internet Strategy Analysis
 
GoPro & The Future: A Full Digital Strategy
GoPro & The Future: A Full Digital StrategyGoPro & The Future: A Full Digital Strategy
GoPro & The Future: A Full Digital Strategy
 
Marketing Proposal Final - GoPro
Marketing Proposal Final - GoProMarketing Proposal Final - GoPro
Marketing Proposal Final - GoPro
 
GoPro Investor presentation - August 2016
GoPro Investor presentation - August 2016GoPro Investor presentation - August 2016
GoPro Investor presentation - August 2016
 
Gopro Presentation
Gopro PresentationGopro Presentation
Gopro Presentation
 
Gpro 2016 09-30 er supp slides.final
Gpro 2016 09-30 er supp slides.finalGpro 2016 09-30 er supp slides.final
Gpro 2016 09-30 er supp slides.final
 
GoPro - UCLA project
GoPro - UCLA projectGoPro - UCLA project
GoPro - UCLA project
 
Brand management project gopro camera
Brand management project gopro cameraBrand management project gopro camera
Brand management project gopro camera
 
Gopro presentation
Gopro presentationGopro presentation
Gopro presentation
 
GoPro Brand Audit
GoPro Brand AuditGoPro Brand Audit
GoPro Brand Audit
 

Similar to GoPro, Inc. Case study: Dive into the details of our web applications

Go Pro, Inc. Case Study: Dive into the details of our node.js applications
Go Pro, Inc. Case Study: Dive into the details of our node.js applicationsGo Pro, Inc. Case Study: Dive into the details of our node.js applications
Go Pro, Inc. Case Study: Dive into the details of our node.js applications
Andrew Maxwell
 
Continuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneContinuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOne
ciberkleid
 
Web worker in your angular application
Web worker in your angular applicationWeb worker in your angular application
Web worker in your angular application
Suresh Patidar
 
Continuous Deployment to the cloud
Continuous Deployment to the cloudContinuous Deployment to the cloud
Continuous Deployment to the cloud
VMware Tanzu
 
Django simplified : by weever mbakaya
Django simplified : by weever mbakayaDjango simplified : by weever mbakaya
Django simplified : by weever mbakaya
Mbakaya Kwatukha
 
WebSDK - Switching between service providers
WebSDK - Switching between service providersWebSDK - Switching between service providers
WebSDK - Switching between service providers
Hotstar
 
Android development at mercari 2015
Android development at mercari 2015Android development at mercari 2015
Android development at mercari 2015
Tomoaki Imai
 
Web componenet using angular element
Web componenet using angular elementWeb componenet using angular element
Web componenet using angular element
Himanshu Tamrakar
 
Application depolyment
Application depolymentApplication depolyment
Application depolyment
shriikantL
 
Kentico Connection 2014 Boston Upgrade Like a Pro
Kentico Connection 2014 Boston Upgrade Like a ProKentico Connection 2014 Boston Upgrade Like a Pro
Kentico Connection 2014 Boston Upgrade Like a Pro
Brian McKeiver
 
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
Bruce Pentreath
 
Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development Pipeline
GlobalLogic Ukraine
 
Unit Rebooted – Real World Use Cases and Success Stories
Unit Rebooted – Real World Use Cases and Success StoriesUnit Rebooted – Real World Use Cases and Success Stories
Unit Rebooted – Real World Use Cases and Success Stories
NGINX, Inc.
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
Michael Lihs
 
varun JENKINS.pptx
varun JENKINS.pptxvarun JENKINS.pptx
varun JENKINS.pptx
VgPolampalli
 
PhoneGap Day EU 2017: Hybrid Ember Apps
PhoneGap Day EU 2017: Hybrid Ember AppsPhoneGap Day EU 2017: Hybrid Ember Apps
PhoneGap Day EU 2017: Hybrid Ember Apps
Alex Blom
 
Isomorphic React Applications: Performance And Scalability
Isomorphic React Applications: Performance And ScalabilityIsomorphic React Applications: Performance And Scalability
Isomorphic React Applications: Performance And Scalability
Denis Izmaylov
 
High Productivity Web Development Workflow
High Productivity Web Development WorkflowHigh Productivity Web Development Workflow
High Productivity Web Development Workflow
Vũ Nguyễn
 
High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014
Oliver N
 
Building CI_CD for Mobile Development.pptx
Building CI_CD for Mobile Development.pptxBuilding CI_CD for Mobile Development.pptx
Building CI_CD for Mobile Development.pptx
GurzuInc
 

Similar to GoPro, Inc. Case study: Dive into the details of our web applications (20)

Go Pro, Inc. Case Study: Dive into the details of our node.js applications
Go Pro, Inc. Case Study: Dive into the details of our node.js applicationsGo Pro, Inc. Case Study: Dive into the details of our node.js applications
Go Pro, Inc. Case Study: Dive into the details of our node.js applications
 
Continuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOneContinuous Deployment of your Application @SpringOne
Continuous Deployment of your Application @SpringOne
 
Web worker in your angular application
Web worker in your angular applicationWeb worker in your angular application
Web worker in your angular application
 
Continuous Deployment to the cloud
Continuous Deployment to the cloudContinuous Deployment to the cloud
Continuous Deployment to the cloud
 
Django simplified : by weever mbakaya
Django simplified : by weever mbakayaDjango simplified : by weever mbakaya
Django simplified : by weever mbakaya
 
WebSDK - Switching between service providers
WebSDK - Switching between service providersWebSDK - Switching between service providers
WebSDK - Switching between service providers
 
Android development at mercari 2015
Android development at mercari 2015Android development at mercari 2015
Android development at mercari 2015
 
Web componenet using angular element
Web componenet using angular elementWeb componenet using angular element
Web componenet using angular element
 
Application depolyment
Application depolymentApplication depolyment
Application depolyment
 
Kentico Connection 2014 Boston Upgrade Like a Pro
Kentico Connection 2014 Boston Upgrade Like a ProKentico Connection 2014 Boston Upgrade Like a Pro
Kentico Connection 2014 Boston Upgrade Like a Pro
 
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
 
Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development Pipeline
 
Unit Rebooted – Real World Use Cases and Success Stories
Unit Rebooted – Real World Use Cases and Success StoriesUnit Rebooted – Real World Use Cases and Success Stories
Unit Rebooted – Real World Use Cases and Success Stories
 
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source ToolsTYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
TYPO3 Camp Stuttgart 2015 - Continuous Delivery with Open Source Tools
 
varun JENKINS.pptx
varun JENKINS.pptxvarun JENKINS.pptx
varun JENKINS.pptx
 
PhoneGap Day EU 2017: Hybrid Ember Apps
PhoneGap Day EU 2017: Hybrid Ember AppsPhoneGap Day EU 2017: Hybrid Ember Apps
PhoneGap Day EU 2017: Hybrid Ember Apps
 
Isomorphic React Applications: Performance And Scalability
Isomorphic React Applications: Performance And ScalabilityIsomorphic React Applications: Performance And Scalability
Isomorphic React Applications: Performance And Scalability
 
High Productivity Web Development Workflow
High Productivity Web Development WorkflowHigh Productivity Web Development Workflow
High Productivity Web Development Workflow
 
High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014
 
Building CI_CD for Mobile Development.pptx
Building CI_CD for Mobile Development.pptxBuilding CI_CD for Mobile Development.pptx
Building CI_CD for Mobile Development.pptx
 

Recently uploaded

Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdfBaha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
ToXSL Technologies
 
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom KittEnhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Peter Caitens
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
XfilesPro
 
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSISDECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
Tier1 app
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
kalichargn70th171
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
Peter Muessig
 
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
gapen1
 
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
kalichargn70th171
 
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Paul Brebner
 
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
kgyxske
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
ShulagnaSarkar2
 
Preparing Non - Technical Founders for Engaging a Tech Agency
Preparing Non - Technical Founders for Engaging  a  Tech AgencyPreparing Non - Technical Founders for Engaging  a  Tech Agency
Preparing Non - Technical Founders for Engaging a Tech Agency
ISH Technologies
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
Patrick Weigel
 
INTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLES
INTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLESINTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLES
INTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLES
anfaltahir1010
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 

Recently uploaded (20)

Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdfBaha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
 
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom KittEnhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
 
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSISDECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
 
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
 
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
 
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
 
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
 
Preparing Non - Technical Founders for Engaging a Tech Agency
Preparing Non - Technical Founders for Engaging  a  Tech AgencyPreparing Non - Technical Founders for Engaging  a  Tech Agency
Preparing Non - Technical Founders for Engaging a Tech Agency
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
 
INTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLES
INTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLESINTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLES
INTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLES
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 

GoPro, Inc. Case study: Dive into the details of our web applications

  • 1. Dive into the details of our web applications Level: Intermediate - Advanced
  • 2. All slides are available @ slideshare.net/heka1
  • 3. Andrew Maxwell About Me: ● GoPro, Inc. ● 10+ years in the industry ● I manage the front-end web-app team Contact Info: ● Google+: Andrew Maxwell ● LinkedIn: Andrew Maxwell ● Twitter: @amaxwell02 ● Github: amaxwell01 ● Instagram: amaxwell01 ● andrewcmaxwell.com
  • 5. GoPro: Case Study ● Goals of our applications ● Development setup ● Coding process ● Problems & solutions ● What’s next?
  • 6. Goals for our applications
  • 7. Goals for our applications 1. Follow the Unix philosophy
  • 8. “Do one thing and do it well”
  • 9. 2. All apps are isolated from each other and are only connected through the login application Goals for our applications
  • 10. 3. All Node applications are based off of our web-base framework Goals for our applications
  • 11. 4. All apps must run in docker ● Single docker image for all environments (local, QA, staging and production) ● Every deploy gets its own tagged image with code Goals for our applications
  • 12. 5. All apps MUST be deployed independently ● No app should block one another from being deployed ● Move Fast Goals for our applications
  • 13. 6. Easy roll backs thanks to every deploy getting its own tagged version of a docker image ● Send an update notice to our cluster to roll back to the previous tag ● Removing the impact on our customers Goals for our applications
  • 14. Goals for our applications 7. Follow rolling release train to ship consistently, but only what’s ready
  • 18. ● Start a new project ● Clone from web-base to the name of your new project $git clone [gopro-web-base].git gopro-web-login Development setup
  • 20. Development setup Update our configuration files ● app-config.js ● gopro.json ● package.json ● docker-compose.yml
  • 21. One command to run them all Development setup $MAKE
  • 22. We can get you coding in 10 minutes: $git clone gopro-web-login $cd gopro-web-login $make Development setup
  • 23. ● $make install ○ Mapped to NPM install ● $make build ○ mapped to gulp build ■ runs webpack with node ● $make lint ○ gulp eslint ● $make test ○ Mapped to gulp test ■ runs Jest / Jasmine unit tests ● $make server ○ node babel.server.js ● $make dev ○ runs make install, make build, make watch ● $make ○ make dev All apps run with 7 simple commands: Development setup
  • 24. Build Process with Node and Gulp Development setup &
  • 25. Quality and standards in our builds Development setup
  • 26. Watch files for changes Development setup
  • 28. All components are react components
  • 30. Check docker ● Every time we make a change to our server setup, we make sure that we run our changes locally in docker $docker-compose run Coding process
  • 31. Push the changes up to Github and fires off our build 1. All features get their own branch 2. Circle CI automatically kicks off our build process for the new branch 3. Circle CI creates a tags a new docker image with the built code 4. Each branch can be tested in isolation with a unique sub-domain Coding process
  • 32. Create pull requests 1. Create a new PR for the changes a. Must be a single commit or as little of commits as possible b. Must include the ticket number as the first part of the commit title 2. Circle CI run’s our build process and adds badges to the Github PR 3. Code is reviewed by team 4. Original developer merges their own code and close the PR Coding process
  • 33.
  • 35. Pro’s of isomorphic applications: ● One language (JavaScript) ● Shared components ● Faster rendering time ● Less moving parts ● Easy deployments ● Fast development ● Better S.E.O
  • 36. ● Running similar, but not identical, API requests on the server/client ● Unit tests require some HTML to be tested (blurs the line of unit vs E2E test) ● Some routes set in Hapi, some in React Router ● Debugging API requests can be tricky depending on if it is done on the client, the server, or both ● 2 forms of logging Con’s of isomorphic applications:
  • 38. Problems & Solutions: Debugging API requests on the client / server Set up better logging using Bunyan and moved to isomorphic fetch
  • 39. Problems & Solutions: React Router API changes Updated web-base and changed how the API was used
  • 40. Problems & Solutions: Making reusable components Made all applications manage state, not the reusable component
  • 41. Problems & Solutions: Lib-sass not staying up to date with Node changes Node.js foundation - All is well again
  • 42. Problems & Solutions: 30+ second startup times because Babel6 doesn’t play nice with NPM 2 Changed to a new version of Node.js with NPM 3
  • 43. Problems & Solutions: Building multiple apps at once and keeping them in sync Set up Web-base, our internal “desired” collection of frameworks and configuration
  • 44. Problems & Solutions: 100+ feature based deployments a day, leaving around unused docker images on server A bi-hourly cleaner to remove unused docker images
  • 45. What’s next? 1. Continue improving our web-base framework. 2. Improve feature-base branch development to work better with our API’s 3. Create a CLI-tool to help start new projects, create components, add tests, etc. 4. More tests!
  • 47. Questions? All slides are available @ slideshare.net/heka1 Thank You!
  • 48. ● https://gopro.com ● https://www.docker.com ● https://nodejs.org/en ● http://hapijs.com ● http://gulpjs.com ● https://github.com/dlmanning/gulp-sass ● http://eslint.org ● https://babeljs.io ● https://facebook.github.io/react ● https://webpack.github.io ● https://github.com/trentm/node-bunyan Links: