Open to remote EU permanent or B2B

Mateusz
Pachulski

I build mobile systems that stay correct under pressure.

Senior Android & Kotlin Multiplatform engineer, eight years across fintech, mobility, and realtime — shipping Android, Swift, and Node with Claude Code in the daily loop.

Now
Arrive / EasyPark — Android, Swift, Node BFF
Before
Santander · Erste · Wire
Focus
KMP · Compose · release quality
Languages
EN / PL / NL
01 — Selected work

Products that had to hold up

Three products, three domains, and what actually changed. Dates and the full run live in the timeline.

Mobility Android · iOS · Node BFF

Arrive / EasyPark

EasyPark for Business product team — Android-first, and also shipping the iOS client and the Node BFF.

  • ~10 screens per platform gated by a business-feature availability module I delivered end-to-end on Android, iOS, and backend — including checks that hold when the feature-flag service is down.
  • Server-driven Expenses on Android, with an extended expense API and notes on parking purchases.
  • 300+ module Gradle monorepo hygiene, analytics corrected during loading and error states, and incident-manager rotation.
  • Android
  • Swift
  • Node.js BFF
  • Server-driven UI
  • Analytics
  • Monorepo
Retail banking Android · accessibility at scale

Santander / Erste

Two chapters in European retail banking, from group-wide accessibility work to a full rebrand.

  • 40+ UI regressions caught and fixed during the Erste rebrand before they reached users.
  • XML → Jetpack Compose migrations delivered alongside feature work, not as a frozen roadmap.
  • 100+ engineers, five Scrum squads supported with TalkBack, contrast, and WCAG guidance plus backlog quality.
  • Jetpack Compose
  • Rebranding
  • WCAG
  • Release quality
  • Fintech
Secure messaging Android · KMP

Wire via AppUnite

A security-sensitive messenger at scale, rebuilt on Compose with shared logic across platforms.

  • Compose Android rewrite of a production messenger used by security-conscious organisations.
  • KMP shared business logic — networking, persistence, and domain models that had to stay correct under encryption and high concurrency.
  • Jetpack Compose
  • KMP
  • gRPC
  • SQLDelight
  • E2E encryption

How I raise the bar

Not a service menu — the ways I make a mobile team sharper, calmer, and harder to break in production.

  1. Architecture & delivery

    Clean module boundaries, MVI, coroutines, and testable seams so features ship without turning the monorepo into folklore.

  2. AI-assisted engineering, daily

    Claude Code is part of how I ship — Android, Swift, and Node in the same week. It widens the surface area I can cover; the architecture decisions and the verification stay mine.

  3. Kotlin Multiplatform

    Shared business logic for networking, persistence, and domain models — proven at Wire, useful wherever Android and iOS should stop drifting.

  4. Compose migrations

    Incremental XML → Compose without freezing the roadmap. Migrations ride alongside feature work, not as a year-long rewrite theater.

  5. Release quality, a11y & team lift

    WCAG, TalkBack, analytics correctness, Gradle hygiene, and the quiet habits that keep incidents rare — plus lifting the people around the code.

Tools I actually ship with

Languages carry equal weight. Tooling earns its place by what it lets me verify, not by what it promises.

Languages

Kotlin Swift TypeScript / Node Java

Android & multiplatform

Jetpack Compose Kotlin Multiplatform Coroutines Clean Architecture / MVI Ktor SQLDelight gRPC / Protobuf

Quality & tooling

WCAG / TalkBack CI/CD Gradle monorepos Snapshot testing Claude Code (daily)

Spoken

English Polish Dutch

git log --oneline

* c4f8a21 (origin/arrive) Senior Software Engineer (Android) @ Arrive / EasyPark [Jun 2026–Present]
* b7e3d90 (origin/santander-pl) Senior Android Engineer @ Santander Bank Polska (Erste) [Aug 2025–May 2026]
* a1c9e44 (origin/scfgs) Senior Android Engineer @ Santander Consumer Finance Global Services [Nov 2023–Aug 2025]
* 9f2b6c8 (origin/wire) Senior Android Engineer @ Wire (via AppUnite) [Feb 2022–Nov 2023]
* 7d4a1e2 (origin/appunite) Android Developer @ AppUnite [Dec 2020–Nov 2023]

Client delivery including FitCrony, Alle Folders, and Blocktrade.

* 3e8c0b5 (origin/edu) B.Eng Electrical & Electronics @ Hanze University, Groningen [2014–2019]

Electronics and BLE background. Studied in the Netherlands; NL / EN / PL.

What I keep open in the tabs

Curated reading on Compose, KMP, architecture, and accessibility — annotated in my voice.

On the bench

Three problems I hit at work often enough to start solving them properly. Status is honest — nothing here is pretending to be a finished product.

  1. Building

    Verification gate for AI drafts

    I already read every Claude Code draft against the contract it is supposed to satisfy. This makes that mechanical instead of disciplined — so the habit survives a bad week.

    Next a Gradle task that fails the build when a changed module ships without a new or updated test.

    • Kotlin
    • Gradle
    • CI
  2. Building

    KMP shared-logic reference

    The networking, persistence, and domain wiring I keep rebuilding from scratch on every multiplatform project, written down once as something forkable.

    Next an ergonomics pass on what the shared module actually feels like to consume from Swift.

    • Kotlin Multiplatform
    • Ktor
    • SQLDelight
    • Koin
  3. Exploring

    Accessibility checks that fail CI

    Years of TalkBack and contrast review in banking taught me that manual a11y passes decay. I want the regression caught by the pipeline, not by me on a good day.

    Next a Compose semantics snapshot test that breaks on missing labels or failing contrast.

    • Jetpack Compose
    • WCAG
    • Instrumented tests

No links yet — these go public when the code is worth reading, not when it would look good here.

Let’s talk

Hiring a Senior Android or KMP engineer for a remote EU role — permanent or B2B? Reach out directly.

Open to remote EU · responses within 24 hours

Email Mateusz →