cleanup
This commit is contained in:
@@ -1,127 +0,0 @@
|
||||
# Bluesky × Software Mansion — Expo 55 / New Architecture Migration
|
||||
|
||||
This document covers the outcomes we care about, how we'd like to work together, and how we'll measure success.
|
||||
This brief gives them the goals, constraints, and targets needed to determine all of the above. Much of this is open to discuss
|
||||
or change; the goal of this brief is to give a baseline.
|
||||
|
||||
---
|
||||
|
||||
## 1. Goals of the engagement
|
||||
|
||||
Four goals anchor this work. Everything else serves these:
|
||||
|
||||
1. **Reduce the technical burden** of maintenance and ongoing improvement.
|
||||
2. **Reduce reliance on patches.**
|
||||
3. **Remove or replace incompatible libraries.**
|
||||
4. **Remove or rework features** where doing so serves goals 1–3.
|
||||
|
||||
From those, the outcomes that define success:
|
||||
|
||||
- **Land Expo 55 / New Arch / Reanimated 4 across iOS, Android, and web** with **no
|
||||
performance regressions** on our priority surfaces — and ideally measurable gains.
|
||||
- **Establish objective, repeatable performance measurement.** We do not have a process
|
||||
for measuring performance objectively today. We want to come out of this with reasonable baselines and existing deltas.
|
||||
This will help us with establishing perf practices within CI down the road.
|
||||
|
||||
During the engagement, we'd propose two collaborative pieces:
|
||||
|
||||
1. When a surface is slow or a component is hard to migrate, we want SWM to identify *why* and bring it back to us with options, unless there is a known/hardened workaround with low stakes.
|
||||
2. **A QA-driven discovery pass is welcome.** One model on the table: enable New
|
||||
Architecture, run a thorough QA pass across the app, enumerate the issues that emerge, then
|
||||
jointly prioritize them into fix-now / we-fix / backlog. We're open to SWM's preferred
|
||||
variant of this.
|
||||
|
||||
---
|
||||
|
||||
## 2. Performance: targets & success criteria
|
||||
|
||||
We don't have an objective performance process today; establishing one is a goal of ours.
|
||||
The targets below are our starting success criteria, sourced from platform guidance
|
||||
(Apple talks, Android vitals), web vitals, arithmetic on frame budgets, and team practice.
|
||||
|
||||
**These are a starting point.** We'd welcome SWM validating and refining them against real
|
||||
baselines on real devices, especially any that lean on judgment calls.
|
||||
|
||||
### Hard-sourced targets
|
||||
|
||||
| Metric | Target | Borderline | Broken |
|
||||
| ----------------------------- | -------- | ---------- | --------- |
|
||||
| Hitch time ratio (iOS) | < 5 ms/s | 5–10 ms/s | > 10 ms/s |
|
||||
| INP interaction latency (web) | < 200 ms | 200–500 ms | > 500 ms |
|
||||
|
||||
**Frame budgets:** 60 Hz ≈ 16.6 ms · 90 Hz ≈ 11 ms · 120 Hz ≈ 8.3 ms.
|
||||
|
||||
**Android frames:**
|
||||
- *Slow frames* = 16 ms–700 ms. Excessive = > 50% of frames missing the 16 ms deadline per
|
||||
session.
|
||||
- *Frozen frames* = > 700 ms. Excessive = > 0.1% of frames over 700 ms per session.
|
||||
|
||||
### Engineering-best-practice targets
|
||||
|
||||
| Metric | Target | Borderline | Notes |
|
||||
| ------------------------------ | ------ | ---------- | ------------------------------------------------------------------------------------------------------- |
|
||||
| Feed scroll UI FPS (60 Hz) | ≥ 58 | 50–57 | Smooth within ~1 frame of refresh rate is the consensus bar. |
|
||||
| Feed scroll UI FPS p10 (60 Hz) | ≥ 52 | 45–52 | p10 catches occasional jank the median hides. Generalized threshold. |
|
||||
| Feed scroll UI FPS (120 Hz) | > 110 | 90–109 | ProMotion can legitimately drop to ~80 under thermal load; expect false positives. |
|
||||
| JS FPS during animations | ≥ 50 | 40–50 | Worklets run on the UI thread, so this is a JS-starvation / tap-response indicator, not scroll quality. |
|
||||
| Cold start TTI | < 2 s | 2–5 s | |
|
||||
|
||||
---
|
||||
|
||||
## 3. Priority surfaces
|
||||
|
||||
Our priority surfaces, ranked by importance:
|
||||
|
||||
1. **Feed scroll**: the central performance concern. Reanimated wraps effectively every
|
||||
list, and this is where the jank lives.
|
||||
2. **Lightbox**
|
||||
3. **Context menu**: measured as long-press-to-visible time.
|
||||
4. **Dialog / bottom sheet**
|
||||
5. **Pager**
|
||||
|
||||
Baseline surfaces we specifically care about: **feed scrolling, lightbox, and composer.**
|
||||
|
||||
**Specific area of interest is Reanimated in lists, and the pager.** We suspect the pager
|
||||
forces Reanimated into the scroll path for our lists. We'd value SWM's read on whether
|
||||
removing or reworking the pager would let lists shed Reanimated, and what that buys us.
|
||||
We're open to a significant rework here if the performance case supports it.
|
||||
|
||||
---
|
||||
|
||||
## 4. Device matrix & measurement methodology
|
||||
|
||||
Device matrix (three tiers) to cover our usage bases:
|
||||
|
||||
- **High-end iOS** (e.g., a recent ProMotion iPhone)
|
||||
- **Mid-range Android**
|
||||
- **Bottom-tier Android** — Go-class / ≤ 3 GB RAM
|
||||
|
||||
**Per-device baseline captures:**
|
||||
|
||||
- Feed scroll FPS during a 30-second flick
|
||||
- Context-menu long-press-to-visible time
|
||||
- Dialog-open frames
|
||||
- Cold-start TTI
|
||||
|
||||
**Existing tooling to build on.** The repo already has `flashlight` + `maestro` perf
|
||||
scripts (`perf:test`, `perf:test:measure`, `perf:measure`) as a starting point.
|
||||
We're open to ideas on what to add/change/remove for this.
|
||||
|
||||
**Understanding the perf delta.** We'd like to baseline across all three devices, then
|
||||
migrate a perf-critical surface (likely feed scroll) and remeasure — so we can see a clean
|
||||
before/after delta and understand the real performance gaps before sizing the rest of the
|
||||
work. Also open to a better method/surface of determining the deltas.
|
||||
|
||||
---
|
||||
|
||||
## 5. Open questions for SWM
|
||||
|
||||
Not needed immediately, but comes to mind while thinking through the full engagement:
|
||||
|
||||
- For **bottom sheets and video** — what are we doing that's already been solved upstream?
|
||||
- What **custom modules and patches** can be retired because Expo or the ecosystem now
|
||||
covers them?
|
||||
- Given how heavily we lean on Reanimated in lists, **where's the biggest perf win** — and
|
||||
is removing/reworking the pager part of it?
|
||||
- What **performance targets** would *you* set, given the baselines?
|
||||
- Which **surface should we pilot first** for the cleanest perf delta?
|
||||
Reference in New Issue
Block a user