Senior iOS EngineerPeanut App, UKAugust 2022 – September 20233-person iOS team
The Challenge
When I joined Peanut as a Senior iOS Engineer, the app was using UIKit extensively throughout its codebase. As we kept getting requests to modify content in storyboards and these requests were becoming larger and more complex, it became clear that we needed a better approach. The legacy code was making it increasingly difficult to implement new features efficiently, and the team was spending more time wrestling with old architecture than building great user experiences.
As a key member of a small, high-impact iOS team of three developers, I knew we needed to modernize our approach without disrupting ongoing feature development.
My Solution
Leading the SwiftUI Migration
I suggested we try having a refactoring initiative to move to SwiftUI slowly. As much as I wanted to refactor everything at once, I knew that wasn’t possible while still delivering features. So I proposed that we refactor things as we went along – whenever we would get a request to implement a new feature onto some old code, I would grab that storyboard or view, create a SwiftUI view for it (or some mini views as well depending on what it needed), create a view model or leverage the existing one, and use a coordinator that we created that would embed this SwiftUI view onto a UIHostingViewController and push it into the navigation stack.
This approach was great because it allowed us to do snapshot testing as well, and separating view logic on one side and business logic on another allowed us to make our tests more powerful – previously there were even some instances with UIKit views made in code that were difficult to test.
Building Revenue-Critical Features
One of the most impactful projects I worked on was implementing a complete in-app purchase system using StoreKit. This wasn’t just about the technical implementation – it was about enabling both one-time and recurring subscription revenue streams that would be crucial for the company’s growth. I had to make sure everything worked perfectly because this directly affected the bottom line.
The challenge was integrating this seamlessly with our existing user experience while ensuring we followed Apple’s guidelines and provided a smooth purchase flow for users.
Cross-Team Collaboration
I collaborated closely with the design team to ensure consistency with iOS platform conventions, and honestly, this collaboration often shaped product decisions. When designers would propose something that didn’t feel quite right for iOS, I’d suggest alternatives that would feel more natural to users while still achieving the design goals.
As someone who led regular Scrum meetings, I also made sure our small team stayed aligned and could move quickly on priorities.
Results & Impact
Improved Development Velocity
The gradual SwiftUI migration accelerated new feature development by providing cleaner, more maintainable code and better separation of concerns.
Revenue Enablement
Successfully implemented the complete in-app purchase system, enabling multiple revenue streams critical for the company’s business model.
Testing Excellence
Introduced snapshot testing capabilities and improved overall test coverage by properly separating view and business logic.
Quality Under Pressure
Consistently delivered critical bug fixes under tight deadlines while maintaining high code quality standards.
What I Learned
Working at Peanut reinforced my belief that the best technical solutions are often the practical ones. While it would have been satisfying to rewrite everything in SwiftUI immediately, the incremental approach we took allowed us to continuously deliver value while improving the codebase. It’s a perfect example of balancing technical idealism with business reality.
Leading Scrum meetings and working so closely with design also taught me a lot about how technical decisions ripple through the entire product development process. When you’re part of a small team, every choice you make has immediate impact on everyone else’s work.
The in-app purchase implementation was particularly rewarding because it was one of those features where getting it right really mattered – not just technically, but for the business. There’s something special about working on features that directly contribute to a company’s success.
Technologies & Approaches
iOS Development
- SwiftUI (migration from UIKit)
- UIKit (legacy codebase)
- StoreKit (in-app purchases)
- UIHostingViewController (bridging)
- Coordinator Pattern
Architecture & Testing
- MVVM Architecture
- Snapshot Testing
- Unit Testing
- View/Business Logic Separation
Team & Process
- Scrum Leadership
- Cross-functional Collaboration
- Incremental Refactoring
- Design System Implementation