Akın ÖztorunSenior Product Engineeravailable · remote, EU hours

Ten years finding the missing wires.

ConditionThe right architecture doesn't fail silently. Missing connections do. I own product surfaces end to end, from instrumentation to infrastructure; the frontend is one layer, not the whole identity.

Memory items

  1. ContractsBefore screens
  2. InstrumentBefore build
  3. Root causeBefore patch
  4. PreventionWired into CI

so the same bug can't ship twice.

Measured outcomesSix procedures, from production, 2016–2026

  1. 1 of 6

    Funnel completion low

    Proxify · 2022–2025

    ConditionA Greenhouse ATS funnel handling about 400K applications a year completed 39% of them. Qualified candidates abandoned before finishing, and the team wanted to redesign screens before anyone could measure where they dropped.

    1. ScopeRefused until measurable
    2. Structured telemetryInstrumented first
    3. Three biggest friction pointsIdentified
    4. Form stepsRebuilt, better validation
    5. Error noiseReduced
    6. Lighthouse CIAdded against regression
    7. ResultConfirmed with data

    Resultfunnel completion, 26 points39%65% to

    RefADR-006Proxify Quality Award 2024, company-wide.

  2. 2 of 6

    Integration became a catch-up sprint

    Community platform · 2025

    ConditionOne frontend engineer, one backend engineer, one product lead, developing in parallel under deadline. Endpoints arrived different from what the frontend had assumed: field names, nullables, pagination, error shapes.

    1. OpenAPI contractAgreed first, 15 min a feature
    2. TypeScript typesGenerated from the contract
    3. MSW mocksFaithful, nulls and errors included
    4. IntegrationOne config change

    Resultcoordination overhead a week; zero rewrites at integration12h2h to

    RefADR-002

  3. 3 of 6

    Code review culture plateaued

    Proxify · 2022–2025

    ConditionQuality depended on reviewers noticing. Deploys were manual and unversioned, so a bug in production could not be traced to the release that shipped it.

    1. SonarQubeCI gate
    2. Semantic releaseEvery deploy versioned
    3. Sentry releasesLinked to each deploy
    4. QualityStructural, not cultural

    Resultfewer UI bugs after the gates~60%

    RefADR-007

  4. 4 of 6

    Performance regressing unseen

    Skeyl · 2016–2022

    ConditionClient dashboards with Lighthouse scores in the 40s: unoptimised bundles, render-blocking resources, layout shifts. Regressions reached users before anyone saw them.

    1. Critical pathProfiled
    2. BundlesSplit, lazy-loaded
    3. ImagesSized and optimised
    4. RewriteNone
    5. Lighthouse CIOn every PR

    ResultLighthouse, across LCP, TBT and CLS40s90s to

    RefNo public ref

  5. 5 of 6

    Bundle oversized

    Nord Signup · Nuxt 4

    ConditionA Nuxt 4 signup flow against a design system, shipping 497 KB of JavaScript.

    1. Design-system importsSelective
    2. Every decisionDocumented, 12 ADRs
    3. AI suggestionsThree rejected, on record
    4. TestsUnit, integration, e2e with axe-core

    Resultsmaller bundle, 497 KB to 251 KB49%

    RefRepository

  6. 6 of 6

    Two clients say the numbers are wrong

    PropertyOS · Python

    ConditionA multi-tenant rental-operations platform, handed over with one vague complaint: two clients see wrong numbers, and one is seeing data that is not theirs.

    1. Cross-tenant cache poisoningTraced
    2. float() on money totalsTraced
    3. Fail-open authTraced
    4. PII in telemetryTraced
    5. Each failurePostmortem, regression test
    6. The whole classBlocked by two CI gates

    Resultproduction-class failures, prevented as a class14

    RefRepository

How I workNormal procedures, every ticket

Agentic engineering is part of the method, not a shortcut. Claude Code runs as infrastructure: specs are approved before implementation begins, hooks enforce what the rules request, and every correction becomes a permanent guardrail visible in git history. Architecture judgement, contract design, and final review stay with me.

  1. Start from the problem and the domainNot from components
  2. API and data contractsEarly, backend in the room
  3. A ticket without acceptance criteriaRefused, not guessed
  4. A change on the critical pathNot merged without a baseline
  5. Tokens, wrappers, boundariesDay one, never retrofitted
  6. Internal teamsTreated as customers
  7. OwnershipIdea to rollout to monitoring
  8. Coding agentsSpec approved before code
  9. Every correctionBecomes a guardrail in git

ExperienceThree roles since June 2016

Nov 2025 – Jun 2026

Senior Frontend EngineerProxify, client engagement

Took over full frontend ownership of a Vue 3 / Nuxt platform for a German client after its first month. Moved the codebase to Feature-Sliced Design so ownership and dependency direction are enforced by lint, not by review. Put a token layer over PrimeVue so design reviews became product decisions instead of pixel debates. Made releases boring: every deploy versioned, traced to a Sentry release, and gated by SonarQube, with rollback a non-event. Made the frontend observable with correlation IDs, so an error attributes to a release and a feature area instead of a user report. Authored the platform RFCs for analytics and experimentation across product, analytics, privacy, and mobile constraints, and added mobile delivery through Capacitor.

ResultSmaller, reviewable PRs with explicit ownership; releases traceable end to end

StackTypeScript · Vue 3 · Nuxt 4 · Pinia · PrimeVue · Storybook · Vitest · Playwright · MSW · Capacitor · GitLab CI

Jan 2022 – Oct 2025

Senior Software EngineerProxify

Owned the frontend of the multi-step ATS funnel, about 400K applications a year, and took completion from 39% to 65%. Built the self-service onboarding portal and the shared UI libraries with Storybook and semantic versioning. Made quality structural rather than cultural: Lighthouse CI, SonarQube, and semantic release as gates, and the PR review checklist enforced by the pipeline instead of by reminders. Worked with product, design, and backend on typed API contracts, validation, and observable error handling. Company-wide Proxify Quality Award 2024.

ResultProcedure 1, 39% to 65% funnel completion

StackTypeScript · Vue 3 · Nuxt · React · Node.js · Storybook · Lighthouse CI · SonarQube · Sentry

ADR-007ADR-008
Jun 2016 – Jan 2022

Frontend EngineerSkeyl

Primary frontend owner for React/TypeScript SPAs and dashboards. Raised Lighthouse from the 40s to the 90s without a rewrite. Modernised legacy codebases incrementally. On a German legal-tech platform: a Docker Compose environment for 20+ services that cut new-hire setup from days to hours, Next.js SSR profile pages beside Algolia search, and AWS SNS pub/sub so new integrations shipped without coordinating with producer teams. Backend-adjacent utilities with Node.js and AWS Lambda.

ResultProcedure 4, Lighthouse 40s to 90s

StackJavaScript, then TypeScript · React · Next.js · Node.js · AWS Lambda · Docker Compose · Algolia

ADR-012ADR-013ADR-014

Engineering decisions14 ADRs from production

A 400K-application ATS, a German legal-tech platform, agentic tooling. Each record names what I chose, what I rejected, what it cost, and when I would not make the same call. Start with the reversals.

ADR-010

Decisions I reversed

Three foundations I got wrong first: shipping a Webpack-to-Vite migration with no baseline, using PrimeVue directly to save time, and treating a coding agent as autocomplete. What each reversal cost, and the one failure mode they share. Read this one first.

Read ADR-010
ADR-006

Fix instrumentation before fixing UX

The team wanted to redesign screens. I refused scope until we could measure where users dropped. Instrumentation first, hypotheses second, UX changes third.

Result39% to 65% funnel completion after instrumenting

Read ADR-006
ADR-002

Contract first: OpenAPI and MSW for parallel work

Agree the contract in a fifteen-minute session, generate the types from it, mock it faithfully at the network level, and integrate by turning the mock off. When I would not make this choice: a one-person team, or a stable third-party API.

ResultZero frontend rewrites at integration; 12 to 2 hours of coordination a week

Read ADR-002
ADR-001

Lighthouse as a build-diff tool, not a score checker

A passing score hides a regression. Self-hosted Lighthouse CI reports the before-and-after delta at PR time, so silent performance regressions stop at review, not in production.

Read ADR-001
ADR-011

Refusing scope without clear acceptance criteria

The pattern behind the funnel decision, generalised: rework is cheapest to eliminate at the spec stage, and a ticket without criteria is a ticket that will be built twice.

Read ADR-011

Selected projectsSeven, three running live

Live · Next.js 16

Sorrel, a conversion-engineering funnel

An 8-step subscription wizard built to make the method inspectable, not asserted. Typed funnel events, so a wrong event name is a compile error. A live flag-gated A/B test wired from PostHog through Stripe checkout, and an /insights page that reads the live funnel back in-app. The same discipline that moved a real funnel from 39% to 65%.

StackNext.js 16 · React 19 · GraphQL · PostHog · Stripe · Storybook · TypeScript

Live demoInsightsRepository
Live · Nuxt 4

Nord Signup, a design-system integration

A signup form implemented against the Nord Design System spec. 12 Architecture Decision Records, a three-tier test suite (Vitest unit and integration, Playwright with axe-core end to end), and three AI suggestions documented and rejected: an audit trail of judgement, not just execution.

ResultProcedure 5, 49% smaller bundle

StackNuxt 4 · Vue 3 · TypeScript · Pinia · Playwright · Vitest

Live demoRepository
Investigation · Python

PropertyOS, a debugging investigation

Multi-tenant rental-operations platform, anonymised. Fourteen production-class failures traced from one vague complaint, each fixed with a postmortem and a regression test. Two CI gates now block the whole class. Catching one bug is luck; preventing a class is engineering.

ResultProcedure 6, 14 failure classes prevented

StackPython · FastAPI · React · Redis · PostgreSQL

Repository
Take-home · Fastify

A provider-agnostic comments service

A senior-engineer take-home, built to run as a real service. Retrieves and replies to social-media comments behind provider adapters. Tenant isolation enforced twice, in the query and by PostgreSQL row-level security. Replies are at-most-once behind idempotency keys with a lease. Keyset pagination behind opaque cursors. Seven design decisions, each stated with its cost, under a spec-gate process no agent could self-approve.

StackTypeScript · Fastify · PostgreSQL · OpenAPI 3.1 · Fly.io

Repository
Live · Vue 3

Furlong, a horse-racing simulation

A senior frontend case study: a six-round championship with a physiology-based race engine driven by requestAnimationFrame. Feature-Sliced Design with layer boundaries enforced by ESLint, eleven ADRs down to the championship points formula, and a written account of what was deliberately left out and why.

StackVue 3 · Pinia · TypeScript · Vite · Vitest · Playwright · Storybook · Chromatic

Live demoStorybookRepository
Open source · MIT

ai-engineering, a compiler for AI assistant instructions

AI coding assistants each want instructions in a different place, and the same rule copied into five files drifts quietly. This keeps intent in one .ai/ workspace and compiles it for Claude Code and Codex, with generated files committed and reviewable. CI runs a dogfood job that compiles the repository's own workspace and fails on drift. Young, solo-authored, and the README says which repositories do not need it.

StackTypeScript · Node 20 to 24 · GitHub Actions

Repository
Local-first · Python

Harrier, job-search automation with honesty gates

Watches job boards, screens against a policy, keeps one tracker as the source of truth, and tailors a resume per application. Every resume bullet is verified against a truth document, and an unverifiable line refuses the artifact rather than being dropped from it. The demo runs with no network at all, and a test asserts that it does.

StackPython · FastAPI · React · TypeScript · SQLite

Repository

WritingOwnership in Practice, on Substack

Practical playbooks for engineers who take ownership, not just tickets. Contracts, vertical slices, incidents as product work, and the small habits that make teams calmer and faster. Real tickets, not theory.

May 2026

Contracts Are the New Firewall

Contract-first development isn't process overhead. Here's what happens when you skip it, and why it matters even more when AI agents are writing your code.

Apr 2026

What 14 Bugs Taught Me About Trust

A debug exercise with 3 reported bugs turned into 50 findings with one root cause. Here's what 14 fixes taught me about trust, patterns, and knowing when to stop.

ContactEmail or LinkedIn

Let's talk.

Remote from Antalya, Türkiye, on EU hours. Open to senior and staff-path product engineer roles at product companies where engineers own a slice end to end and reliability and UX both matter. The best fit is a team with domain depth that needs one person to own the frontend layer completely: contracts, observability, rollout, and the feedback loop.

Trained as a metallurgical and materials engineer, and still curating a materials-science atlas on the side.