Case study

ShopApp by Lululemon

At lululemon, I worked on the details that turn an app visit into a purchase: getting people to the right product, keeping launches on time, and making checkout feel dependable.

Senior iOS Engineer2022–2026
Team
— Large cross-functional commerce organization (iOS, backend, growth, analytics, design systems)
Industry
— Retail, Mobile Commerce

Tools & technologies

SwiftSwiftUIUIKitCombineAsync/AwaitActivityKitWidgetKitAppsflyer SDKButton SDKDeep LinkingNTPBackground TasksXCTestXCUITest

The Problem

Slow feeds, unreliable launch timing, and purchase friction could cost a sale.

The approach

How the work took shape

Make the handoff into the app work

An affiliate or influencer link had to land a guest in the right place, whether the app was installed or not. I integrated Button alongside Appsflyer and Apple Search Ads, keeping attribution intact through the journey. The 90-day Button pilot recorded $9.6M in app revenue, 34K downloads, and a reported 79% conversion lift.

Keep the shop current

Recommendation feeds were useful only if the app could load them reliably. I worked with data science teams to bring Fresh Picks and Hot & Trending into the mobile experience, then improved background refresh, image payloads, and task syncing. I also built an NTP-backed time service so device clock drift would not dictate access to a product drop.

Improve the parts guests touch

Alongside that infrastructure, I moved UIKit screens toward reusable SwiftUI patterns and helped establish Flow, the design system. Product-page work covered ratings, reviews, size selection, color grouping, and Apple Pay edge cases. Live Activities carried order progress and pickup information onto the lock screen and Dynamic Island.

The hard parts

The constraint

A campaign could bring guests into an app with stale content or incorrect launch timing.

The decision

I connected acquisition routing with better refresh behavior and an authoritative time service.

The constraint

The team had to modernize the app while continuing to ship commerce features.

The decision

Reusable SwiftUI patterns and Flow components let the migration happen through everyday product work.

Upper Funnel Focus Areas (For You, Shop Home, CDP, PDP)

Homepage

Homepage

Campaign content depended on the refresh and loading work behind the screen, particularly during busy launches.

Fresh Picks

Fresh Picks

Recommendation feeds could contain more than 600 items. Background syncing and smaller image payloads kept them usable.

Product details

Product details

Ratings, size selection, grouped colors, and payment fixes helped guests make the final purchase decisions.

Flow Design System

Pattern Library — Core Components

Buttons

Colour Tokens

Design System — Flow components

Shared SwiftUI components gave design and engineering a common foundation for new features and the migration from MVC to MVVM.

Hangs & Hitches

Instruments

Frame rate timeline

0ms

2

Hitches

1

Hangs

Hangs & Hitches

Instruments helped locate image-loading stalls, blocked homepage states, and dropped frames.

Live Activity — Order tracking

Live Activity — Order tracking

Order stages, countdowns, and pickup locations stayed available without reopening the app.

The outcome

What changed

The result

  • ✓The 90-day Button pilot recorded $9.6M in app revenue, 34K downloads, and a reported 79% conversion lift.
  • ✓A later FY26 analysis projected $59.5M in annual incremental revenue and attributed 355K downloads to Button. The revenue figure was a projection, not realized revenue.
  • ✓Shipped authoritative launch timing, background feed improvements, and fixes for loading hangs.
  • ✓Delivered Live Activities for order progress and pickup, alongside product-page improvements and reusable SwiftUI components.

Looking back

The visible improvements depended on work guests would never name: accurate time, reliable links, and data that refreshed when it should.

Flow was most useful when teams could use its components in a feature they were already shipping. That made the migration practical.

Where I contributed

Product

  • Connected acquisition, recommendations, and purchase improvements with growth and data teams.

Design

  • Helped create Flow and built native order-tracking experiences.

Engineering

  • Integrated acquisition SDKs and built time services, background refresh, and SwiftUI commerce features.