Starface Softphone Client Rewrite

The Context

I was hired to lead a complete rewrite of Starface’s enterprise softphone client during a migration from legacy Objective-C and AppKit to Swift, and SwiftUI. This wasn’t just a UI refresh – it was a complete architectural overhaul of a complex real-time communication system where the app isn’t in control of many lifecycle events.

The initial contract lasted for about 5 months to meet an important conference deadline. The year after, they were happy to get me back on board to help with adding new features, albeit on a much smaller timescale.

Personal Reflections

Using SwiftUI for a large and complex code-base with all these moving parts taught me a lot about what SwiftUI can actually do. There’s always a difference between small tutorial-size examples, a SwiftUI view here and there, and enterprise application-size code.

Reactivity-first worked really well, and SwiftUI as a transformation of state can be a beautiful match.

My personal highlight was to create a workspace designer that enables you to place widgets (like your address book, recent phone calls, and chat windows) on a grid via drag and drop, with resizing and all, rendered purely with SwiftUI.

The “problem space” at Starface is super exciting because there’s so many moving parts and events going through a phone app:

Technical Challenges

The migration to SwiftUI required careful consideration of:

Team Dynamics

At Starface, I got introduced to my now good friend and excellent developer, hacker, and engineer Oliver Epper. We continue our collaboration in ‘book clubs’ and with coding experiments, exploring new technologies and sharing knowledge beyond the project.

Before I joined, the company recently grew through acquisitions and was still findings its footing in terms of project management and how to make flat hierarchies really work. There weren’t a lot of the usual meetings (for me), but I remember fondly the professional cooperation on UX/UI with the design team, and diving deep into the weird C libraries and assembly of pjsip with Oliver.

Impact

The new SwiftUI-based client provided: