How I work

From a ticket to something that runs in production — the steps I follow, what I hold to, and the projects where you can check.

How a piece of work goes

The same sequence whether it is a defense subsystem, a client site or a weekend tool. Each step leaves something behind.

  1. 01

    Understand

    Read the ticket or the spec until I can write its acceptance criteria. In the defense work that was a formal SRS; elsewhere a short design note.

    leaves behind acceptance criteria
  2. 02

    Contract

    Fix the seam first — the API contract, the interface, the message shape. What sits behind it can change; the consumer shouldn't have to.

    leaves behind an OpenAPI file or interface
  3. 03

    Slice

    Build one feature end to end — endpoint, handler, data, UI — in its own folder, not one layer at a time.

    leaves behind a working vertical slice
  4. 04

    Prove

    Tests at the level that matters: unit for logic, integration against a real database, a benchmark when speed is the question.

    leaves behind green tests and numbers
  5. 05

    Ship

    A reviewed pull request, CI, and a deploy that checks health and rolls itself back.

    leaves behind a reviewed PR
  6. 06

    Operate

    Monitoring, backups proven by restore, and a written note on what changed and why.

    leaves behind a runbook and a worklog

What I hold to

Contract-first

I design the seam before the thing.

Example API is one OpenAPI contract with ten implementations behind it, and a black-box conformance suite each of them has to pass before it is measured. Orbital Ops draws the same line between the propagation worker and the globe.

interface IRouteSolver { solve(stops): Route }
✓ GreedySolver satisfies the contract — the consumer never changes.
Vertical slices

Features, not layers.

webplatform is ~30 modules, each owning its schema and talking to the others only through contracts and a transactional outbox. Order API is the same take-home built twice — layered and vertical-slice — so the trade-off is shown rather than argued.

YAGNI

The best code is the code I didn't write.

No abstraction before its second real use. For my homelab I turned down a query-cache, codegen and form-library stack as weight a solo system doesn't need; this site runs on three runtime dependencies.

estimated LOC · 5,240
✓ only load-bearing code remains — ship it.
Evidence

Measure before claiming.

Benchmarks with pinned versions, warm-up windows and tail latency instead of averages. Where a number on this site can be derived from data, it is — the project count, the languages, the shipped-lately line on Now.

See it inExample API
Operations

Run what you build.

I run my own homelab: 19 services, health-gated deploys with automatic rollback, a staging tier, nightly backups that have been restored to prove they work. Being on call for my own code changes how I write it in the first place.

Defense discipline

Mistakes are expensive — work like it.

Two years in a closed military environment: system analysis, SRS and SDD documents, review before merge, technical presentations in English to international partners. I hold NATO Secret and Czech Secret clearances.

Restraint

No gradient hero. No glassmorphism. No pill for every noun.

Flat surfaces, hairlines, one accent used as ink. Decoration has to earn its place — on this site the only thing allowed to glow is the tree.

Elevate Your Synergy

✨ Get Started
PETR VALÍK
backends that have to be right · .NET → browser
drag ⇔ — left is what I ship, right is the default template
Authorship

Authored by me — AI disclosed in the open.

I use AI agents every day and built claude-kit to make them follow a repository's rules: routing guards, risk gates, review passes. The commits stay mine; AI help is disclosed once per project.

See it inclaude-kit
a71c3f feat: pass prediction Petr Valík
b1002d app theme adjustment Petr Valík
61c34e localization + app state Petr Valík
5df7ec routes + notfound Petr Valík
↳ my repos read clean — AI help is disclosed once, on the project page.

The graph should name whoever's accountable. AI help gets one honest line per project, not smeared across the history.

If this is how you want work done on your team — or on your project — write to me.