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
ContractsBefore screens
InstrumentBefore build
Root causeBefore patch
PreventionWired into CI
so the same bug can't ship twice.
Measured outcomesSix procedures, from production, 2016–2026
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.
ScopeRefused until measurable
Structured telemetryInstrumented first
Three biggest friction pointsIdentified
Form stepsRebuilt, better validation
Error noiseReduced
Lighthouse CIAdded against regression
ResultConfirmed with data
Resultfunnel completion, 26 points39%65% to
RefADR-006Proxify Quality Award 2024, company-wide.
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.
OpenAPI contractAgreed first, 15 min a feature
TypeScript typesGenerated from the contract
MSW mocksFaithful, nulls and errors included
IntegrationOne config change
Resultcoordination overhead a week; zero rewrites at integration12h2h to
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.
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.
Cross-tenant cache poisoningTraced
float() on money totalsTraced
Fail-open authTraced
PII in telemetryTraced
Each failurePostmortem, regression test
The whole classBlocked by two CI gates
Resultproduction-class failures, prevented as a class14
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.
Start from the problem and the domainNot from components
API and data contractsEarly, backend in the room
A ticket without acceptance criteriaRefused, not guessed
A change on the critical pathNot merged without a baseline
Tokens, wrappers, boundariesDay one, never retrofitted
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
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.
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.
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.
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
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
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.
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.
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%.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Vague tickets become production bugs when AI agents write the code. Here's the 5-part template that makes tickets agent-ready before a single line is written.
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.