EtsyPierre RodgersProblem & solution
How We Built The Deals Tab in Swift UI
Summary
Etsy’s App Updates team rebuilt the long-standing Updates tab as Deals, a destination for coupons and sales, while targeting an October launch ahead of Cyber Week 2023. The team chose Swift UI and Tuist to create a modular, preview-driven implementation rather than extend legacy Objective-C and server-driven layout code. The screen is assembled from typed API modules, parsed with Decodable, and rendered in a Swift UI List using reusable components such as buttons, headers, footers, and listing cards. To bridge incompatible legacy listing-card code, the module accepts a view builder from the UIKit hosting controller, allowing existing cards to be wrapped while newer cards could be implemented in Swift UI. After three months, Deals shipped ahead of deadline; new modules took one sprint or less, previews decoupled front-end work from API support, and the tab increased session conversion and app visits after its mid-October rollout.
Context
The Updates tab had accumulated multiple purposes, combining favorite-shop and listing updates with shopping journeys. Coupons for abandoned cart items were among its most acted-upon content, motivating a clearer Deals destination. The team also needed to ship before Cyber Week while avoiding scalability and performance issues associated with legacy Objective-C and server-driven layout code.
Approach / What changed
The team built Deals as a Swift-based Tuist module using Swift UI, typed API module responses, Decodable parsing, reusable components, Swift UI previews, and a List for cell reuse. A view builder supplied by the UIKit hosting controller bridged legacy listing-card models and views into the new module, while allowing some cards to be implemented directly in Swift UI.
Takeaways
Moving the Deals work into a Swift-based Tuist module made Swift UI previews nearly instant and kept app recompilation fast when changes stayed within the framework.
Typed module responses and Decodable parsing made module handling clearer, while reusable components supported additions such as optional footers without anonymous component-based models.
A UIKit-provided listing-card view builder preserved access to legacy cards, preventing Swift UI implementation unknowns from blocking the deadline and later enabling partial migration to native Swift UI cards.
Source and freshness
- Source
- etsy.com
- Published
- Added to Yomu
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.