iOS Lead
AI Summary
Ukraine's #1 Email Service Location: Europe (remote, B2B contract)About the productWe run Ukraine's most popular email service — 200k+ daily active users on iOS alone.
About this role
Ukraine's #1 Email Service Location: Europe (remote, B2B contract)
About the product
We run Ukraine's most popular email service — 200k+ daily active users on iOS alone. The iOS client is a full-featured email app with offline sync, background-mode message pre-fetching, conflict resolution, and the uptime expectations that come with being critical infrastructure for millions of Ukrainians.
After several years in maintenance-only mode, we're rebuilding the iOS direction. Our Android app has moved roughly 18 months ahead in that time, and closing that gap — thoughtfully, without breaking what works — is the core of this role.
Why this role exists
We need an experienced iOS engineer who thinks architecturally and can bring structure to a codebase that has accumulated significant technical debt. One iOS developer is already on the team, working on day-to-day delivery. We're not hiring you as their manager — we're hiring you as the person who can produce a clear picture of where the codebase is, where it needs to go, and how to get there.
Concretely, in your first months we'd expect you to deliver:
A written audit of the current architecture and its problems
A prioritized tech debt backlog, separating strategic paydown (e.g. storage layer rework) from local cleanup
A documented strategy for working through that debt alongside the product roadmap
Clear trade-off conversations with the CPO and shareholder — risks, effort, what we take on and what we defer
The team is small and long-tenured (most engineers have been here 10+ years). You'll need to respect what works, push back where it doesn't, and earn trust before redesigning things.
If a second iOS hire and you both grow into the role well, leadership is on the table — but it will be earned, not assigned on day one.
What you'll do
First 3 months
Diagnose the existing Objective-C codebase and produce a written architectural overview
Identify and document architectural problems; prioritize them (Paydown vs. Cleanup)
Propose and align on an incremental Objective-C → Swift migration strategy
Establish code review, documentation, and testing standards
Begin shipping critical parity features (starting with authentication)
Start covering critical paths with automated tests
Beyond 3 months
Drive the Swift migration module by module
Accelerate time-to-market to close the gap with our Android app
Ship new features alongside ongoing migration work
Own long-term architectural decisions in partnership with the CPO
Help interview and onboard the next iOS hire(s)
Must have
Experience
Substantial production iOS experience on complex, long-lived apps (not just greenfield work)
Hands-on experience with Objective-C, and willingness to keep working with it during migration
Strong Swift skills
A real track record of refactoring and migrating production code — you've made architectural decisions on systems that real users depend on, and lived with the consequences
Architectural & engineering judgment
You can look at an unfamiliar codebase, identify its real problems, write them down, and prioritize them
You distinguish strategic tech debt (storage layer, threading model, sync architecture) from local cleanup, and treat them differently
You can document an architectural decision in a 2–3 page write-up that a non-engineer can act on
You can articulate trade-offs in business terms: "this costs X time, the risks are Y, here's what we get" — and let the business decide
You're comfortable being challenged on technical decisions, holding your ground with evidence, and changing your mind when the evidence shifts
Technical depth
Cocoa Touch, UIKit, Foundation, manual layout
Deep understanding of multithreading (GCD, race conditions, data consistency); we run a non-trivial background-sync pipeline
SQLite, transactions, offline-first thinking; familiarity with CoreData and the trade-offs vs. raw SQLite
OOP, SOLID, architectural patterns and anti-patterns
Ability to decompose large initiatives and sequence the work
Working with AI
You use AI tools (Claude Code, Cursor, Copilot, or similar) in your daily work
Critically: you read what the model produces, verify it against the design, and own what you ship. AI-generated code that silently changes a button into a label and lands in QA is the kind of thing this role exists to prevent
We reimburse AI tooling (Claude, Cursor, tokens) on receipts and are moving toward corporate subscriptions
Working style
You ask for help when you're stuck — including from engineers in adjacent teams (backend, infra). Avoiding a conversation because you don't want to look like you don't know something is a dealbreaker here
You write things down. Decisions, problems, plans. Verbal "yes, yes, I'll do it" is not a deliverable
You're comfortable in a team with established patterns and long memory; you pick your battles
Nice to have
Prior Tech Lead experience (we won't put you in a lead role on day one, but it's relevant)
Hiring and onboarding experience
Performance optimization (memory, CPU, battery), profiling, deep debugging
Strong algorithmic foundation
Current stack
Objective-C with ARC · GCD · URLSession · Cocoa Touch (manual layout) · SQLite · Firebase (Analytics, Crashlytics) · XCTest
Where we're heading
Incremental migration to Swift
AI-assisted refactoring, with humans in the loop
Meaningful test coverage on critical paths
A modern architecture — designed by whoever takes this role, in collaboration with the team
Better build and release infrastructure, including dedicated build hardware coming online mid-year
What we offer
Fully remote within Europe, B2B engagement
Company-funded AI tooling and learning budget (Claude, Cursor, courses, conferences)
Option to bring in an external architecture consultant on a regular cadence if useful to you
A Ukrainian product with real users, real impact, and 20+ years of staying power — not gambling, not crypto, not a forgettable B2B SaaS
A small team where architectural decisions actually ship, and where the person who makes them is the person who has to live with them
Paid time off: 20 working days per year
Sick leave: 10 working days at 100% pay, plus an additional 10 working days at 50% pay if needed
Equipment: we don't provide hardware directly, but we offer an Equipment Cost Compensation scheme — you purchase the equipment yourself and the company reimburses you in equal instalments over 2 years (instalments stop if the contract ends earlier)
Hiring process
Initial screen — ~30 min. First contact, role context, candidate overview.
Meet the team - CPO, Backend Lead, and the current iOS engineer — ~1.5 hr. Walk through your last two roles in depth (org structure, who you reported to, scope of responsibility, how you interacted with product), tools you use, how you've approached tech debt in past projects, and your questions for us.
System design interview — 1 hr with an external consultant. Architectural thinking, working with tech debt, trade-off reasoning.
iOS-specific interview + live coding — 1 hr with an external consultant. Hands-on coding and iOS depth. Stages 3 and 4 are scheduled on separate days where possible to be considerate of your time.
Final conversation HRD — ~45 min. Motivation, references, offer alignment.