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:
- Contacts management
- Faxes (yes, faxes are still a thing in 2024!)
- Chat functionality
- Phone calls with multiple states
- Conference calls and conference management
- Real-time presence indicators
Technical Challenges
The migration to SwiftUI required careful consideration of:
- State management across multiple communication channels
- Real-time event handling with Combine and Swift Concurrency
- Integration with the existing pjsip VoIP stack
- Maintaining backwards compatibility during the transition
- Performance optimization for handling hundreds of concurrent connections
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:
- Modern, responsive UI that feels native to macOS
- Improved performance and reduced memory footprint
- Better maintainability with declarative UI patterns
- Foundation for future feature development