Telemetry Over Events: Developer-Friendly Instrumentation at American... Ace Ellett & Kylan Johnson

CNCF [Cloud Native Computing Foundation]
29 Jun 202413:22

Summary

TLDRIn this insightful talk, Kylin Johnson, the Android Lead for the mobile team at AMX, discusses the company's journey with Telemetry, emphasizing the importance of observability in mobile app development. Starting from scratch, the team focused on understanding user experience through real user monitoring and manual instrumentation. They tackled challenges like app startup, server connections, and complex user journeys, highlighting the need for developers to be experts in their features while the embedded system team supports Telemetry principles. The talk concludes with lessons learned, emphasizing the value of custom events and testing in ensuring effective observability.

Takeaways

  • πŸ˜€ The speaker, Kylin Johnson, is the Android Lead for the mobile team at AMX, discussing the company's journey with telemetry and observability in mobile apps.
  • πŸ”§ AMX started with no telemetry in their mobile app and aimed to understand user experience and app performance from the customer's perspective.
  • πŸ“ˆ They focused on real user monitoring and observability to gauge how the app felt to use, especially during app startup which is critical for user experience.
  • πŸ“± The mobile team, including both Android and iOS, worked on manual instrumentation to capture telemetry data for tens of millions of users across multiple countries.
  • πŸš€ Kylin emphasized the importance of making observability a first-class feature in the application architecture, integrating it into the build process and development workflow.
  • πŸ›  The team faced challenges in abstract modeling and the cognitive load of introducing new APIs to developers already dealing with a rapidly evolving Android landscape.
  • πŸ”„ They built a protocol for logging in, which included sending a login request, decoding JSON, scanning biometrics, and handling multi-factor authentication (MFA).
  • πŸ“Š Kylin highlighted the complexity of what seems like a simple journey from login to landing page, with many potential 'bumps' in the process that need to be monitored.
  • πŸ‘₯ The speaker stressed that developers should be experts in their features, with embedded specialists like Kylin being the experts in telemetry and observability.
  • πŸ”„ The team learned to simplify the telemetry process by using events and signposts that everyone can understand, making it easier to implement and maintain.
  • πŸ“ Kylin advocated for constantly reviewing and refining metrics to ensure they provide value and lead to actionable decisions, removing any that do not.
  • πŸ›‘ The AMX team created a clear barrier between the app's functionality and the telemetry measurement, encapsulating the 'how' of measurement separately from the 'what' of the app's decisions.

Q & A

  • Who is the speaker in the provided transcript?

    -The speaker is Kylin Johnson, the Android Lead for the mobile team at AMX.

  • What is the main focus of Kylin Johnson's talk?

    -The main focus is on the telemetry journey of the mobile team at AMX, specifically discussing the implementation of observability and real user monitoring in their mobile application.

  • Why did AMX decide to start with app startup as the critical measurement point?

    -AMX decided to start with app startup because it is a critical point where the app is not in memory and the user experience can be significantly impacted by the time it takes to instantiate components and render the UI.

  • What is the significance of progressive rendering in the context of the talk?

    -Progressive rendering is significant as it aligns with user profiles and device usage patterns, allowing for a more efficient and user-friendly experience by loading and displaying content in parts rather than waiting for everything to load at once.

  • How does the mobile team at AMX approach server connection issues?

    -They initially assumed server connection would be the most critical and error-prone aspect to measure. However, with a coexistent server team and a tight API contract, they found that server issues were less of a concern than initially thought.

  • What is the importance of observability as a first-class feature in the development process?

    -Observability as a first-class feature ensures that it is integrated into the architecture and the development process from the start, making it easier to maintain, understand, and improve the application based on real user data and feedback.

  • How does Kylin Johnson describe the complexity of the login journey in the mobile app?

    -Kylin describes the login journey as very complex, involving multiple steps such as biometric scanning, multi-factor authentication, and rendering the final view, which can vary depending on the user.

  • What is the role of the login Observer in the Android application architecture?

    -The login Observer is used to monitor and record the login process, sending the result of the login attempt to an Observer, which is part of the dependency injection setup in the Android application.

  • Why is it important to separate the 'what' from the 'how' in the context of telemetry?

    -Separating the 'what' from the 'how' allows developers to focus on the app-level decisions without being distracted by the specifics of how the telemetry is measured, making the system more adaptable and easier to maintain.

  • How does the mobile team at AMX ensure the reliability of their telemetry data?

    -They ensure reliability by testing everything at scale, including the observability features. They assert the occurrence of traces, the presence of child spans, and various tags and metadata to validate the telemetry data.

  • What is the final takeaway from Kylin Johnson's talk regarding telemetry and observability?

    -The final takeaway is the importance of customizing and adapting telemetry to fit the specific needs of the application and the team, ensuring that all developers can participate in and benefit from the observability features.

Outlines

00:00

πŸ“± Mobile Telemetry Journey at AMX

Kylin Johnson, the Android Lead for the mobile team at AMX, discusses the company's early steps in mobile telemetry, focusing on understanding app performance from a user's perspective. The team aimed to monitor real user experiences at scale, especially app startup times, which are critical in the Android world due to the instantiation of many components. They initially faced challenges with manual instrumentation and server connection errors, assuming these would be the primary bottlenecks. Kylin emphasizes the importance of observability as a first-class feature in app development, integrated into the build process and architecture to ensure ease of adoption and scalability.

05:01

πŸ” Implementing Telemetry for User Journeys

This paragraph delves into the complexities of implementing telemetry for user journeys, particularly the login process. The speaker explains the cognitive load for developers in understanding and abstractly modeling telemetry principles. The login journey, which might seem straightforward, is revealed to be intricate, involving multiple steps such as biometric scanning and multi-factor authentication (MFA). The speaker advocates for a simplified approach to telemetry, using events and spans to instrument features without disrupting the development process. The goal is to make telemetry an intuitive part of development, allowing for easy tracking and measurement of critical events within the app.

10:02

πŸ›  Adapting and Learning from Telemetry Implementation

The final paragraph highlights the lessons learned from implementing telemetry at AMX. It emphasizes the importance of developers focusing on their features while the telemetry team provides expertise in observability. The speaker discusses the need for a clear separation between app-level decisions and measurement techniques to avoid confusion and ensure that telemetry remains an adaptable and valuable tool. The company's approach to testing telemetry at scale and asserting the presence of expected traces and spans is mentioned, showcasing a commitment to quality and precision in their observability practices. The speaker concludes by encouraging a review of metrics to ensure they provide actionable insights, advocating for the removal of any metrics that do not contribute to decision-making.

Mindmap

Keywords

πŸ’‘Telemetry

Telemetry refers to the measurement and transmission of data from a remote source, which in the context of this video, is used to monitor and understand the performance and user experience of a mobile application. It is a key concept in the video as the speaker discusses the implementation of telemetry principles to gain insights into how the mobile app is used at scale, across different user scenarios and network conditions.

πŸ’‘Observability

Observability in this video is related to the ability to understand the internal state of a system by only observing its outputs, which is crucial for monitoring and diagnosing issues in software applications. The speaker emphasizes the importance of making observability a first-class feature in app development to ensure that developers can easily measure and analyze the performance and user interactions with the app.

πŸ’‘Mobile Team

The term 'Mobile Team' refers to the group of developers and professionals working on the mobile application mentioned in the video. The speaker, Kylin Johnson, identifies as part of this team, specifically as the Android Lead, indicating that the team is responsible for the development and monitoring of the mobile application's performance across Android devices.

πŸ’‘Manual Instrumentation

Manual Instrumentation is the process of adding code to a software application to collect data about its operation, such as performance metrics or user interactions. In the script, the speaker discusses the engineering effort involved in manually instrumenting the mobile app for telemetry, which is critical for understanding the app's behavior and user experience.

πŸ’‘User Journey

A 'User Journey' in the context of this video describes the path or sequence of actions a user takes when interacting with the mobile app. The speaker mentions that understanding the user journey at scale is important for capturing the real user monitoring experience, highlighting the need to analyze these journeys to improve app performance and usability.

πŸ’‘App Startup

App Startup refers to the initial loading and startup process of a mobile application. The video discusses app startup as a critical aspect to measure, as it is the first interaction a user has with the app and can significantly impact the user's perception of the app's performance. The speaker mentions that understanding app startup times is essential for improving user experience.

πŸ’‘Progressive Rendering

Progressive Rendering is a technique used in web and app development to improve user experience by gradually loading and displaying content as it becomes available, rather than waiting for all content to load at once. The speaker mentions that they have been moving towards more progressive rendering, which aligns with user behavior and expectations in modern app usage.

πŸ’‘Server Connection

In the context of this video, 'Server Connection' refers to the communication link between the mobile app and the backend servers. The speaker discusses the importance of measuring and monitoring server connections as they can be a critical factor affecting app performance and reliability, especially in scenarios where network conditions are poor.

πŸ’‘API Contract

An API Contract is an agreement between the client and server sides of an application on how data will be exchanged and processed. The speaker mentions that having a tight API contract is beneficial for ensuring consistency and reliability in the application's functionality, as features are developed in tandem between the client and server sides.

πŸ’‘Biometric Authentication

Biometric Authentication is a method of verifying the user's identity using unique biological characteristics, such as fingerprints or facial recognition. The video script discusses implementing biometric authentication as part of the login process in the mobile app, which is an example of enhancing security and user convenience.

πŸ’‘Multi-factor Authentication (MFA)

Multi-factor Authentication (MFA) is a security process that requires users to provide two or more verification factors to gain access to a resource. In the script, the speaker talks about the implementation of MFA in the app as an additional security measure, which adds complexity to the login process but is important for protecting user accounts.

πŸ’‘Custom Events

Custom Events in the context of this video are user-defined actions or occurrences within the app that are tracked and measured for telemetry purposes. The speaker mentions custom events as a way to adapt to different observability backends and to capture specific user interactions or app behaviors that are not covered by standard telemetry.

Highlights

Introduction to AMX's mobile team's Telemetry journey and the importance of understanding app performance from a customer perspective.

Kylin Johnson's role as the Android Lead for the mobile team and the collaborative effort with the iOS team for manual instrumentation.

The initial challenge of having no traces or metrics in the app and the decision to focus on app startup as a critical aspect of user experience.

The complexity of app startup, including the instantiation of components and potential bottlenecks.

Assumptions about server connections being the most critical to measure and the importance of error handling in network loss scenarios.

The coexistence of the server team with the mobile team, ensuring tight API contracts and feature parity between client and server.

The concept of observability as a first-class feature in application development, emphasizing its integration into the build process.

The cognitive load for developers in understanding and implementing new APIs for Telemetry, such as span production.

The importance of modeling user journeys, such as login, with Telemetry to capture the complexity and multiple touchpoints.

The evolution from basic manual instrumentation to a more sophisticated and adaptable Telemetry system.

The use of events and spans to create a flexible and understandable Telemetry protocol that can be implemented by all developers.

The significance of separating the 'what' of app decisions from the 'how' of measurement to maintain clarity and focus.

The necessity of testing observability at scale, including asserting the presence and accuracy of traces and spans.

The lessons learned from the Telemetry journey, emphasizing the need for developers to focus on their features while experts handle Telemetry.

The importance of reviewing and refining metrics to ensure they provide value and lead to actionable decisions.

The adaptability required in dealing with multiple observability backends and the custom events created to accommodate this.

The final takeaway on the value of a well-integrated and adaptable Telemetry system in understanding and improving user experience.

Transcripts

play00:00

well uh good afternoon everybody it's a

play00:01

pleasure to be here and join the other

play00:03

speakers uh and just share a little bit

play00:05

about how we do this at AMX uh we're I

play00:08

think early a little bit on the mobile

play00:10

team with our Telemetry Journey but of

play00:12

course as kind of has been stated here

play00:14

our our backend story with open

play00:16

Telemetry Telemetry is much further

play00:18

along my name is uh kylin Johnson I am

play00:21

the Android s Lead for the mobile team

play00:24

uh my colleague Ace who's my iOS

play00:26

counterpart couldn't be here but we do

play00:29

uh we we the engineering effort for

play00:31

manual instrumentation uh for the entire

play00:33

mobile app which is uh you know tens of

play00:36

millions of users multiple countries def

play00:39

definitely all the permutations that

play00:40

were mentioned in the prior talks were

play00:42

were right there with

play00:45

them I actually started being a feature

play00:47

developer that's how I started at MX and

play00:49

we had this opportunity or at least this

play00:52

desire in some of our leadership to

play00:54

actually learn more about how our app

play00:57

was running its scale this is a few

play00:59

years ago at this point but it started

play01:00

with this basic question of how does it

play01:02

feel to use a mobile app a little bit

play01:04

real user monitoring um and we wanted to

play01:07

use Telemetry principles use

play01:09

observability just to to actually do

play01:10

this and we wanted to really understand

play01:12

it from the customer perspective uh for

play01:14

some of our most travel Journeys it was

play01:17

really about um we have short sessions

play01:20

on our app in general so we wanted to

play01:22

understand at scale in all the different

play01:24

permutations what a user was uh

play01:28

experiencing now we to do this when we

play01:30

started out at Ground Zero we had zero

play01:32

traces or zero metrics zero anything um

play01:35

in the app when we started this so we

play01:37

said okay if we want to understand how

play01:39

it feels of course app startup is going

play01:40

to be the critical thing your app is not

play01:42

in memory now it is in our in our world

play01:45

in Android World um we instantiate a lot

play01:47

of a lot of uh components at that time

play01:50

so this can be a bottleneck and the user

play01:51

can't use your app until it's

play01:53

done we we assumed that there was a lot

play01:55

of large view loads where we make a

play01:57

chunky server call and then we get a

play01:59

resp response and then it takes however

play02:01

long it takes to actually render the

play02:02

Chrome and uh you know we generally at

play02:06

this time we're full screen spinner so

play02:08

again you're just kind of waiting for

play02:09

whatever to uh to

play02:12

render now lately we've been doing much

play02:14

more um Progressive rendering um which

play02:17

is not as common but this is more in

play02:19

line with user profiles and what users

play02:21

are actually using the device um they

play02:24

might have one to four different

play02:26

requests on one screen and uh and are

play02:30

you considering the load to be when the

play02:32

first one is there when the last one is

play02:34

there there's a modeling question here

play02:35

that of course we ran into when we

play02:37

started to manually instrument

play02:40

everything but beyond that we we

play02:43

obviously thought that the server

play02:44

connection were actually going to be the

play02:45

most critical thing to measure that it

play02:47

would be the most uh error prone thing

play02:50

that it would of course we assume that

play02:51

everybody's going into a Subway at any

play02:53

given moment and loses all network

play02:55

connection and so any errors that we

play02:57

might have um would be a result of the

play02:59

Server Connection now fortunately for us

play03:02

our server team is coexistent on our

play03:04

team um we actually build features with

play03:06

the server and the client all at once so

play03:09

if a if a feature ships on the client it

play03:11

actually ships on the server too so you

play03:13

keep a tight API contract there which is

play03:15

good um so for all intents and purposes

play03:18

this is the application right here we

play03:20

would consider the server actually as

play03:22

part of the mobile application because

play03:23

of it's tight

play03:25

coupled but of course uh the number one

play03:27

Journey so what we're going to do now is

play03:28

we're going to just basically go back

play03:30

uh the most important the first journey

play03:31

that we did and a little bit of the

play03:33

Lessons Learned uh building this out

play03:34

building all this Telemetry out wrong

play03:37

button you get to see this wonderful

play03:39

animation

play03:42

again there we go log and flow it's kind

play03:45

of the boring flow but it's also the one

play03:47

that's underlooked it's maybe overlooked

play03:49

is a better word like uh people this is

play03:52

the oldest part of the app it's the

play03:53

architecture that's least compliant to

play03:55

the to the modern everything and this is

play03:58

the most traveled one which is a little

play04:00

bit ironic if you think about it so

play04:01

we're going to talk about this the rest

play04:02

of the time we instrumented this journey

play04:03

we wanted to understand this journey

play04:05

because this is what everybody has to go

play04:07

through and it's largely uh the most

play04:09

it's definitely the most important

play04:11

one but along this whole thing we we

play04:14

think that observability should be a

play04:15

first class feature of any application

play04:17

and everything that was said earlier

play04:18

about mobile apps is completely true I

play04:20

can tell you from firsthand experience

play04:21

mobile architectures are polyglot at

play04:24

best there there's probably three

play04:26

versions of them within an application

play04:28

and it's it's constantly evolving

play04:30

but if and then we are actually a

play04:32

feature team driven uh organization

play04:34

development team for you know the four

play04:36

or so people that are SES there's dozens

play04:38

of of developers working on the platform

play04:40

so unless you bake something into your

play04:43

build process unless you bake something

play04:45

into how you build the software it's

play04:46

just not going to get it's going to be

play04:48

harder than it should be so

play04:50

observability being a first class

play04:51

feature means we're testing it we're uh

play04:54

it's it's baked in the architecture it's

play04:56

just the way you do

play04:57

things this is just an example I didn't

play04:59

pull this out to throw any shade it's

play05:01

just this is the example you're going to

play05:02

get so if I was going to have to

play05:04

describe to somebody how to make a span

play05:05

how to produce a span and then introduce

play05:08

our team to it this is what I would tell

play05:10

them and it was interesting to me that

play05:12

it was way more of a cognitive load for

play05:14

them to actually understand this I mean

play05:16

they're under pressures with all the

play05:18

things that Google is putting out on a

play05:19

daily basis Android is moving very

play05:21

rapidly so yet another API to learn is

play05:25

is hard because then they have to

play05:26

actually do the abstract modeling um

play05:28

which is something we on the S side but

play05:31

is not necessarily in their

play05:33

wheelhouse so we're going to build up a

play05:35

protocol here this is how we're going to

play05:37

model our login we're going to send a

play05:39

login request that's unsurprising we're

play05:41

going to decode all the Json um and then

play05:44

render it of course eventually but first

play05:46

we're going to scan biometric because

play05:49

and you'd be surprised at how many

play05:50

people don't do biometric even though

play05:52

it's very readily

play05:53

accessible um of course after all of

play05:56

this was already done then of course we

play05:58

had to implement multiactor authentic

play06:00

which was uh just another bump in the

play06:02

line and then you get to the logged in

play06:04

View and I didn't even include half the

play06:06

things that are actually bumps in the

play06:07

line here so what we thought of course

play06:09

is as an easy journey of just getting

play06:11

from login to landing page it's actually

play06:14

very very complex not to mention team

play06:17

biometric did that one team MFA did that

play06:20

one and then of course the landing page

play06:23

it depends on which user you are which

play06:25

so when you want to actually quote

play06:26

unquote stop the clock which place in

play06:29

the code is called well it could be n

play06:32

number of them so this problem is just

play06:34

it's it's much more complex than what

play06:36

you might think so we're just going to

play06:37

go with a basic example of what we did

play06:40

um we've since built on top of this but

play06:43

this is just where anybody could get

play06:44

started if you have any architecture in

play06:46

Android if you're using fragments

play06:48

activities view models whatever you're

play06:50

using you might have a view model view

play06:53

model is going to have a login button

play06:54

that login button just going to have a

play06:55

login service and I'm I'm simplifying

play06:58

this a bit obviously but then what we're

play07:00

going to do is we're going to take a

play07:01

login Observer if you're on Android

play07:04

you're using dependency injection for

play07:05

all the things and so you're going to uh

play07:08

get this login Observer and then

play07:10

alongside of what you were doing anyway

play07:12

so we're just assuming that you were

play07:14

already doing all of this we're just

play07:16

going to call login received and send it

play07:18

the result of what actually happened and

play07:20

this is going to be one bump in the line

play07:22

you're going to do this throughout the

play07:23

application and you're going to send

play07:25

only the critical things to The Observer

play07:28

that need to be modeled

play07:30

so what we get here is basically just

play07:31

instrumentation via events we're just

play07:33

abstracting it away to its most

play07:35

primitive kind of shape and we're just

play07:37

going to take the architecture is very

play07:39

Hub and spoke and it's contributing

play07:41

around the code base um you know it

play07:45

doesn't matter if it's a network client

play07:47

as was stated earlier we have I think

play07:48

we're up to like 310 Gradle modules now

play07:51

um some of them are cotlin some of them

play07:53

are Androids some of them are just

play07:55

holding Json basically there's so many

play07:57

modules so build build speed um

play07:59

repeatability ease of readability is is

play08:02

critical here so we want a very flexible

play08:04

API to be able to do what we want to do

play08:07

which is time this event so but even

play08:10

beyond that we want everybody

play08:12

participating in this conversation we're

play08:14

about to have here so it's it's very

play08:17

easy for me to get stuck on numbers and

play08:19

traces and everything that's that's the

play08:21

result but if you boil it down like this

play08:23

everybody in the organization can kind

play08:25

of participate in building value here so

play08:29

of course when these events are emitted

play08:32

this is what we're going to build up

play08:33

we're going to say we started the login

play08:35

biometric o is is running login request

play08:38

is then being issued which actually

play08:40

stopped the biometric offs span from

play08:42

running then we of course finished it

play08:44

now the orange one just denotes that

play08:46

it's an HTTP span that's that's its only

play08:48

distinction

play08:49

here but a single event here can then

play08:53

stop and start spans and these optional

play08:55

spans become very easy to implement then

play08:58

so before if you you have many uh a lot

play09:00

of state and you want to basically

play09:03

instrument a feature you want to get out

play09:04

of the way of the feature and if you

play09:06

just have to deal with these sign posts

play09:09

that everybody can understand and

play09:10

everybody can um Implement well then we

play09:12

can kind of proceed a little bit quicker

play09:14

here so we're going to start that MFA of

play09:16

course that MFA team now realizes they

play09:18

can actually use metrics so then they

play09:20

want to count how many times that's just

play09:22

a trivial example but then we can add

play09:24

events really easily we we've actually

play09:26

built up what you're seeing here over

play09:28

the course of many many iterations this

play09:30

wasn't like one and done and we did it

play09:33

it's well now we realize we can do that

play09:35

oh we realize a metric is better here we

play09:37

realize that um this is excellent as a

play09:40

as a Spam but it's hard to um it's hard

play09:43

to collect its

play09:46

scale um of course we turn things into

play09:48

metrics we turn spans into metric so we

play09:50

realize we want to time that view

play09:52

interactive and and uh we just keep keep

play09:55

bumping along but this final picture is

play09:57

actually what's the most uh valuable

play09:59

here because we've had product owners

play10:02

that are really interested in what we

play10:04

see here um developers are more

play10:07

interested in this part than how to get

play10:08

there they really just want the span to

play10:10

to turn into this and it's up to us to

play10:14

uh to make it happen so these simple

play10:16

techniques of turning um building into

play10:18

the architecture we think really help

play10:21

with adoption of just Telemetry

play10:23

principles here our big lessons learned

play10:26

from all of this is developers should

play10:28

really just be the experts in their

play10:29

features we're we're embedded s we're

play10:32

supposed to be the experts in all of

play10:33

this but we can't necessarily expect all

play10:36

developers to do it so if you're asking

play10:38

a junior developer or a senior developer

play10:41

I've had both come up and and and say

play10:43

they don't know any anything about spans

play10:45

what they mean how do they use them what

play10:47

the effect of it is but they do know

play10:49

their feature and so we can work with

play10:51

them to kind of explain their feature

play10:52

describe it make the architecture more

play10:55

observable first we just kind of took a

play10:57

trivial example that anybody could do

play10:59

but iOS is very event Loop driven they

play11:02

are basically an actor pattern so they

play11:04

have events going up and down all the

play11:06

time which lends itself to being very

play11:08

observable they also wouldn't do any

play11:10

dependency injection they're very

play11:12

against that they're very functional so

play11:14

um if you break it down to these

play11:16

Primitives both IOS and Android can talk

play11:19

at the same terms because we're just

play11:20

talking about starting and stopping

play11:22

clocks we're talking starting about

play11:23

we're talking about describing what the

play11:26

spans are not necessarily that it is a

play11:28

span

play11:29

and if you aren't getting value out of a

play11:31

metric I think you should constantly

play11:33

review all your metrics we don't want to

play11:35

turn on auto instrumentation just for

play11:37

the sheer fact that not that we lose

play11:39

data but we want to understand what's

play11:41

there and it has to lead us to a

play11:42

decision if if some Metric or alert or

play11:45

whatever is not leading us to a decision

play11:47

to change code or update something we

play11:50

want to we want to remove it basically

play11:53

only thing that should be there is what

play11:55

provides value and then this is just a

play11:57

basic encapsulation if you're a software

play11:58

developer you kind of want to separate

play12:00

the what from the how an API that we

play12:02

don't control even though we love open

play12:03

source at AMX we want to make a clear

play12:06

barrier between um what is native to the

play12:09

app and then what is just measuring the

play12:11

thing and that kind of sounds uh a

play12:14

little bit like it's an open source why

play12:16

why don't just use open source well we

play12:18

don't necessarily want to draw attention

play12:19

to all these spots in our app because

play12:21

they tend to collect everything you'll

play12:22

have a local profiler wrapping a span

play12:24

wrapping a another version of

play12:26

benchmarking or something so we want

play12:29

separate out what is an app level

play12:31

decision versus how we're measuring it

play12:33

and you can just actually test this I

play12:35

kind of glaze over testing a little bit

play12:36

we test everything at scale and even the

play12:38

observability is tested so if a trace is

play12:41

supposed to be emitted from a UI run we

play12:44

actually assert that it happened we

play12:45

assert all the child spans on it and we

play12:47

assert uh you know just various tags and

play12:50

uh metadata about it we really value

play12:54

that but that is all I have thank you

play12:57

very much for listening I'm happy to

play12:58

take questions but I know it is

play13:00

lunch these are custom completely custom

play13:03

events uh I actually pulled up more of

play13:05

the events uh just on my laptop there

play13:08

we've had to do we we are very much that

play13:10

five observability backends kind of

play13:12

story so I've we've had to be adaptable

play13:15

and that was the main point of this was

play13:16

just to be adaptable but yes we we want

play13:19

to look into the events API

Rate This
β˜…
β˜…
β˜…
β˜…
β˜…

5.0 / 5 (0 votes)

Related Tags
Mobile TelemetryObservabilityAMX InsightsApp PerformanceReal User MonitoringAndroid LeadiOS LeadManual InstrumentationUser ExperienceBackend StoryCustom Events