SB/serdar
All projects

Diconium (for Volkswagen Group) · 2018 — 2021

Volkswagen — Connected Owner App

iOS Engineer → Senior iOS Engineer

The companion iOS app connecting Volkswagen drivers to their vehicles — remote status, trip data, and configuration — rebuilt module by module inside a large, long-lived, multi-brand codebase.

SwiftObjective-C MigrationSwift PackagesSwiftUI
Volkswagen — Connected Owner App — screenshot

Problem

The owner app had grown over years into a large Objective-C codebase shared, with variations, across several Volkswagen Group brands. Build times were slow, ownership boundaries were unclear, and every feature team touched the same tangled set of files — all while the app kept shipping monthly releases to a large existing user base.

Approach

I helped lead an incremental migration strategy: extracting features into local Swift packages one at a time, rewriting each in Swift as it moved, and using Objective-C/Swift interop as a bridge rather than attempting a risky rewrite. In parallel, I led a screen-by-screen migration from UIKit to SwiftUI for newer feature areas, chosen deliberately to avoid destabilizing the app's most business-critical flows first.

Architecture

The end state organized the app as a set of independently buildable Swift packages by feature domain — vehicle status, trip history, remote configuration — each with its own tests and a thin app target composing them together. Shared utilities and networking lived in foundational packages that feature packages depended on, never the reverse.

Technical Decisions

Incremental migration over a rewrite

A full rewrite would have frozen feature delivery for a product with monthly release commitments to a large user base — module-by-module migration let the team keep shipping while paying down debt.

Package boundaries drawn around feature ownership

Structuring packages to mirror team boundaries — not just technical layers — made the modularity actually stick, because each team had a package they were accountable for.

Challenges

  • Migrating Objective-C to Swift without introducing regressions in an actively-shipping, multi-brand codebase.
  • Cutting incremental build times that had grown to slow the whole team down.
  • Coordinating a SwiftUI migration across teams with different appetites for the new framework.

Results

  • Cut incremental build times significantly by restructuring the app into local Swift packages.
  • Delivered an Objective-C to Swift migration plan later adopted as the template for sibling brand apps.

Lessons learned

  • Modularity pays for itself fastest when package boundaries match team boundaries, not just architectural layers.
  • The safest way to migrate a large legacy codebase is the boring way: small steps, strong tests, and shipping the whole time.