SlideShare a Scribd company logo
1 of 26
Gojek Mobile
Observability
Internals
Where Reliability Begins
1
Hai i’m Raditya Gumay
Sr. Principal Engineer at Gojek
●App Performance
●CI/CD Infrastructure
●Framework
●Tooling
●Standardization and Guidelines
The State of the Mobile Observability
Motivation
●Improve the ease and efficiency of conducting app
audits for developers
●Accelerate the process of obtaining performance
evaluations of the application
●Automation of the audit process, reducing the time
and effort required to conduct an audit
Abilities
●Have an ability to capture memory leaks
●Have an ability to capture thread and virtual
machine violations
●Have an ability to capture HTTP API calls
●Have an ability to capture TTML, TTFL, TTI, Frozen,
and Slow Frames
●Have an ability to capture crashes
Sphere of Control
Architecture
How we design app audit sdk
dependencies {
// AppAudit
implementation projectOrArtifact(':app-audit')
// to check variants debug, integration, and nightly
def buildVariant = ...
if (buildVariant.isConsideredAsIntegration()) {
implementation projectOrArtifact(':app-audit-plugin-memory-leak')
implementation projectOrArtifact(':app-audit-plugin-strict-mode')
implementation projectOrArtifact(':app-audit-plugin-page-performance')
implementation projectOrArtifact(':app-audit-plugin-network-instrumentation')
} else {
implementation projectOrArtifact(':app-audit-plugin-page-performance')
}
}
How we design app audit sdk
dependencies {
// AppAudit
implementation projectOrArtifact(':app-audit')
// add additional plugins and sink only on debug, integration, and nightly
def buildVariant = ...
if (buildVariant.isConsideredAsIntegration()) {
implementation projectOrArtifact(':app-audit-plugin-memory-leak')
implementation projectOrArtifact(':app-audit-plugin-strict-mode')
implementation projectOrArtifact(':app-audit-plugin-page-performance')
implementation projectOrArtifact(':app-audit-plugin-network-instrumentation')
} else {
implementation projectOrArtifact(':app-audit-plugin-page-performance')
}
}
How we design app audit sdk
dependencies {
// AppAudit
implementation projectOrArtifact(':app-audit')
// add additional plugins and sink only on debug, integration, and nightly
def buildVariant = ...
if (buildVariant.isConsideredAsIntegration()) {
implementation projectOrArtifact(':app-audit-plugin-memory-leak')
implementation projectOrArtifact(':app-audit-plugin-strict-mode')
implementation projectOrArtifact(':app-audit-plugin-page-performance')
implementation projectOrArtifact(':app-audit-plugin-network-instrumentation')
} else {
implementation projectOrArtifact(':app-audit-plugin-page-performance')
}
}
How we design app audit sdk
dependencies {
// AppAudit
implementation projectOrArtifact(':app-audit')
// add additional plugins and sink only on debug, integration, and nightly
def buildVariant = ...
if (buildVariant.isConsideredAsIntegration()) {
implementation projectOrArtifact(':app-audit-plugin-memory-leak')
implementation projectOrArtifact(':app-audit-plugin-strict-mode')
implementation projectOrArtifact(':app-audit-plugin-page-performance')
implementation projectOrArtifact(':app-audit-plugin-network-instrumentation')
} else {
implementation projectOrArtifact(':app-audit-plugin-page-performance')
}
}
How we design app audit sdk
class AppAuditInitializer {
fun install() {
AppAudit(
app = app,
metadata = metadata,
plugins = getPlugins(),
executor =
app.getAppScope.coroutineContext.toExecutor()
)
.install()
}
...
}
How we design app audit sdk
class AppAuditInitializer {
...
private fun getPlugins(): Set<AppAuditPlugin> {
val plugins = mutableSetOf<AppAuditPlugin>()
if (BuildConfig.IS_PAGE_PERFORMANCE_ENABLED) {
plugins.add(PagePerformancePlugin())
}
...
return plugins
}
}
How we design app audit sdk
class AppAuditInitializer {
...
private fun getPlugins(): Set<AppAuditPlugin> {
val plugins = mutableSetOf<AppAuditPlugin>()
if (BuildConfig.IS_PAGE_PERFORMANCE_ENABLED) {
plugins.add(PagePerformancePlugin(
setOf(AbcTelemetryEngine(), XyzTelemetryEngine())
))
}
...
return plugins
}
}
How we design page performance
●Able to capture TTFL (time to first layout)
●Able to capture TTI (time to interactive)
●Able to capture TTML (time to meaningful layout)
How we design page performance - TTFL
How we design page performance - TTFL
How we design page performance - TTFL
How we design page performance - TTFL
●Utilizing Application.ActivityLifecycleCallbacks
●Utilizing FragmentLifecycleCallbacks
●Utilizing ViewLifecycleCallbacks (a custom hook)
How we design page performance - TTFL
{
ScreenName=MagicActivity,
WindowName=FooView
TTFL=100,
TTI=300
TTML=1200,
FrozenFramesCount=0,
SlowFramesCount=41,
TotalFramesCount=49,
FrozenFramesPercentage=0.0,
SlowFramesPercentage=83.67347
}
How we design page performance - TTFL
How we design app audit sdk
class AppAuditInitializer {
...
private fun getPlugins(): Set<AppAuditPlugin> {
val plugins = mutableSetOf<AppAuditPlugin>()
if (BuildConfig.IS_PAGE_PERFORMANCE_ENABLED) {
plugins.add(PagePerformancePlugin(
setOf(AbcTelemetryEngine(), XyzTelemetryEngine())
))
}
...
return plugins
}
}
How we design app audit sdk
class PagePerformancePlugin {
...
internal fun reporting(record: Record) {
plugin.reportEngines?.forEach { engine ->
audit.executor.execute {
engine.execute(record)
}
}
}
}
Key takeaway
●At the Gojek level, basic page performance metrics
weren’t sufficient, hence we built an in-house, end-
to-end solution to accommodate our needs.
●Mobile observability is a method through which we
can confidently manage each release of the app.
●Mobile observability not only helps us capture
performance in the wild but also allows us to utilize
the same metrics in the development environment
(shift-left approach).
Thank You
Brought to you by DevX team

More Related Content

Similar to [Slide Deck] - Mobile Observability Internals at Gojek

Google analytics
Google analyticsGoogle analytics
Google analyticsSean Tsai
 
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...LogeekNightUkraine
 
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...AppSphere 2016 - Automate performance testing with AppDynamics using continuo...
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...Brad Stoner
 
Google Cloud Platform 2014Q1 - Starter Guide
Google Cloud Platform   2014Q1 - Starter GuideGoogle Cloud Platform   2014Q1 - Starter Guide
Google Cloud Platform 2014Q1 - Starter GuideSimon Su
 
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0Frost
 
Android UI Testing with Appium
Android UI Testing with AppiumAndroid UI Testing with Appium
Android UI Testing with AppiumLuke Maung
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Eliran Eliassy
 
Android RuntimePermissionsExtended
Android RuntimePermissionsExtendedAndroid RuntimePermissionsExtended
Android RuntimePermissionsExtendedNebojša Vukšić
 
Google Analytics intro - Best practices for WCM
Google Analytics intro - Best practices for WCMGoogle Analytics intro - Best practices for WCM
Google Analytics intro - Best practices for WCMAmplexor
 
Spring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsugSpring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsugToshiaki Maki
 
Adding custom ui controls to your application (1)
Adding custom ui controls to your application (1)Adding custom ui controls to your application (1)
Adding custom ui controls to your application (1)Oro Inc.
 
Android Tutorial | Android App Development | Android Tutorial For Beginners |...
Android Tutorial | Android App Development | Android Tutorial For Beginners |...Android Tutorial | Android App Development | Android Tutorial For Beginners |...
Android Tutorial | Android App Development | Android Tutorial For Beginners |...Edureka!
 
A gently introduction to AngularJS
A gently introduction to AngularJSA gently introduction to AngularJS
A gently introduction to AngularJSGregor Woiwode
 
What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018Somkiat Khitwongwattana
 
Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly
Provisioning & Migration with p2: Case study - The Good, the Bad and the UglyProvisioning & Migration with p2: Case study - The Good, the Bad and the Ugly
Provisioning & Migration with p2: Case study - The Good, the Bad and the Uglychristianbourgeois
 
Android Jump Start
Android Jump StartAndroid Jump Start
Android Jump StartHaim Michael
 
google drive and the google drive sdk
google drive and the google drive sdkgoogle drive and the google drive sdk
google drive and the google drive sdkfirenze-gtug
 

Similar to [Slide Deck] - Mobile Observability Internals at Gojek (20)

Night Watch with QA
Night Watch with QANight Watch with QA
Night Watch with QA
 
Google analytics
Google analyticsGoogle analytics
Google analytics
 
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...
 
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...AppSphere 2016 - Automate performance testing with AppDynamics using continuo...
AppSphere 2016 - Automate performance testing with AppDynamics using continuo...
 
Google Cloud Platform 2014Q1 - Starter Guide
Google Cloud Platform   2014Q1 - Starter GuideGoogle Cloud Platform   2014Q1 - Starter Guide
Google Cloud Platform 2014Q1 - Starter Guide
 
React django
React djangoReact django
React django
 
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
Building an angular application -1 ( API: Golang, Database: Postgres) v1.0
 
Android UI Testing with Appium
Android UI Testing with AppiumAndroid UI Testing with Appium
Android UI Testing with Appium
 
Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics Angular server side rendering - Strategies & Technics
Angular server side rendering - Strategies & Technics
 
Android RuntimePermissionsExtended
Android RuntimePermissionsExtendedAndroid RuntimePermissionsExtended
Android RuntimePermissionsExtended
 
Google Analytics intro - Best practices for WCM
Google Analytics intro - Best practices for WCMGoogle Analytics intro - Best practices for WCM
Google Analytics intro - Best practices for WCM
 
Spring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsugSpring Cloud Function & Project riff #jsug
Spring Cloud Function & Project riff #jsug
 
Adding custom ui controls to your application (1)
Adding custom ui controls to your application (1)Adding custom ui controls to your application (1)
Adding custom ui controls to your application (1)
 
Android Tutorial | Android App Development | Android Tutorial For Beginners |...
Android Tutorial | Android App Development | Android Tutorial For Beginners |...Android Tutorial | Android App Development | Android Tutorial For Beginners |...
Android Tutorial | Android App Development | Android Tutorial For Beginners |...
 
A gently introduction to AngularJS
A gently introduction to AngularJSA gently introduction to AngularJS
A gently introduction to AngularJS
 
What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018
 
Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly
Provisioning & Migration with p2: Case study - The Good, the Bad and the UglyProvisioning & Migration with p2: Case study - The Good, the Bad and the Ugly
Provisioning & Migration with p2: Case study - The Good, the Bad and the Ugly
 
Android Jump Start
Android Jump StartAndroid Jump Start
Android Jump Start
 
google drive and the google drive sdk
google drive and the google drive sdkgoogle drive and the google drive sdk
google drive and the google drive sdk
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 

More from raditya gumay

Mathematical Morphology and Proposed JPEG Quantization in Image Steganography
Mathematical Morphology and Proposed JPEG Quantization in Image SteganographyMathematical Morphology and Proposed JPEG Quantization in Image Steganography
Mathematical Morphology and Proposed JPEG Quantization in Image Steganographyraditya gumay
 
Gojek Android Engineering at Scale vol 2
Gojek Android Engineering at Scale vol 2Gojek Android Engineering at Scale vol 2
Gojek Android Engineering at Scale vol 2raditya gumay
 
Mobile engineering at GOJEK Scale
Mobile engineering at GOJEK ScaleMobile engineering at GOJEK Scale
Mobile engineering at GOJEK Scaleraditya gumay
 
The Journey of Craftmanship – Kotlin in Action
The Journey of Craftmanship – Kotlin in ActionThe Journey of Craftmanship – Kotlin in Action
The Journey of Craftmanship – Kotlin in Actionraditya gumay
 
Unidirectional Data Flow by using MVI and RxJava
Unidirectional Data Flow by using MVI and RxJavaUnidirectional Data Flow by using MVI and RxJava
Unidirectional Data Flow by using MVI and RxJavaraditya gumay
 
A journey through android development
A journey through android developmentA journey through android development
A journey through android developmentraditya gumay
 
Firebase Predictions
Firebase PredictionsFirebase Predictions
Firebase Predictionsraditya gumay
 

More from raditya gumay (7)

Mathematical Morphology and Proposed JPEG Quantization in Image Steganography
Mathematical Morphology and Proposed JPEG Quantization in Image SteganographyMathematical Morphology and Proposed JPEG Quantization in Image Steganography
Mathematical Morphology and Proposed JPEG Quantization in Image Steganography
 
Gojek Android Engineering at Scale vol 2
Gojek Android Engineering at Scale vol 2Gojek Android Engineering at Scale vol 2
Gojek Android Engineering at Scale vol 2
 
Mobile engineering at GOJEK Scale
Mobile engineering at GOJEK ScaleMobile engineering at GOJEK Scale
Mobile engineering at GOJEK Scale
 
The Journey of Craftmanship – Kotlin in Action
The Journey of Craftmanship – Kotlin in ActionThe Journey of Craftmanship – Kotlin in Action
The Journey of Craftmanship – Kotlin in Action
 
Unidirectional Data Flow by using MVI and RxJava
Unidirectional Data Flow by using MVI and RxJavaUnidirectional Data Flow by using MVI and RxJava
Unidirectional Data Flow by using MVI and RxJava
 
A journey through android development
A journey through android developmentA journey through android development
A journey through android development
 
Firebase Predictions
Firebase PredictionsFirebase Predictions
Firebase Predictions
 

Recently uploaded

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 

Recently uploaded (20)

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 

[Slide Deck] - Mobile Observability Internals at Gojek

  • 2. Hai i’m Raditya Gumay Sr. Principal Engineer at Gojek ●App Performance ●CI/CD Infrastructure ●Framework ●Tooling ●Standardization and Guidelines
  • 3. The State of the Mobile Observability
  • 4. Motivation ●Improve the ease and efficiency of conducting app audits for developers ●Accelerate the process of obtaining performance evaluations of the application ●Automation of the audit process, reducing the time and effort required to conduct an audit
  • 5. Abilities ●Have an ability to capture memory leaks ●Have an ability to capture thread and virtual machine violations ●Have an ability to capture HTTP API calls ●Have an ability to capture TTML, TTFL, TTI, Frozen, and Slow Frames ●Have an ability to capture crashes
  • 8. How we design app audit sdk dependencies { // AppAudit implementation projectOrArtifact(':app-audit') // to check variants debug, integration, and nightly def buildVariant = ... if (buildVariant.isConsideredAsIntegration()) { implementation projectOrArtifact(':app-audit-plugin-memory-leak') implementation projectOrArtifact(':app-audit-plugin-strict-mode') implementation projectOrArtifact(':app-audit-plugin-page-performance') implementation projectOrArtifact(':app-audit-plugin-network-instrumentation') } else { implementation projectOrArtifact(':app-audit-plugin-page-performance') } }
  • 9. How we design app audit sdk dependencies { // AppAudit implementation projectOrArtifact(':app-audit') // add additional plugins and sink only on debug, integration, and nightly def buildVariant = ... if (buildVariant.isConsideredAsIntegration()) { implementation projectOrArtifact(':app-audit-plugin-memory-leak') implementation projectOrArtifact(':app-audit-plugin-strict-mode') implementation projectOrArtifact(':app-audit-plugin-page-performance') implementation projectOrArtifact(':app-audit-plugin-network-instrumentation') } else { implementation projectOrArtifact(':app-audit-plugin-page-performance') } }
  • 10. How we design app audit sdk dependencies { // AppAudit implementation projectOrArtifact(':app-audit') // add additional plugins and sink only on debug, integration, and nightly def buildVariant = ... if (buildVariant.isConsideredAsIntegration()) { implementation projectOrArtifact(':app-audit-plugin-memory-leak') implementation projectOrArtifact(':app-audit-plugin-strict-mode') implementation projectOrArtifact(':app-audit-plugin-page-performance') implementation projectOrArtifact(':app-audit-plugin-network-instrumentation') } else { implementation projectOrArtifact(':app-audit-plugin-page-performance') } }
  • 11. How we design app audit sdk dependencies { // AppAudit implementation projectOrArtifact(':app-audit') // add additional plugins and sink only on debug, integration, and nightly def buildVariant = ... if (buildVariant.isConsideredAsIntegration()) { implementation projectOrArtifact(':app-audit-plugin-memory-leak') implementation projectOrArtifact(':app-audit-plugin-strict-mode') implementation projectOrArtifact(':app-audit-plugin-page-performance') implementation projectOrArtifact(':app-audit-plugin-network-instrumentation') } else { implementation projectOrArtifact(':app-audit-plugin-page-performance') } }
  • 12. How we design app audit sdk class AppAuditInitializer { fun install() { AppAudit( app = app, metadata = metadata, plugins = getPlugins(), executor = app.getAppScope.coroutineContext.toExecutor() ) .install() } ... }
  • 13. How we design app audit sdk class AppAuditInitializer { ... private fun getPlugins(): Set<AppAuditPlugin> { val plugins = mutableSetOf<AppAuditPlugin>() if (BuildConfig.IS_PAGE_PERFORMANCE_ENABLED) { plugins.add(PagePerformancePlugin()) } ... return plugins } }
  • 14. How we design app audit sdk class AppAuditInitializer { ... private fun getPlugins(): Set<AppAuditPlugin> { val plugins = mutableSetOf<AppAuditPlugin>() if (BuildConfig.IS_PAGE_PERFORMANCE_ENABLED) { plugins.add(PagePerformancePlugin( setOf(AbcTelemetryEngine(), XyzTelemetryEngine()) )) } ... return plugins } }
  • 15. How we design page performance ●Able to capture TTFL (time to first layout) ●Able to capture TTI (time to interactive) ●Able to capture TTML (time to meaningful layout)
  • 16. How we design page performance - TTFL
  • 17. How we design page performance - TTFL
  • 18. How we design page performance - TTFL
  • 19. How we design page performance - TTFL ●Utilizing Application.ActivityLifecycleCallbacks ●Utilizing FragmentLifecycleCallbacks ●Utilizing ViewLifecycleCallbacks (a custom hook)
  • 20. How we design page performance - TTFL { ScreenName=MagicActivity, WindowName=FooView TTFL=100, TTI=300 TTML=1200, FrozenFramesCount=0, SlowFramesCount=41, TotalFramesCount=49, FrozenFramesPercentage=0.0, SlowFramesPercentage=83.67347 }
  • 21. How we design page performance - TTFL
  • 22. How we design app audit sdk class AppAuditInitializer { ... private fun getPlugins(): Set<AppAuditPlugin> { val plugins = mutableSetOf<AppAuditPlugin>() if (BuildConfig.IS_PAGE_PERFORMANCE_ENABLED) { plugins.add(PagePerformancePlugin( setOf(AbcTelemetryEngine(), XyzTelemetryEngine()) )) } ... return plugins } }
  • 23. How we design app audit sdk class PagePerformancePlugin { ... internal fun reporting(record: Record) { plugin.reportEngines?.forEach { engine -> audit.executor.execute { engine.execute(record) } } } }
  • 24.
  • 25. Key takeaway ●At the Gojek level, basic page performance metrics weren’t sufficient, hence we built an in-house, end- to-end solution to accommodate our needs. ●Mobile observability is a method through which we can confidently manage each release of the app. ●Mobile observability not only helps us capture performance in the wild but also allows us to utilize the same metrics in the development environment (shift-left approach).
  • 26. Thank You Brought to you by DevX team