Skip to content

iOS Lead

  • On-site, Remote, Hybrid
    • Kyiv, Kyiv, Ukraine

Job description

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

  1. Initial screen — ~30 min. First contact, role context, candidate overview.

  2. 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.

  3. System design interview — 1 hr with an external consultant. Architectural thinking, working with tech debt, trade-off reasoning.

  4. 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.

  5. Final conversation HRD — ~45 min. Motivation, references, offer alignment.

or