SlideShare a Scribd company logo
1 of 67
Download to read offline
Evolving Mobile
 Architectures    Stewart Gleadow
                  http://stewgleadow.com
                  @stewgleadow



                  Martin Fowler
                  http://martinfowler.com
                  @martinfowler
Good products evolve over time




http://www.flickr.com/photos/autohistorian/6902804230/
Remember the early days
of the web?


http://www.icehousedesigns.com/webarchive/images/flshbk_COLLAGE2.gif
›❯   Apps for multiple mobile platforms

›❯   Evolving hybrid architectures

›❯   Mobile backend systems

›❯   Testing hybrid applications
›❯   Apps for multiple mobile platforms

›❯   Evolving hybrid architectures

›❯   Mobile backend systems

›❯   Testing hybrid applications
All Native


             ✓ Easy to Begin
             ✓   Good UX
There is nothing worse than
a good mobile application

                  invest in UX

                  reuse UX
All Native


             ✓ Easy to Begin
             ✓   Good UX

             ✘ Expensive
Cross Platform


                 ✘ Slightly worse UX
                 ✓ Low cost
Cross Platform


                  ✘ Slightly worse UX
                  ✓ Low cost

    Write Once Run Anywhere
Translated UI
Translated UI




Controls   Overall UX
Controls

                       Lowest Common
1. Use Native            Denominator

                      Not quite right
2. Mimic

              Uncanny Valley
Translated UI




Controls   Overall UX
Overall UX




reuse UX
Translated UI




Controls   Overall UX
?
    Cross Platform
?
    Portable Platform
       Cross
Translated UI




Frankenstein UI
Web App




Portable Platform
✗ Missing Features ✗ App Store
✗ Worse UX        ✓ App Store
✗ Javascript
UX




     low cost
UX



Hybrid


              low cost
UI        Body



        Separated Presentation

✓   Focus            ✓   Testing
Portability




                     Easy
Hard
›❯   Apps for multiple mobile platforms

›❯   Evolving hybrid architectures

›❯   Mobile backend systems

›❯   Testing hybrid applications
rich experience        cost
  native feel      time to market
  responsive      technology stack
native features    cross platform



  being                being
 awesome              realistic
rich experience




                  platform coverage
rich experience


           Laser




                   platform coverage
rich experience




    Cover your bases


                       platform coverage
Native or web?
Instagram                Jump-in                      The Guardian   Democracy Now!




     NATIVE                        HYBRID                        WEB




              LinkedIn             Facebook     BBC Olympics

                                              using   PhoneGap
Victory for native or
cover-your-bases in action?
What would we do differently?
Don’t lock yourself into doing
         everything natively or
    everything using the web




and
 or
Sharing between platforms




Shared logic using Javascript
Shared presentation using HTML/CSS
User Interface   Client Logic




 iPhone        Objective C     Objective C




Mobile Web
               HTML / CSS       Javascript
User Interface                  Client Logic




                           Calatrava
         Objective C                    Objective C




         HTML / CSS                      Javascript




A bridge between native and web
Calatrava




Technology choice per feature
More an approach than a framework
Will soon be open source
http://en.wikipedia.org/wiki/Puente_del_Alamillo
Populating web views from templates: GRMoustache


<div class="person">
  <span class=”name”>{{name}}</span>

 {{#address}}
   <div class="address">
     {{.}}
   </div>
 {{/address}}

 ... and all the other stuff

</div>
Populating web views from templates: GRMoustache


     NSDictionary *person = @{ @"name": @"Stew", @"address": @"Melbourne" };

     GRMustacheTemplate *template = ...;
     NSString *renderedContent = [template renderObject:person];

     [webView loadHTMLString:renderedContent baseURL:...];




Should we populate templates on the
client or server?
Signal when the UIWebView has loaded

<body onload="window.location = 'myapp://ready'">




- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
  navigationType:(UIWebViewNavigationType)navigationType
{

    if ([request.URL.scheme isEqualToString:@"myapp"] &&
        [request.URL.host isEqualToString:@"ready"])
    {
      // We're done, you can display the content now
      return NO;
    }

    ...
}
Implementing javascript logic


Inside a UIWebView

Use JavaScriptCore directly?




   [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
User Interface                              Client Logic




                                Calatrava
          Objective C                                Objective C




          HTML / CSS                                  Javascript




So were is this kind of architecture well suited?
›❯   Apps for multiple mobile platforms

›❯   Evolving hybrid architectures

›❯   Mobile backend systems

›❯   Testing hybrid applications
Apps are just the
                                 tip of the iceberg
    Call Centre                   Retail

Legacy Thing                     Message Hub

  Database                   Mainframe

    Some expensive and proprietary system
App   Backend
App   API   Backend
How do we build simpler apps
                                    and smarter backends?



     App                 API                 Backend


Principles of REST

Serving data and style

Product-aligned teams
Forcing logic to the server




                                                     What if you could only use NSDictionary
                                                              objects for your domain model?


http://www.flickr.com/photos/jakecaptive/3205277810
›❯   Apps for multiple mobile platforms

›❯   Evolving hybrid architectures

›❯   Mobile backend systems

›❯   Testing hybrid applications
UI


Integration


   Unit
UI


                 Integration


Kiwi   Jasmine      Unit
UI


   Kiwi   RSpec     Integration


Kiwi      Jasmine      Unit
Frank (PublicAutomation)   UI
       Zucchini


   Kiwi    RSpec             Integration


Kiwi       Jasmine                 Unit
business-level     platform-specific
requirements           mapping               UI   client logic


                          e.g.
                         Frank


                          e.g.
  Business-level                                     Shared business
                         Native-
      specs                                               logic
                         Driver


                          e.g.
                         Web-
                         Driver




                                   Testing
UI        Client Logic




Acceptance
                                 Shared Logic
  Tests




  Full-Stack and Subcutaneous Testing
›❯   Apps for multiple mobile platforms

›❯   Evolving hybrid architectures

›❯   Mobile backend systems

›❯   Testing hybrid applications
Try out your approach,
use short iterations,
measure and learn.
UX




     low cost
Don’t lock yourself into doing
         everything natively or
    everything using the web




and
Separate your presentation
                from your logic




UI     Body
The app is just the
tip of the iceberg
Evolving Mobile
 Architectures    Stewart Gleadow
                  http://stewgleadow.com
                  @stewgleadow



                  Martin Fowler
                  http://martinfowler.com
                  @martinfowler
Evolving Mobile Architectures and Testing Hybrid Apps

More Related Content

What's hot

Angular js and phonegap unite
Angular js and phonegap uniteAngular js and phonegap unite
Angular js and phonegap uniteFITC
 
Designing Mobile Apps with HTML5 & CSS3
Designing Mobile Apps with HTML5 & CSS3Designing Mobile Apps with HTML5 & CSS3
Designing Mobile Apps with HTML5 & CSS3Johannes Ippen
 
Mobile Enablement And Intelligence
Mobile Enablement And IntelligenceMobile Enablement And Intelligence
Mobile Enablement And IntelligenceRashmika Nawaratne
 
Hybrid app development
Hybrid app developmentHybrid app development
Hybrid app developmentHarshul Shah
 
Developer Experience (DX) for UX Professionals
Developer Experience (DX) for UX ProfessionalsDeveloper Experience (DX) for UX Professionals
Developer Experience (DX) for UX ProfessionalsIan Jennings
 
Selenium Camp 2016
Selenium Camp 2016Selenium Camp 2016
Selenium Camp 2016Dan Cuellar
 
The future of the CMS
The future of the CMSThe future of the CMS
The future of the CMSInVision App
 
Progress Rollbase: Building Powerful Applications One Block at a Time
Progress Rollbase:  Building Powerful Applications One Block at a TimeProgress Rollbase:  Building Powerful Applications One Block at a Time
Progress Rollbase: Building Powerful Applications One Block at a TimeProgress
 
Android App Development Journey
Android App Development JourneyAndroid App Development Journey
Android App Development JourneyGerard
 
Rethinking Mobile with Ionic
Rethinking Mobile with IonicRethinking Mobile with Ionic
Rethinking Mobile with IonicMike Hartington
 
Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGapQuang Minh Dao
 
Debugging and Tuning Mobile Web Sites with Modern Web Browsers
Debugging and Tuning Mobile Web Sites with Modern Web BrowsersDebugging and Tuning Mobile Web Sites with Modern Web Browsers
Debugging and Tuning Mobile Web Sites with Modern Web BrowsersTroy Miles
 
Getting Acquainted with PhoneGap
Getting Acquainted with PhoneGapGetting Acquainted with PhoneGap
Getting Acquainted with PhoneGapJoseph Labrecque
 
Performance testing of mobile apps
Performance testing of mobile appsPerformance testing of mobile apps
Performance testing of mobile appsvodQA
 
AngularJS on Mobile with the Ionic Framework
AngularJS on Mobile with the Ionic FrameworkAngularJS on Mobile with the Ionic Framework
AngularJS on Mobile with the Ionic FrameworkTroy Miles
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekDr. Felix Raab
 
Building Hybrid Applications using PhoneGap
Building Hybrid Applications using PhoneGapBuilding Hybrid Applications using PhoneGap
Building Hybrid Applications using PhoneGapPrajyot Mainkar
 
Mobile Applications
Mobile ApplicationsMobile Applications
Mobile ApplicationsViktor Fonic
 
Titanium Conf Baltimore Keynote 2013
Titanium Conf Baltimore Keynote 2013Titanium Conf Baltimore Keynote 2013
Titanium Conf Baltimore Keynote 2013Jeff Haynie
 

What's hot (20)

Angular js and phonegap unite
Angular js and phonegap uniteAngular js and phonegap unite
Angular js and phonegap unite
 
Designing Mobile Apps with HTML5 & CSS3
Designing Mobile Apps with HTML5 & CSS3Designing Mobile Apps with HTML5 & CSS3
Designing Mobile Apps with HTML5 & CSS3
 
Mobile Enablement And Intelligence
Mobile Enablement And IntelligenceMobile Enablement And Intelligence
Mobile Enablement And Intelligence
 
Hybrid app development
Hybrid app developmentHybrid app development
Hybrid app development
 
Phone gap
Phone gapPhone gap
Phone gap
 
Developer Experience (DX) for UX Professionals
Developer Experience (DX) for UX ProfessionalsDeveloper Experience (DX) for UX Professionals
Developer Experience (DX) for UX Professionals
 
Selenium Camp 2016
Selenium Camp 2016Selenium Camp 2016
Selenium Camp 2016
 
The future of the CMS
The future of the CMSThe future of the CMS
The future of the CMS
 
Progress Rollbase: Building Powerful Applications One Block at a Time
Progress Rollbase:  Building Powerful Applications One Block at a TimeProgress Rollbase:  Building Powerful Applications One Block at a Time
Progress Rollbase: Building Powerful Applications One Block at a Time
 
Android App Development Journey
Android App Development JourneyAndroid App Development Journey
Android App Development Journey
 
Rethinking Mobile with Ionic
Rethinking Mobile with IonicRethinking Mobile with Ionic
Rethinking Mobile with Ionic
 
Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGap
 
Debugging and Tuning Mobile Web Sites with Modern Web Browsers
Debugging and Tuning Mobile Web Sites with Modern Web BrowsersDebugging and Tuning Mobile Web Sites with Modern Web Browsers
Debugging and Tuning Mobile Web Sites with Modern Web Browsers
 
Getting Acquainted with PhoneGap
Getting Acquainted with PhoneGapGetting Acquainted with PhoneGap
Getting Acquainted with PhoneGap
 
Performance testing of mobile apps
Performance testing of mobile appsPerformance testing of mobile apps
Performance testing of mobile apps
 
AngularJS on Mobile with the Ionic Framework
AngularJS on Mobile with the Ionic FrameworkAngularJS on Mobile with the Ionic Framework
AngularJS on Mobile with the Ionic Framework
 
Building a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one weekBuilding a full-stack app with Golang and Google Cloud Platform in one week
Building a full-stack app with Golang and Google Cloud Platform in one week
 
Building Hybrid Applications using PhoneGap
Building Hybrid Applications using PhoneGapBuilding Hybrid Applications using PhoneGap
Building Hybrid Applications using PhoneGap
 
Mobile Applications
Mobile ApplicationsMobile Applications
Mobile Applications
 
Titanium Conf Baltimore Keynote 2013
Titanium Conf Baltimore Keynote 2013Titanium Conf Baltimore Keynote 2013
Titanium Conf Baltimore Keynote 2013
 

Similar to Evolving Mobile Architectures and Testing Hybrid Apps

Cross platform mobile application architecture for enterprise
Cross platform mobile application architecture for enterpriseCross platform mobile application architecture for enterprise
Cross platform mobile application architecture for enterpriseVenkat Alagarsamy
 
IBM MobileFirst - Hybrid Application Development with Worklight
IBM MobileFirst - Hybrid Application Development with WorklightIBM MobileFirst - Hybrid Application Development with Worklight
IBM MobileFirst - Hybrid Application Development with WorklightIBIZZ
 
baidu开发者大会 - Web App开发框架介绍以及分析
baidu开发者大会 - Web App开发框架介绍以及分析baidu开发者大会 - Web App开发框架介绍以及分析
baidu开发者大会 - Web App开发框架介绍以及分析joylite
 
HTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsHTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsJames Pearce
 
Understanding Native, Hybrid, and Web Mobile Architectures
Understanding Native, Hybrid, and Web Mobile ArchitecturesUnderstanding Native, Hybrid, and Web Mobile Architectures
Understanding Native, Hybrid, and Web Mobile ArchitecturesSalesforce Developers
 
Top Ten Tips for HTML5/Mobile Web Development
Top Ten Tips for HTML5/Mobile Web DevelopmentTop Ten Tips for HTML5/Mobile Web Development
Top Ten Tips for HTML5/Mobile Web DevelopmentSimon Guest
 
Xamarin COE by Mukteswar Patnaik
Xamarin COE by Mukteswar PatnaikXamarin COE by Mukteswar Patnaik
Xamarin COE by Mukteswar PatnaikMukteswar Patnaik
 
Optimizing HTML5 Sites with CQ5/WEM
Optimizing HTML5 Sites with CQ5/WEMOptimizing HTML5 Sites with CQ5/WEM
Optimizing HTML5 Sites with CQ5/WEMGabriel Walt
 
Fragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionFragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionBelen Barros Pena
 
Magic mobile webinar_Jan2013
Magic mobile webinar_Jan2013Magic mobile webinar_Jan2013
Magic mobile webinar_Jan2013Magic Software
 
Client Continuum Dec Fy09
Client Continuum Dec Fy09Client Continuum Dec Fy09
Client Continuum Dec Fy09Martha Rotter
 
Azure and web sites hackaton deck
Azure and web sites hackaton deckAzure and web sites hackaton deck
Azure and web sites hackaton deckAlexey Bokov
 
Hybrid App Development, Redefined
Hybrid App Development, RedefinedHybrid App Development, Redefined
Hybrid App Development, RedefinedIonic Framework
 
IBM MobileFirst - Hybrid App Development
IBM MobileFirst - Hybrid App DevelopmentIBM MobileFirst - Hybrid App Development
IBM MobileFirst - Hybrid App DevelopmentWim Tobback
 
Xamarin cross platform
Xamarin cross platformXamarin cross platform
Xamarin cross platformGuada Casuso
 
Keynote Client Connectivity And The Cloud
Keynote Client Connectivity And The CloudKeynote Client Connectivity And The Cloud
Keynote Client Connectivity And The CloudGoogleTecTalks
 

Similar to Evolving Mobile Architectures and Testing Hybrid Apps (20)

Cross platform mobile application architecture for enterprise
Cross platform mobile application architecture for enterpriseCross platform mobile application architecture for enterprise
Cross platform mobile application architecture for enterprise
 
IBM MobileFirst - Hybrid Application Development with Worklight
IBM MobileFirst - Hybrid Application Development with WorklightIBM MobileFirst - Hybrid Application Development with Worklight
IBM MobileFirst - Hybrid Application Development with Worklight
 
The Enterprise Dilemma: Native vs. Web
The Enterprise Dilemma: Native vs. WebThe Enterprise Dilemma: Native vs. Web
The Enterprise Dilemma: Native vs. Web
 
Native Touches to your Hybrid Mobile Apps
Native Touches to your Hybrid Mobile AppsNative Touches to your Hybrid Mobile Apps
Native Touches to your Hybrid Mobile Apps
 
baidu开发者大会 - Web App开发框架介绍以及分析
baidu开发者大会 - Web App开发框架介绍以及分析baidu开发者大会 - Web App开发框架介绍以及分析
baidu开发者大会 - Web App开发框架介绍以及分析
 
HTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applicationsHTML5 and the dawn of rich mobile web applications
HTML5 and the dawn of rich mobile web applications
 
Understanding Native, Hybrid, and Web Mobile Architectures
Understanding Native, Hybrid, and Web Mobile ArchitecturesUnderstanding Native, Hybrid, and Web Mobile Architectures
Understanding Native, Hybrid, and Web Mobile Architectures
 
Top Ten Tips for HTML5/Mobile Web Development
Top Ten Tips for HTML5/Mobile Web DevelopmentTop Ten Tips for HTML5/Mobile Web Development
Top Ten Tips for HTML5/Mobile Web Development
 
Service worker API
Service worker APIService worker API
Service worker API
 
Xamarin COE by Mukteswar Patnaik
Xamarin COE by Mukteswar PatnaikXamarin COE by Mukteswar Patnaik
Xamarin COE by Mukteswar Patnaik
 
Optimizing HTML5 Sites with CQ5/WEM
Optimizing HTML5 Sites with CQ5/WEMOptimizing HTML5 Sites with CQ5/WEM
Optimizing HTML5 Sites with CQ5/WEM
 
Fragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fictionFragmentation in mobile design: fact or fiction
Fragmentation in mobile design: fact or fiction
 
Magic mobile webinar_Jan2013
Magic mobile webinar_Jan2013Magic mobile webinar_Jan2013
Magic mobile webinar_Jan2013
 
Calatrava
CalatravaCalatrava
Calatrava
 
Client Continuum Dec Fy09
Client Continuum Dec Fy09Client Continuum Dec Fy09
Client Continuum Dec Fy09
 
Azure and web sites hackaton deck
Azure and web sites hackaton deckAzure and web sites hackaton deck
Azure and web sites hackaton deck
 
Hybrid App Development, Redefined
Hybrid App Development, RedefinedHybrid App Development, Redefined
Hybrid App Development, Redefined
 
IBM MobileFirst - Hybrid App Development
IBM MobileFirst - Hybrid App DevelopmentIBM MobileFirst - Hybrid App Development
IBM MobileFirst - Hybrid App Development
 
Xamarin cross platform
Xamarin cross platformXamarin cross platform
Xamarin cross platform
 
Keynote Client Connectivity And The Cloud
Keynote Client Connectivity And The CloudKeynote Client Connectivity And The Cloud
Keynote Client Connectivity And The Cloud
 

More from sgleadow

Evolving for Multiple Screens
Evolving for Multiple ScreensEvolving for Multiple Screens
Evolving for Multiple Screenssgleadow
 
Mobile: more than just an app
Mobile: more than just an appMobile: more than just an app
Mobile: more than just an appsgleadow
 
Building mobile teams and getting a product to market
Building mobile teams and getting a product to marketBuilding mobile teams and getting a product to market
Building mobile teams and getting a product to marketsgleadow
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testingsgleadow
 
iOS app case study
iOS app case studyiOS app case study
iOS app case studysgleadow
 
iOS View Coordinators
iOS View CoordinatorsiOS View Coordinators
iOS View Coordinatorssgleadow
 
Frank iOS Testing
Frank iOS TestingFrank iOS Testing
Frank iOS Testingsgleadow
 
Multithreaded Data Transport
Multithreaded Data TransportMultithreaded Data Transport
Multithreaded Data Transportsgleadow
 
A few design patterns
A few design patternsA few design patterns
A few design patternssgleadow
 
GPU Programming
GPU ProgrammingGPU Programming
GPU Programmingsgleadow
 
Cocoa Design Patterns
Cocoa Design PatternsCocoa Design Patterns
Cocoa Design Patternssgleadow
 
Beginning iPhone Development
Beginning iPhone DevelopmentBeginning iPhone Development
Beginning iPhone Developmentsgleadow
 

More from sgleadow (12)

Evolving for Multiple Screens
Evolving for Multiple ScreensEvolving for Multiple Screens
Evolving for Multiple Screens
 
Mobile: more than just an app
Mobile: more than just an appMobile: more than just an app
Mobile: more than just an app
 
Building mobile teams and getting a product to market
Building mobile teams and getting a product to marketBuilding mobile teams and getting a product to market
Building mobile teams and getting a product to market
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testing
 
iOS app case study
iOS app case studyiOS app case study
iOS app case study
 
iOS View Coordinators
iOS View CoordinatorsiOS View Coordinators
iOS View Coordinators
 
Frank iOS Testing
Frank iOS TestingFrank iOS Testing
Frank iOS Testing
 
Multithreaded Data Transport
Multithreaded Data TransportMultithreaded Data Transport
Multithreaded Data Transport
 
A few design patterns
A few design patternsA few design patterns
A few design patterns
 
GPU Programming
GPU ProgrammingGPU Programming
GPU Programming
 
Cocoa Design Patterns
Cocoa Design PatternsCocoa Design Patterns
Cocoa Design Patterns
 
Beginning iPhone Development
Beginning iPhone DevelopmentBeginning iPhone Development
Beginning iPhone Development
 

Recently uploaded

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 

Recently uploaded (20)

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 

Evolving Mobile Architectures and Testing Hybrid Apps

  • 1. Evolving Mobile Architectures Stewart Gleadow http://stewgleadow.com @stewgleadow Martin Fowler http://martinfowler.com @martinfowler
  • 2. Good products evolve over time http://www.flickr.com/photos/autohistorian/6902804230/
  • 3. Remember the early days of the web? http://www.icehousedesigns.com/webarchive/images/flshbk_COLLAGE2.gif
  • 4. ›❯ Apps for multiple mobile platforms ›❯ Evolving hybrid architectures ›❯ Mobile backend systems ›❯ Testing hybrid applications
  • 5. ›❯ Apps for multiple mobile platforms ›❯ Evolving hybrid architectures ›❯ Mobile backend systems ›❯ Testing hybrid applications
  • 6.
  • 7. All Native ✓ Easy to Begin ✓ Good UX
  • 8. There is nothing worse than a good mobile application invest in UX reuse UX
  • 9. All Native ✓ Easy to Begin ✓ Good UX ✘ Expensive
  • 10. Cross Platform ✘ Slightly worse UX ✓ Low cost
  • 11. Cross Platform ✘ Slightly worse UX ✓ Low cost Write Once Run Anywhere
  • 14. Controls Lowest Common 1. Use Native Denominator Not quite right 2. Mimic Uncanny Valley
  • 18. ? Cross Platform
  • 19. ? Portable Platform Cross
  • 22. ✗ Missing Features ✗ App Store ✗ Worse UX ✓ App Store ✗ Javascript
  • 23. UX low cost
  • 24. UX Hybrid low cost
  • 25.
  • 26. UI Body Separated Presentation ✓ Focus ✓ Testing
  • 27. Portability Easy Hard
  • 28. ›❯ Apps for multiple mobile platforms ›❯ Evolving hybrid architectures ›❯ Mobile backend systems ›❯ Testing hybrid applications
  • 29. rich experience cost native feel time to market responsive technology stack native features cross platform being being awesome realistic
  • 30. rich experience platform coverage
  • 31. rich experience Laser platform coverage
  • 32. rich experience Cover your bases platform coverage
  • 34. Instagram Jump-in The Guardian Democracy Now! NATIVE HYBRID WEB LinkedIn Facebook BBC Olympics using PhoneGap
  • 35. Victory for native or cover-your-bases in action?
  • 36. What would we do differently?
  • 37. Don’t lock yourself into doing everything natively or everything using the web and or
  • 38. Sharing between platforms Shared logic using Javascript Shared presentation using HTML/CSS
  • 39. User Interface Client Logic iPhone Objective C Objective C Mobile Web HTML / CSS Javascript
  • 40. User Interface Client Logic Calatrava Objective C Objective C HTML / CSS Javascript A bridge between native and web
  • 41. Calatrava Technology choice per feature More an approach than a framework Will soon be open source http://en.wikipedia.org/wiki/Puente_del_Alamillo
  • 42. Populating web views from templates: GRMoustache <div class="person"> <span class=”name”>{{name}}</span> {{#address}} <div class="address"> {{.}} </div> {{/address}} ... and all the other stuff </div>
  • 43. Populating web views from templates: GRMoustache NSDictionary *person = @{ @"name": @"Stew", @"address": @"Melbourne" }; GRMustacheTemplate *template = ...; NSString *renderedContent = [template renderObject:person]; [webView loadHTMLString:renderedContent baseURL:...]; Should we populate templates on the client or server?
  • 44. Signal when the UIWebView has loaded <body onload="window.location = 'myapp://ready'"> - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([request.URL.scheme isEqualToString:@"myapp"] && [request.URL.host isEqualToString:@"ready"]) { // We're done, you can display the content now return NO; } ... }
  • 45. Implementing javascript logic Inside a UIWebView Use JavaScriptCore directly? [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
  • 46. User Interface Client Logic Calatrava Objective C Objective C HTML / CSS Javascript So were is this kind of architecture well suited?
  • 47. ›❯ Apps for multiple mobile platforms ›❯ Evolving hybrid architectures ›❯ Mobile backend systems ›❯ Testing hybrid applications
  • 48. Apps are just the tip of the iceberg Call Centre Retail Legacy Thing Message Hub Database Mainframe Some expensive and proprietary system
  • 49. App Backend
  • 50. App API Backend
  • 51. How do we build simpler apps and smarter backends? App API Backend Principles of REST Serving data and style Product-aligned teams
  • 52. Forcing logic to the server What if you could only use NSDictionary objects for your domain model? http://www.flickr.com/photos/jakecaptive/3205277810
  • 53. ›❯ Apps for multiple mobile platforms ›❯ Evolving hybrid architectures ›❯ Mobile backend systems ›❯ Testing hybrid applications
  • 55. UI Integration Kiwi Jasmine Unit
  • 56. UI Kiwi RSpec Integration Kiwi Jasmine Unit
  • 57. Frank (PublicAutomation) UI Zucchini Kiwi RSpec Integration Kiwi Jasmine Unit
  • 58. business-level platform-specific requirements mapping UI client logic e.g. Frank e.g. Business-level Shared business Native- specs logic Driver e.g. Web- Driver Testing
  • 59. UI Client Logic Acceptance Shared Logic Tests Full-Stack and Subcutaneous Testing
  • 60. ›❯ Apps for multiple mobile platforms ›❯ Evolving hybrid architectures ›❯ Mobile backend systems ›❯ Testing hybrid applications
  • 61. Try out your approach, use short iterations, measure and learn.
  • 62. UX low cost
  • 63. Don’t lock yourself into doing everything natively or everything using the web and
  • 64. Separate your presentation from your logic UI Body
  • 65. The app is just the tip of the iceberg
  • 66. Evolving Mobile Architectures Stewart Gleadow http://stewgleadow.com @stewgleadow Martin Fowler http://martinfowler.com @martinfowler