If you product is primarily a mobile app, and you care about giving mobile users a great experience - read on

I have been working/consulting on a bunch of mobile apps, some with over 100M users, and I want to talk about lifecycle management, from a product PoV.

A thread 🧵👇
Let us start with an important fact - most of your power users will be having 12-15 commonly used apps on their phone.

If your users are heavy mobile users, they will have some form of social media addiction - TikTok, Instagra, Snap or Twitter.
The current state of mobile internet users is that they spend a TON of time on their screens, but they switch apps very fast (EXCEPT for the doomscrolling apps).

Attention spans have grown increasingly smaller.

This is from 5 years ago btw

venturebeat.com/2016/07/11/you…
So why all this preamble? Well because I want to bring you to this very important truth about your mobile app

You are most likely losing 15-20% users at least once during each app session - who drop off to other more addictive apps - because of long loading and lifecycle bugs.
Before we go further, let's just validate the fact that how big a problem loading times are. Everyone knows the basics

low loading time = good
high loading time = bad

But a few surveys and statistics that puts the real numbers in perspective

blog.hubspot.com/marketing/page…
Before moving on, one final article I will link to -

marketingdive.com/news/google-53…

more than half of the users cannot tolerate >3sec wait times. Website or app, the users are the same - so the behaviour applies to apps too.

But there is a slight difference....
In a website, a drop-off is a full-and-final drop off. Either someone

- types a new URL in the bar
- swipes away the tab
- goes to a different app than the browser and your website becomes one of the 99+ ghost tabs on their open tabs list
But for apps, the behaviour is slightly different. When a screen of your app takes more than 3 seconds to load, the user quickly goes to TikTok/Instagram/Snapchat/Twitter to doomscroll for a while, or the browser to continue reading that article...

...BUT THEY WILL COME BACK!
And that is where *almost all* apps (especially up and coming, new but popular apps) completely drop the ball.

What happens when your screen started loading, but the user went to a different app, and came back 2 minutes later?

Yeah. Exactly.
There are 2 primary reasons why this happens.

1. Managing lifecycle is hard. REALLY BLOODY HARD. At the most senior of mobile developer interviews, people screw up explaining managing state across lifecycles.

2. Your QA team doesn't leave the app to check their TikToks.
Now that we are where we are, how do we go about fixing this.

This is a multi-stage fix. You cannot dictate your mobile development team to suddenly "fix all the lifecycle bugs", or ask QA to just interleave TikTok browsing from tomorrow's regression test cycles.
1. Product Analysis

First we need to figure out, for our particular app, where all does this happen ?

There are 2 reasons which need to overlap. A screen needs time to load. And it is not part of an unfinished task flow.
What is an unfinished task flow? A task that involves <5 steps, is supposed to be done within a <5 min window, and if left midway, defeats the purpose with which the user started that task

eg. placing a shopping/food order.
eg. selling/buying a stock
eg. posting a reel
Steps in the middle of such flows, even if they take >3sec, heck even >10sec, will not distract the user to a different app.

Primitive human behaviour detests unfinished business, and you can rely on that for these use cases.
What are non-unfinished task flows though? Where the urgency is missing and/or the task can be resumed later, and/or the cost of failure of the flow is low to the user.

eg. checking stock portfolio
eg. shopping for non-essential items
eg. exploring feed / stalking friends
Take a stroll through these flows in your app. See all the steps where loading screens are >2sec in length.

Best is to make a global loader component, and log all the durations loader was visible along with the from and to destinations, then do this analysis.
2. State and Performance Analysis

Once the above analysis is done (and you have triaged which are the most essential gaps to plug), comes actually figuring out what gives away, and how to fix it.

a) first ofcourse is the question, why tf would any screen take >3sec to load
I will stick my neck out on this, but if there is any page on your app, that when opened (even w/o cache) is a blank page with a loader for >3sec, you have serious architectural issues

No server calls are supposed to be >200ms. No screens take >100ms to parse + render.
Rethink the product flow, insert a cache + BFF in the server call, reindex your tables. Do whatever it takes, but this shouldn't happen.

But let's assume (as it will happen), that in a 6 month time frame, you cannot fix the product flow / backend architecture
Now comes the other side of the equation

b) If someone drops off the app after they see loader for 2sec and come back to the app after a while (while = 30sec~2hr), how well can you resume the flow?

2 hour might sound outrageous, but Gen Z can get stuck in metaverse for hours
Even after a 1 hour doomscrolling break if your user comes back and can pick up where they left, you can get them to complete the flow they were on.
There are 2 particular 'bugs' to handle here. One is a behaviour carried over from browsers - people go to another app for 30s ~ 5 min and come back expecting your app to have loaded the screen meanwhile

Most apps either
1. start over loading
2. show undefined state
3. go back
Users expect the behaviour they see in browser tabs. If it is taking a while to load, they do other things and come back to see fully loaded and working website on that tab.
Give them the same experience.
The other 'bug' is when someone drops off due to loading, roams around 4-5 other apps, and then comes back to your app. They might not resume your app from the recent apps list, but directly open the app from launcher.
If in this situation your app can render the same screen (with the entire state) the user had left mid-way loading, 30 min back, there's a high chance they continue doing what they were doing (which might be desireable for your product).
Achieving this is a little harder. Obviously bug #1 must not exist, as a pre-requisite for bug #2 to be fixed. In addition to that, if the user has wandered across multiple apps, and the device has slept for a few minutes in-between, the OS might have had killed your app.
Resuming a flow from a process-killed state is not impossible. Try it with the Twitter app.

Scroll your feed a bit. Then kill the app (or even restart your phone).

Reopen Twitter (even without internet). You'll see the feed open at the exact same scroll position 🤯
3. A dev+QA culture that prevents this

Finally, this is not a one time fix. It something you do not want happening in your product ever. That will need culture shift at product, dev and QA teams.

a) App cannot be made in a sandbox different from real world conditions
Your team must be using the app on the same devices majority of your users are on. Same screen sizes, same RAM sizes, same internet speeds.

b) Test for harsher conditions

Simulate slow network conditions for example
browserstack.com/guide/how-to-s…

Simulate 15-20 background apps open
c) Respect anecdotes from your team

If non-technical people from your team murmur about "app has a slow splashscreen", do not let your developers hit them back with Firebase Performance console screenshots showing average startup time < 3sec. Dig deeper into their story.
d) Do user testing, often

Give the app to use to a user, and observe what they do. Do this both with new users who have never used the product (or do not use often), and also with seasoned users. Do this as often as feasible. Do this with diverse user profiles.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Arnav Gupta 😷 💉🟢 💉🟢

Arnav Gupta 😷 💉🟢 💉🟢 Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @championswimmer

Jan 25
I put Rs. 1 lac into @bharatpeindia #TwelvePercentClub and then shared this information on Twitter.

Earned more via referral cashbacks than I have from interest from the principal till date 😅😅
By the way, if you want to invest into #TwelvePercentClub, you can use this link

twelveclub.onelink.me/2Cmd?pid=af_ap…

Note that this is P2P lending, and thus isn't 100% risk free. But it has been 6 months for me now, no defaults yet, everyday it increases by Rs. 33
I do like the liquidity though - the app allows me to withdraw entire amount (principal + interest) at any time. I have tried doing it with Rs. 1k first and have seen it works before putting Rs. 1L here.
Read 6 tweets
Jan 25
Understanding state management is definitely like the final boss of the frontend framework game. It is sometimes to hard to wrap your head around, but it need not be.

In Flutter world, I blame BloC to be have made the thing very convoluted for beginners to understand. Image
Step 1 of understanding state should be to separate state from UI.

Many over-powered state management frameworks have mechanisms of _constructing UI from state_, which is useful for seasoned devs, but hinders beginners from learning what happens under the hood
Frameworks like Vue or Flutter which have internal mechanism of state inside their components/widgets (i.e. the UI primitives), also has a downside. People start off thinking state as a part of UI primitives, which it isn't at all.
Read 7 tweets
Jan 25
Wordle 0 4/6

⬜⬜🟨🟨⬜
⬜🟩⬜🟨⬜
🟩🟩⬜⬜🟩
🟩🟩🟩🟩🟩

Guess I'm gonna play all the wordles now!
Wordle 1 6/6

⬜⬜🟨⬜🟩
🟨🟩⬜⬜⬜
⬜🟩⬜🟨🟩
⬜🟩🟨⬜🟩
🟩🟩⬜⬜⬜
🟩🟩🟩🟩🟩
Wordle 2 6/6

⬜⬜⬜⬜⬜
⬜⬜🟨⬜⬜
🟩🟩⬜⬜⬜
🟩🟩⬜🟨⬜
🟩🟩⬜⬜🟩
🟩🟩🟩🟩🟩
Read 5 tweets
Jan 24
There used to be an internet once full of blogs, informative websites, and was true to the premise of internet being a place to search and get to know about anything.

A small cafe owner writing about recipes they experimented with or a woodworker reviewing varnishes..
Today capitalism has killed that internet. Every venture funded company has a marketing department, and the marketing department has 2 departments, one that puts up ads on Google (called performance marketing) and another that writes blog posts (called organic).
Side note: It is extremely ironic that the meaning of the word "organic" is people coming to your website without you paying to do so (i.e. by showing them ads), but today's organic marketing involves paying as much as Google ads to a whole army of "content writers". How organic.
Read 7 tweets
Jan 18
Something common to be found in large Android codebases is dimens.xml file with contents that look like this

This is a major 🚩🚩🚩🚩

It originates from overzealous developers not wanting to *hardcode pixel/dp in layout XMLs*, but it very counterproductive. Image
We need not be grammar-nazi like in our approach and go for a hard-rule on never to write android:layout_height=12dp kind of code, because from a readability perspective, there is no advantage of turning fig.1 into fig.2

@dimen/_24dp has to be 24dp right? What is the point? ImageImage
In fact, now we have opened ourselves to a whole different level of subterfuge in the code in the future.

What if, some day, (by mistake, not deliberately), someone changes these values. Perfectly possible under time-constraint, doing last-minute UI fixes. Image
Read 6 tweets
Jan 13
200 LeetCode questions in 3rd year of college.
FAANG/BigTech job in placements
2 yrs in India, then move to US (sponsored by that BigTech)
7-8 yrs of laid back 5hrs/day work, with 30-40 leaves a year and slowly climb to L5

That's how majority folks turn millionaires by 30
Doesn't sound sexy or cool. Sounds counterintuitive, that if it is that straightforward, then why aren't more people doing it ?

Well if my estimates are correct, every year at least 10000 (probably 20000) Indian techies are doing exactly that.
Don't mistake this as advice to follow this path. (Hell I didn't, myself).
Don't mistake this as an indication of this being "easy" either

Getting into those jobs is not 'easy'. The path is well known and well trodden, but takes time and effort.
Read 5 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(