Skip to content
karo.bio/about

$ git log --since=1994 --author=karo

About

From a math high school in Iran to leading mobile reliability at Iran's largest marketplace, to building loyalty systems in Berlin. Nine years of mobile, in five chapters.

Each chapter lists a few key pieces of work — the ones I'd point to in an interview — with a short write-up, plus a row of supporting work below.

[01] · 1994 → 2016tabriz / tehran

Early life — school, university, first code

Born in Iran in May '94. The next twenty-two years were the version of "I went to school" that included a math-track high school, my first computer at fourteen, a CS degree, four years of TA work, and a Master's. Two things kept showing up: math, and teaching what I'd just learned.

key · 01

The first printf("Hello, World")

At fourteen I bought my first computer and wrote my first C program. I remember the trailing semicolon as the moment the machine started feeling less like an appliance and more like a language I'd one day be fluent in.

From there I never stopped. Math high school at NODET (National Organization for Development of Exceptional Talents) gave me the part of my brain that still does the work — the one that decomposes problems before reaching for code.

key · 02

Four years as a Teaching Assistant

Starting in my second year at the University of Tabriz, I TA'd Intro & Advanced Programming, Compiler Design, Combinatorics, and Algorithm Design. Teaching forced me to actually understand what I thought I already knew.

I think this is when my eye for code review formed. When you have to explain a recursion to twenty undergrads on Tuesday morning, you stop accepting "it works" as a finished thought. That habit carried directly into the next nine years.

Intro ProgrammingCompilersAlgorithmsCombinatorics

key · 03

Coach for the university's ICPC team

In my final year I switched sides of the ACM-ICPC whiteboard — coaching a team instead of competing on one. Two big jumps came together that year: graduating Tabriz with ~3.9/4.0, and being admitted to Sharif University of Technology for my Master's.

Looking back, the coaching mattered as much as the degree. Sitting across the table from people you want to make smarter is the original job description for everything I do now.

~3.9 / 4.0 GPASharif CS Master'sICPC team coach

// also

  • NODET high school, math track
  • BSc Computer Science, University of Tabriz
  • Competitive programming throughout undergrad
  • Started reading technical books for sport, not coursework
[02] · sep 2016 → dec 2017tehran

Jabiz Parda — Android Developer

first professional role

The first job out of university. I joined a small team building an airport-taxi services app and learned what production code feels like when there's no architecture to lean on, no tests to catch you, and no senior in the room to ask.

key · 01

Shipped an airport-taxi services Android app

From feature spec to Play Store: layouts, REST integration, payment flow, push notifications, release builds, store assets, the entire stack. It was the kind of role where you also wrote the README, because nobody else would.

What I'd say about that codebase today: it was bad in interesting ways. We had circular dependencies between activities, a single God-ViewModel, and no separation between "what the user sees" and "what the network returned." But it shipped, and real people in real airports used it. That's the bar that mattered.

JavaAndroid SDKRESTPush Notifications

key · 02

The lesson: writing code is the easy part

Most of the job turned out to be the things around the code — building processes, communicating with stakeholders, keeping a release cycle predictable. The naïve part of me thought senior engineers were just faster typists.

I left Jabiz Parda with a much better sense of where my training had gaps, and a much shorter list of opinions I held confidently. Both helped at every job after.

// also

  • First on-call experience
  • First production crash, first late-night hotfix
  • Learned to read other people's code (mine, mostly)
  • First time shipping to a real Play Store account
[03] · dec 2017 → sep 2018tehran · sharif tech park

UPSYM — Android → iOS

the platform switch

I switched platforms by deciding to. Self-taught iOS via Stanford's "Developing Apps for iOS" course (CS193p), a stack of books, and the only teacher that really works at this stage: a deadline.

key · 01

Shipped a multi-cryptocurrency wallet on iOS

My first iOS project was also the deadline I used to learn Swift. The brief: a wallet supporting multiple cryptocurrencies with QR code scanning, transaction history, exchange-rate updates, and secure key storage. The constraint: I had never written a line of Swift when we started.

I went with MVVM-Coordinator because it forced me to keep navigation logic out of view controllers — a discipline I still appreciate. The app shipped on time, my tests held up, and the architecture survived three feature waves afterwards without a rewrite.

SwiftUIKitMVVM-CoordinatorAuto LayoutKeychain

key · 02

Multi-feature Android wallet — flights, hotels, cars, currency

While ramping on iOS I also extended UPSYM's Android wallet with four new verticals: flight booking, hotels, car rentals, and currency exchange. Each had its own backend, its own payment quirks, and its own deadline.

Doing both platforms in parallel was the moment my self-image flipped from "Android developer" to "mobile engineer." I stopped thinking in platforms and started thinking in flows.

AndroidJavaRxJavaRetrofit

// also

  • Self-taught iOS via Stanford CS193p + books
  • First app with biometric auth (Touch ID)
  • First time owning a "language switch" inside a team
  • Built a personal habit of reading one technical book per quarter
[04] · sep 2018 → apr 2023tehran · 53M+ users

Divar — Senior → Chapter Lead → Staff iOS

five years · three titles · the role that taught me how teams work

Iran's largest marketplace, bigger than any user base I'd ever touched. I joined to build features and ended up co-designing the system the app rests on. Across five years and three titles I went from shipping verticals, to running the hiring pipeline, to founding the team that made sure the app didn't fall over.

53M+ users~80 interviews · 10 hires99.97% crash-freemonths → weeks per new vertical

key · 01

Server-driven UI framework

Divar's catch was that almost every screen needed to be dynamic — listings, filters, detail views, all assembled differently per vertical. We co-designed an SDUI framework where the server emitted a tree of widget descriptors and the iOS client rendered them generically. New screens shipped without a new app release.

The hard part wasn't rendering — it was contracts. We had to design a widget vocabulary that was expressive enough for product to actually use, but constrained enough that mobile didn't drown in special cases. Five years later, most of the app still runs on it.

SwiftUIKitRxSwiftProtocol BuffersDesign System

key · 02

REST → gRPC migration on iOS, with a Swift code-gen pipeline

When the platform team committed to gRPC, the iOS side needed a code-generation story that didn't rely on hand-written Codables for every endpoint. I built the pipeline that read .proto files and emitted Swift request/response types, fully typed, with the RPC stubs ready to call.

The migration moved most of the app onto gRPC without engineers having to re-learn networking. Schemas became the source of truth for both sides of the wire, which paid off the first time backend renamed a field and the iOS build refused to compile.

gRPCProtocol BuffersSwift code-genCI tooling

key · 03

Car Exhibition — the vertical that became the template

The Car Exhibition vertical was the first major release built end-to-end on the new SDUI + gRPC stack. I was responsible for the iOS implementation — but more importantly, for proving the system could carry weight beyond what we'd designed for.

It did. The same template was then used for Real Estate, Marketplace, Jobs, and Services, dropping new-vertical implementation from months to weeks. That ratio is the real measure of a good framework.

key · 04

iOS Chapter Lead — built the hiring + onboarding pipeline

Starting Dec 2019, I owned the iOS chapter end-to-end. I rebuilt the hiring loop from scratch: a take-home that respected people's time, a system-design round that exposed how candidates thought (not what they'd memorized), and a behavioral signal pass that other interviewers could actually calibrate against.

Over two years we interviewed ~80 candidates and hired 10 high-impact engineers — the team grew by exactly that. I also wrote the onboarding playbook and the mentorship pairing protocol that came with it. New hires were productive in week three, not month three.

~80 interviewed10 hired≤ 3 weeks to first PR merged

key · 05

Founded the Mobile Reliability Team — 99.97% crash-free

In May 2021 I proposed and founded the Mobile Reliability Team and became its technical lead. The thesis was simple: mobile observability was a decade behind backend's, and the cost of that was being paid in user trust. We built an in-house monitoring stack that tracked gRPC, REST, sockets, and app-level events with real-time alerts and SRE-style error budgets.

Within a year, crash-free sessions on iOS reached 99.97%. We caught regressions in canary releases before they hit the wider rollout, set up an on-call rotation that didn't burn out the same person twice, and turned "the app feels slow today" from a Slack vibe into a metric you could read.

gRPCWebSocketsCustom telemetry SDKSLOsOn-call

// also worth mentioning

  • Design system library — reduced UI duplication across teams
  • CI/CD with Fastlane — internal distribution + release automation
  • Career ladders for client + backend engineers (co-authored)
  • Leadership training program for emerging team leads
  • Release manager for the iOS app (millions of MAU)
  • Engineering culture work — review standards, doc practices, architectural direction
[05] · HEAD · jun 2023 → now berlin

HelloFresh — Senior iOS & React Native Engineer

new country, new stack, same job: ship things that hold up

Moved from Tehran to Berlin in June '23. New country, new language (German, slowly), new stack (React Native alongside iOS). I work on the Loyalty Hub for HelloFresh and Factor — the system that turns recurring customers into long-term ones.

15 crashes / 6 mo0.220% frozen frames0.346% slow frames

key · 01

iOS Loyalty Hub — dynamic milestones, gradient-driven UI

The Loyalty Hub is where users see their progress, claim rewards, and learn what's available next. On iOS I was a key engineer on the dynamic milestone logic, scroll-driven behaviors, and the gradient transitions that signal where you are in the journey. The visuals had to feel premium without becoming the slow part of the app.

Theme propagation runs through custom SwiftUI environments — a brand can change colors, typography, and accent treatments across the Hub from a single source. Both HelloFresh and Factor render through the same component tree, themed differently per app.

SwiftSwiftUICombineCustom EnvironmentsUIKit interop

key · 02

Hub Builder — one abstraction, two brands, many reward shapes

HelloFresh and Factor needed Loyalty Hubs that looked different and behaved differently. The product team also wanted multiple reward structures per app — baseline, alternate, saving-reward, food-based. A naïve approach would have been one Hub per brand-per-structure: an explosion of code paths.

I designed the Hub Builder abstraction instead — a declarative composition layer where each Hub variant is assembled from typed building blocks, with brand-specific behavior injected. Adding a new reward structure became a configuration change, not a feature branch.

SwiftUIDeclarative compositionResult builders

key · 03

Celebration Moments — a cross-platform behavior spec

Celebrations are the small moments where the app acknowledges a user's progress — a confetti burst, a haptic, a sound. Done well, they're emotional anchors. Done inconsistently across iOS, Android, and Web, they're worse than not having them.

I authored the Celebration Moments technical document used by all three platforms to align behavior: when celebrations fire, how they layer, what the failure mode looks like, and what telemetry they emit. Cross-platform consistency stopped being a roadmap meeting and became a spec.

key · 04

React Native — Factor Loyalty opt-in flow

I completed the internal React Native training and shipped parts of the Factor Loyalty opt-in flow. The flow lives across Wallet, CartCore, Pricing, and Loyalty Core — four codebases owned by four squads — and the iOS-to-RN handoff had to feel like a single screen to the user.

I also helped unblock the Cart Opt-In Entry Points experiment by mediating between those four squads, which was less a coding task and more an old-fashioned diplomacy one.

React NativeTypeScriptCross-squad coordination

// also worth mentioning

  • Delivered an internal talk on real-time iOS monitoring (lessons from Divar's Reliability Team)
  • On-call rotation for Loyalty rollout and the iOS platform
  • Identity: iOS specialist → mobile generalist with deep iOS roots
  • Learning German, slowly but real-ly
  • Side projects: Marci Life and Marci Money

[01]

[Placeholder Title]

[Placeholder text for principle 1. To be provided later.]

[02]

[Placeholder Title]

[Placeholder text for principle 2. To be provided later.]

[03]

[Placeholder Title]

[Placeholder text for principle 3. To be provided later.]

[04]

[Placeholder Title]

[Placeholder text for principle 4. To be provided later.]

That's the whole story.
Want to write the next chapter?

← back to karo.bio

© 2026 · made in berlin

[MODE: READER]
--:--