SlideShare a Scribd company logo
LinkedIn Mobile

Lessons from Building
Culture
   Product & Design
Development Background
     Our Choices
        Server
        Client
Cult of Simple
• Fast
  – App Launch
  – Screen to Screen Switch
• Easy
  – Tap Count
• Reliable
  – Don’t Crash
  – Repeatable
Product & Design

It impacts engineering
Websites vs. Applications


 Content Focus      Flow & Action Focus

Long Form Layout        Lists/Details



          Responsive Design
Good for websites; Not for applications
Interaction vs. Visual
• Design a house floor plan
• Focus on Rooms and Hallways
• Stay away from Paint, Furniture Carpet
• Has & Does for each screen
• Black & White then Color
Mobile gotcha
Adjust App Platforms

• On Screen vs. Hardware Back

• Up vs. Back / Stacks vs. Pages

• Pull to Refresh vs. Button Refresh

• Settings Room Location

• Visual Design
Mobile gotcha
Development Background

   Approach to Engineering
HTML5 vs Native

• What is the skillset of the team?

• What is your front door?

• Which platforms are you targeting?

• Phone Gap vs Titanium vs XXX
Libs vs. Frameworks



Frameworks call   App call libraries
   your app
    (Few)              (Lots)
Mobile gotcha
Mobile gotcha
Mobile gotcha
Mobile gotcha
Mobile gotcha
Mobile gotcha
Process vs Evented
     Systems
Process Systems

  Single process/thread per request

Block while waiting for I/O to complete

      Use Process/Thread Pools
Evented Systems


Single Process for large number of requests

           Non Blocking for I/O

Use 1 Process per Core on system for scale
Evented For Mobile

Process Systems great for high compute

 Evented Systems great for I/O bound

    With mobile client rendering,
  evented systems best for front end
Our Choices
Mobile gotcha
Server
Mobile gotcha
Mobile Server
•   Scaling Node
•   Node Modules
•   Logging vs Tracking vs Metrics
•   File Structure / Code Size
•   Client / Server Line Format
•   Server / Server Line Format
•   Latency vs Bandwidth
•   Gotchas
Scaling

• Load Balancer talking to each node instance
  running on separate cores
• In Node .8, finally have master/child file
  handle sharing based evented model
• 150 qps per core per instance
• 60 MB of RAM for an instance
Node Modules
•   Step to Async
•   Express/Connect -- Framework
•   Vows to Mocha
•   Request
•   Underscore
Logging/Monitoring/Tracking
• Logging used for sending lots of text information
   – useful for debugging

• Monitoring is for sending counters for realtime
  monitoring: Product and System
   – Typical: Query Rate, Response Code, Time for
     request, Page Views, Actions
   – Cube from Square

• Tracking is for product metric queries
   – Get into a database for queries
   – Needed for doing Uniqing and Pathing queries
File Structure / Code Size


• Follow simple Rails/Django dir
  – Controllers, Helpers, Formatters, Templates

  – No Views, No Models

• Code Size ~ 10K
Client / Server Line Level

•   Single Request per screen
•   JSON is template based
•   Updateable on Server
•   Don’t add:
    – Links
    – Styles
    – Positioning
• Node is part of the client
  NOT the server
Server / Server Line Level Format
• Stream Data
  – Metrics, Logging, Events, etc
  – Kafka, Thrift, Avro, Protocol Buffers etc.
• Request/Response Data
  – HTTP/JSON
  – REST Endpoints for actual data models
  – Not much faster for performance
Latency vs. Bandwidth
• Latency is the issue with mobile not
  bandwidth
• Establish and keep the socket open for ping
• Use a ping and pull model not a true push
• Easier to scale ping/pull model
Node Gotchas
• Exception Handling
• Don’t listen on startup till you are connected
  to down stream services
• Okay to die and respawn
• httpClient.agent = false
• Turn on console in production
• NO BLOCKING!
Client
 Native for Infinite Scroll

Native for Window Manger

HTML5 for everything else
iOS / Android Native
Native Gotchas

Web to Native Messaging

Cache/Image Management

      Tools / Test
Web to Native Messaging
• iFrame with URL for Ping

• Native Pulls from Queue

• Web-Sockets suck

• REST for Native Services
Cache/Image Management

• Store all data in url/result hash

• Render data from Hash

• Render again from server response

• Image src should be set to small image when
  off screen
Tools/Test
•   iWebInspector / Weinre
•   Charles Proxy for req debugging
•   Pain when OS upgrade
•   Selenium with Safari Simulator (Web Parts)
•   Instruments UIAutomation / Robotium (Native)
•   Layout Test: DumpRender + ImageDiff (5%)
•   Vcr.js – Fixture Creater
•   Android Emulator Super Slow to have to do on
    build machine with catchup
Mobile Web
Screen vs Page
• App is multiple Screens in one page
• Page is a browser Page and has an implication
  of JS Load/Parse time
• Screen to Screen move is div show/hide
Backbone.js
• Controls Routing from Screen to Screen
• Controls Screen lifecycle (load, show, hide)
• Controls View Updating based on Model
  Change
• Has Model construct for Validation
• BaseRouter to Backbone
  – Transitions, screen life cycle
• M V C links in Backbone lead to mem leaks
Libraries
• Zepto – Manipulate the DOM
• iScroll – Inertial Scrolling on iOS
   – Does not work on Android
   – Pull to Refresh
• Underscore – Collection helpers and binding
  constructs, templating
Build / Packaging
• Closure
  – Minify, Comment Removal, Template Compilation
• SASS
  – Variables, Functions, Selector Inheritance
• Bundle (set of screens)
  – Local, Template, Controllers/Views
• Build independently and resuable
Startup
• Initial
   –   Index.html
   –   List of bundle files
   –   Store all in Local Storage
   –   Backbone starts home bundle
• Upgrade
   –   Index.html
   –   MD5 has for each file
   –   Compare/Download Diff
   –   Store in Local Storage
Tools / Gotchas
• Chrome Memory Profiler
  – https://developers.google.com/chrome-
    developer-tools/docs/heap-profiling
• Memory Leak Tracking
  – http://gent.ilcore.com/2011/08/finding-memory-
    leaks.html
• Hardware Acceleration for DIV render only on
  screen DIV’s
• Double Render from Cache

More Related Content

KEY
LinkedIn Mobile: How do we do it?
PPTX
Express yourself
PPTX
Node ts1
PPTX
Signal rity1
PDF
Hybrid App Development
PDF
To Kill a Monolith: Slaying the Demons of a Monolith with Node.js Microservic...
PDF
Building Rich Internet Apps with Silverlight 2
PDF
Workflow driven development
LinkedIn Mobile: How do we do it?
Express yourself
Node ts1
Signal rity1
Hybrid App Development
To Kill a Monolith: Slaying the Demons of a Monolith with Node.js Microservic...
Building Rich Internet Apps with Silverlight 2
Workflow driven development

What's hot (20)

PPTX
Why XAF and XPO?
PPTX
Cross-Platform Mobile Development - Technical Stuff
PPTX
How to ease the learning curve
PDF
Web services automation workshop sreedhar dakshinamurthy
PDF
Web services automation workshop sreedhar dakshinamurthy
PPTX
MicroServices on Azure
PDF
Service-oriented architecture
KEY
PPT
Inland Empire .NET User's Group Silverlight Class
PDF
Gwt cdi jud_con_berlin
PPTX
Seattle JS Meetup - Grunt EJS Static Presentation
PPTX
Using the Cascade Server Web Service API, by Artur Tomusiak
PPTX
Micro Services in .NET Core and Docker
PPTX
Javascript for Wep Apps
PDF
Using Web Standards to create Interactive Data Visualizations for the Web
PDF
Node and Micro-Services at IBM
PPTX
EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA ( PROJECT PRESENT...
KEY
Sinatra and Heroku - A comfortable ruby way for web service
PPTX
Microservices in Azure
PPTX
Spring framework v2
Why XAF and XPO?
Cross-Platform Mobile Development - Technical Stuff
How to ease the learning curve
Web services automation workshop sreedhar dakshinamurthy
Web services automation workshop sreedhar dakshinamurthy
MicroServices on Azure
Service-oriented architecture
Inland Empire .NET User's Group Silverlight Class
Gwt cdi jud_con_berlin
Seattle JS Meetup - Grunt EJS Static Presentation
Using the Cascade Server Web Service API, by Artur Tomusiak
Micro Services in .NET Core and Docker
Javascript for Wep Apps
Using Web Standards to create Interactive Data Visualizations for the Web
Node and Micro-Services at IBM
EFFICIENT AND SECURE MULTI-KEY-WORD SEARCH ON LARGE DATA ( PROJECT PRESENT...
Sinatra and Heroku - A comfortable ruby way for web service
Microservices in Azure
Spring framework v2
Ad

Similar to Mobile gotcha (20)

PDF
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
PDF
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
PPTX
Single Page Applications: Your Browser is the OS!
PDF
Proud to be polyglot
PDF
Development of concurrent services using In-Memory Data Grids
PPTX
New Approaches to Faster Oracle Forms System Performance
PDF
Meetup. Technologies Intro for Non-Tech People
KEY
20120306 dublin js
PPTX
Machine Learning for Smarter Apps - Jacksonville Meetup
PPTX
Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...
PPTX
Building azure applications ireland
PPTX
After the LAMP, it's time to get MEAN
PPTX
Node.js BFFs: our way to better/micro frontends
PPTX
Scaling Systems: Architectures that grow
PPT
API Architecture Summit 2014- APIs: A Mobile Developer's Perspective
PDF
Escaping the yellow bubble - rewriting Domino using MongoDb and Angular
PDF
Web Performance Optimization (WPO)
PDF
Scalability and performance for e commerce
KEY
Web frameworks don't matter
PPTX
Pros & Cons of Microservices Architecture
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
IBM Connect 2017: Your Data In the Major Leagues: A Practical Guide to REST S...
Single Page Applications: Your Browser is the OS!
Proud to be polyglot
Development of concurrent services using In-Memory Data Grids
New Approaches to Faster Oracle Forms System Performance
Meetup. Technologies Intro for Non-Tech People
20120306 dublin js
Machine Learning for Smarter Apps - Jacksonville Meetup
Building Real World Applications using Windows Azure - Scott Guthrie, 2nd Dec...
Building azure applications ireland
After the LAMP, it's time to get MEAN
Node.js BFFs: our way to better/micro frontends
Scaling Systems: Architectures that grow
API Architecture Summit 2014- APIs: A Mobile Developer's Perspective
Escaping the yellow bubble - rewriting Domino using MongoDb and Angular
Web Performance Optimization (WPO)
Scalability and performance for e commerce
Web frameworks don't matter
Pros & Cons of Microservices Architecture
Ad

Recently uploaded (20)

PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Cloud computing and distributed systems.
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Approach and Philosophy of On baking technology
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Advanced IT Governance
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
Advanced Soft Computing BINUS July 2025.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Cloud computing and distributed systems.
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Review of recent advances in non-invasive hemoglobin estimation
Approach and Philosophy of On baking technology
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
GamePlan Trading System Review: Professional Trader's Honest Take
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Unlocking AI with Model Context Protocol (MCP)
Advanced IT Governance
Dropbox Q2 2025 Financial Results & Investor Presentation
Advanced methodologies resolving dimensionality complications for autism neur...
Understanding_Digital_Forensics_Presentation.pptx
cuic standard and advanced reporting.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Spectral efficient network and resource selection model in 5G networks
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
Advanced Soft Computing BINUS July 2025.pdf
20250228 LYD VKU AI Blended-Learning.pptx

Mobile gotcha

  • 2. Culture Product & Design Development Background Our Choices Server Client
  • 3. Cult of Simple • Fast – App Launch – Screen to Screen Switch • Easy – Tap Count • Reliable – Don’t Crash – Repeatable
  • 4. Product & Design It impacts engineering
  • 5. Websites vs. Applications Content Focus Flow & Action Focus Long Form Layout Lists/Details Responsive Design Good for websites; Not for applications
  • 6. Interaction vs. Visual • Design a house floor plan • Focus on Rooms and Hallways • Stay away from Paint, Furniture Carpet • Has & Does for each screen • Black & White then Color
  • 8. Adjust App Platforms • On Screen vs. Hardware Back • Up vs. Back / Stacks vs. Pages • Pull to Refresh vs. Button Refresh • Settings Room Location • Visual Design
  • 10. Development Background Approach to Engineering
  • 11. HTML5 vs Native • What is the skillset of the team? • What is your front door? • Which platforms are you targeting? • Phone Gap vs Titanium vs XXX
  • 12. Libs vs. Frameworks Frameworks call App call libraries your app (Few) (Lots)
  • 20. Process Systems Single process/thread per request Block while waiting for I/O to complete Use Process/Thread Pools
  • 21. Evented Systems Single Process for large number of requests Non Blocking for I/O Use 1 Process per Core on system for scale
  • 22. Evented For Mobile Process Systems great for high compute Evented Systems great for I/O bound With mobile client rendering, evented systems best for front end
  • 27. Mobile Server • Scaling Node • Node Modules • Logging vs Tracking vs Metrics • File Structure / Code Size • Client / Server Line Format • Server / Server Line Format • Latency vs Bandwidth • Gotchas
  • 28. Scaling • Load Balancer talking to each node instance running on separate cores • In Node .8, finally have master/child file handle sharing based evented model • 150 qps per core per instance • 60 MB of RAM for an instance
  • 29. Node Modules • Step to Async • Express/Connect -- Framework • Vows to Mocha • Request • Underscore
  • 30. Logging/Monitoring/Tracking • Logging used for sending lots of text information – useful for debugging • Monitoring is for sending counters for realtime monitoring: Product and System – Typical: Query Rate, Response Code, Time for request, Page Views, Actions – Cube from Square • Tracking is for product metric queries – Get into a database for queries – Needed for doing Uniqing and Pathing queries
  • 31. File Structure / Code Size • Follow simple Rails/Django dir – Controllers, Helpers, Formatters, Templates – No Views, No Models • Code Size ~ 10K
  • 32. Client / Server Line Level • Single Request per screen • JSON is template based • Updateable on Server • Don’t add: – Links – Styles – Positioning • Node is part of the client NOT the server
  • 33. Server / Server Line Level Format • Stream Data – Metrics, Logging, Events, etc – Kafka, Thrift, Avro, Protocol Buffers etc. • Request/Response Data – HTTP/JSON – REST Endpoints for actual data models – Not much faster for performance
  • 34. Latency vs. Bandwidth • Latency is the issue with mobile not bandwidth • Establish and keep the socket open for ping • Use a ping and pull model not a true push • Easier to scale ping/pull model
  • 35. Node Gotchas • Exception Handling • Don’t listen on startup till you are connected to down stream services • Okay to die and respawn • httpClient.agent = false • Turn on console in production • NO BLOCKING!
  • 36. Client Native for Infinite Scroll Native for Window Manger HTML5 for everything else
  • 37. iOS / Android Native
  • 38. Native Gotchas Web to Native Messaging Cache/Image Management Tools / Test
  • 39. Web to Native Messaging • iFrame with URL for Ping • Native Pulls from Queue • Web-Sockets suck • REST for Native Services
  • 40. Cache/Image Management • Store all data in url/result hash • Render data from Hash • Render again from server response • Image src should be set to small image when off screen
  • 41. Tools/Test • iWebInspector / Weinre • Charles Proxy for req debugging • Pain when OS upgrade • Selenium with Safari Simulator (Web Parts) • Instruments UIAutomation / Robotium (Native) • Layout Test: DumpRender + ImageDiff (5%) • Vcr.js – Fixture Creater • Android Emulator Super Slow to have to do on build machine with catchup
  • 43. Screen vs Page • App is multiple Screens in one page • Page is a browser Page and has an implication of JS Load/Parse time • Screen to Screen move is div show/hide
  • 44. Backbone.js • Controls Routing from Screen to Screen • Controls Screen lifecycle (load, show, hide) • Controls View Updating based on Model Change • Has Model construct for Validation • BaseRouter to Backbone – Transitions, screen life cycle • M V C links in Backbone lead to mem leaks
  • 45. Libraries • Zepto – Manipulate the DOM • iScroll – Inertial Scrolling on iOS – Does not work on Android – Pull to Refresh • Underscore – Collection helpers and binding constructs, templating
  • 46. Build / Packaging • Closure – Minify, Comment Removal, Template Compilation • SASS – Variables, Functions, Selector Inheritance • Bundle (set of screens) – Local, Template, Controllers/Views • Build independently and resuable
  • 47. Startup • Initial – Index.html – List of bundle files – Store all in Local Storage – Backbone starts home bundle • Upgrade – Index.html – MD5 has for each file – Compare/Download Diff – Store in Local Storage
  • 48. Tools / Gotchas • Chrome Memory Profiler – https://developers.google.com/chrome- developer-tools/docs/heap-profiling • Memory Leak Tracking – http://gent.ilcore.com/2011/08/finding-memory- leaks.html • Hardware Acceleration for DIV render only on screen DIV’s • Double Render from Cache