Arthur Costa gossip · five rounds, fanout two

round 0 · one node learns the news

· ·

Animated portrait: one cell at my eye learns a piece of news; every round each informed cell tells two random cells, which reveal their part of my photo. A final anti-entropy pass repairs the stragglers and the portrait holds on my avatar.

· ·

round 1 · the news, and where I heard it

What I built, and where it spread

Two lanes: work for employers and clients (never named), with the records it produced, and what I built on my own time. Each block leads with its outcome. A technology learned in one place travels to the next: pick one and its chain of transmission is drawn across the page, each stop numbered by the round it arrived in.

Trace

At work · roles, and the records they produced

On my own time · decision records

round 2 · how I pass it on

Word of mouth, and in the open

Gossip works because nobody waits for a coordinator: each node tells a few peers, and they tell a few more. This is how I pass things on: to people, to other projects upstream, and through what I build on my own time.

Told upstream

    Smaller and earlier work, on my own time

      round 3 · anti-entropy

      The full state a rumour misses

      Rumours carry headlines; anti-entropy carries the full state: how I work, what I work with, and the rest.

      What every node repeats

        round 4 · your turn

        Join the cluster

        A node joins a gossip cluster by contacting any member it knows. These are mine; I read messages on both.

        What you have heard of me: each round you read fills in a fifth of the portrait.

        Why this design

        Concept: gossip, after Demers et al. (1987), is how fleets spread news without a coordinator, and it is how knowledge spreads between people, so this page reads like a rumour: the seed first, then the news, then the people who passed it on.

        Information architecture: each section is a node in a five-round epidemic; reading a section informs it, and it tells two peers, the next round and one chosen at random, which you see as links at its foot and as arcs in the rail. "Pull what I missed" is anti-entropy: it takes you to the first round you have not read.

        The first screen is round 0 to round 2: the seed in the middle, my portrait, tells the four results, two per round, and the edges you see are those messages; on a phone the portrait stays in the first screen.

        The portrait returns twice: in the rail, a fifth of it fills in for each round you read, scattered at random like gossip coverage, and at the end it shows how much of me has reached you.

        Below the first screen the mechanism keeps shaping the layout: round 1 is not a card grid but a network, two threads of nodes, work and own time, and tracing a technology draws its chain of transmission from node to node across the entries you are reading, numbered by round. It uses only the stacks and roles written in my records.

        Type: DM Sans for everything you read, DM Mono for counts, ids and rounds from the same family, and Caveat only where a message is passed ("told in round 1" beside each result, "round N" on a traced chain), because gossip is word of mouth but the numbers must not look scribbled.

        Colour: warm paper and near-black ink, with spruce green as the single accent for a message or a node that knows.

        Motion and accessibility: in the portrait each message is a short arc to a nearby cell (a dot for the rare distant peer) and nothing crosses the face once it is known; rounds pace at 380 ms, the portrait plays once and holds, "Pause animation" stops everything and then reads "Resume animation", reduced motion shows each end state, every graphic has a text version beside it, and nothing about you is stored.

        1 of 5 rounds heard

        Complete profile

        Senior backend & platform engineer · Porto, Portugal

        I build platforms that hold up in production: moving fleets to the cloud, turning batch into event streams, and, on my own time, execution platforms and safety tooling for coding agents.

        Open to senior backend or platform roles, remote or hybrid

        Nine years in production (since 2017)

        Decision records

        2023–2025 · At work · Platform · Delivered

        200+ instances to cloud local zones, with autoscaling

        Compute cost fell by ~70% across 200+ instances.

        ~70% lower compute cost — 200+ instances moved from on-prem and edge sites to cloud local zones, with autoscaling

        200+ instances migrated — with autoscaling, for live sporting-event peaks

        Context and decision

        Context. A real-time platform for live sporting events ran its workloads on on-prem and edge environments.

        Decision. Lead the infrastructure modernization: migrate the workloads to cloud local zones and enable autoscaling, with multi-region load tests before peak events.

        Stack. Cloud local zones · Autoscaling · Go · Python · Locust

        2022–2023 · At work · Payments · Delivered

        Payment settlement, from batch to event-driven

        Processing success rose from 60% to 90%+.

        60% → 90%+ processing success — payment settlement moved from batch to event streams with change data capture

        Context and decision

        Context. A legacy payment and settlement platform ran as batch processing on a monolith.

        Decision. Move the core components to Java and Go, replace batch with streaming and change data capture, containerize on Kubernetes, and centralize logs and dashboards for the SLAs.

        Stack. Java · Go · Streaming · CDC · Kubernetes

        2026 · Own time · Platform · Working system

        Horus: remote execution for builds and agent jobs

        A changed worktree is a new job, never a silent retry; a worktree without a data class never leaves the machine.

        Context and decision

        Context. Builds and coding-agent jobs start on a workstation but need the CPU, isolation and uptime of a remote fleet, without leaking a private worktree or losing work halfway.

        Decision. A local daemon with a socket API and a written durability contract; content-hash sync so a job runs on exactly the bytes submitted; recovery bound to that content; a versioned accounting ledger; gVisor sandboxes on VPS runners behind a data-class gate.

        Stack. Go · Rust · gVisor

        2026 · Own time · Virtualization · Spike

        Firecracker microVMs as a sandbox compute driver

        A failure-injection suite on a KVM host (kill mid-create, simulated reboot, duplicate RPCs, kill points 0–50 ms, a leak counter) and 23 security probes on a 22-item adversarial matrix. An unimplemented check reports SKIP, never PASS. Proposed upstream as OpenShell#4351.

        Context and decision

        Context. Can Firecracker microVMs, with the jailer, back an open-source agent sandbox runtime (OpenShell) through the whole lifecycle, and stay correct when things crash?

        Decision. A compute driver with its own guest kernel, images from a verified catalog, reclamation of the previous run's VMs at start-up, and a guest flush before Stop.

        Stack. Go · Firecracker · KVM

        2026 · Own time · Platform design · Accepted

        Retire my own agent platform; keep the native clients

        Far less to operate; contribution rules now refuse new routers, schedulers and dashboards.

        Context and decision

        Context. My agent-workflow repository had grown a router, a scheduler, a coordinator hierarchy, a provider dispatcher and a dashboard in front of three coding-agent clients.

        Decision. Retire it (19 October 2026). Each client runs natively; the repository keeps shared skills, a small configuration, standalone safety tools and 26 dated decision records.

        Stack. Python · Bash

        2026 · Own time · Platform safety · Accepted

        Safety tools fail closed

        Documented as a tripwire, not a sandbox, so nobody mistakes it for isolation.

        Context and decision

        Context. Coding agents run shell commands in real repositories from three clients with three hook systems; secrets once reached a model through process arguments.

        Decision. One command-safety hook for all three clients; output redaction; long-lived credentials kept out of worker reach; a missing safety dependency refuses instead of being caught and allowed.

        Stack. Python

        2026 · Own time · Distributed systems · Lab

        Course labs on microVMs, behind an mTLS control plane

        A lab's user id stays reserved until its cleanup has succeeded; CA rotation cannot be bypassed by session resumption.

        Context and decision

        Context. A course platform gives every learner a disposable lab machine, created and destroyed constantly by many people at once.

        Decision. A microVM lab runtime with a chaos test that kills VMs mid-session; idempotent resets by key; mutual TLS on a control-plane CA with reload without restart; pinned keyless signing that fails closed.

        Stack. Go · Kotlin · protobuf

        2026 · Own time · Storage & consensus · Study

        A relational database, from storage to Raft

        Built layer by layer as a study; each phase is a commit history.

        Context and decision

        Context. The fastest way to understand a distributed database is to build its layers in order and see where each guarantee comes from.

        Decision. Disk manager, buffer pool, B+ tree, heap file and write-ahead log; SQL parser, planner and Volcano executor; 2PL then MVCC; Raft, Multi-Raft with range sharding, Percolator-style transactions, SSI with hybrid logical clocks, an S3 backend and the PostgreSQL wire protocol.

        Stack. Rust

        2026 · Own time · Sync & security · Working system

        Offline-first sync with signed form-fill

        The extension never fills a form the owner did not approve.

        Context and decision

        Context. A personal job-search tool runs on several desktops plus a browser extension; data must sync without a central source of truth.

        Decision. Tombstones pruned only once every active desktop has applied them; fill tokens signed on the desktop with a P-256 key from the OS keyring; an encrypted vault export; an LLM judge measured against blind readings.

        Stack. Go · Rust

        2025–2026 · Own time · Developer tooling · Shipped v2.1.1

        gitshift: many Git identities, one machine

        Switching on a directory change went from about 3.8 s to about 0.5 s.

        3.8 s → 0.5 s directory switch — gitshift identity switch on directory change, release v2.1.x

        Context and decision

        Context. Several GitHub and GitLab accounts on one machine means juggling keys, identities and signing by hand.

        Decision. One command switches Git author, SSH key, commit signing and the GitHub CLI account, by alias or automatically by directory; releases through GoReleaser and a Homebrew tap.

        Stack. Go · GoReleaser · Homebrew

        Project source

        Experience

        1. Software engineer, core call control

          2025–2026 · Cloud contact-centre platform

          Load tests to inform cost optimization and Kubernetes autoscaling; graceful shutdown and connection draining in a shared Helm chart; CI repaired with quality gates; codebase rules for agentic coding, shared with the team.

        2. Software engineer, platform / backend

          2023–2025 · Real-time platform for live sporting events

          Led the move of on-prem and edge workloads to cloud local zones with autoscaling (AC-001); real-time, event-driven services on serverless and containers; Go and Python automation; Locust multi-region load tests for peak events; CI/CD across GoCD, GitHub Actions, Jenkins, Buildkite, Ansible and Packer; metrics, logs, traces and alerts.

        3. Software engineer, payments / settlement

          2022–2023 · Payment and settlement platform (consulting)

          Led the modernization of a legacy payment and settlement platform to event-driven streaming and CDC (AC-002).

        4. Software engineer, post-purchase

          2021–2022 · E-commerce marketplace, several countries

          Backend services in Go, Java, Node.js and Groovy for post-purchase and payment workflows; faster claim and dispute resolution.

        5. Software engineer

          2019–2021 · Core banking, Brazil

          Monoliths and mainframe-based systems modernized into Java and Spring microservices; migration of microservices to the public cloud under regulatory SLAs.

        6. Associate software engineer, CRM & integrations

          2018–2019 · Fintech CRM

          Real-time CRM features integrated with banking services such as loans, OTP and account management.

        7. Associate software engineer

          2017–2018 · Software house

          CRM and warehouse management systems in PHP and JavaScript.

        How I work

        Also built

        Drover

        Watch and approve agent sessions from any device: a Rust core over UniFFI, pairing scopes bound to the consumed token.

        Rust

        JVM performance labs

        Eleven on-heap versus off-heap lock-free scenarios with JMH, and 13 serialization frameworks behind one endpoint. Numbers not quoted until re-run with raw output.

        Java · JMH

        graphql-federation

        Federation 2 across Java, Go and TypeScript subgraphs, gRPC between services, SLO burn-rate dashboards.

        Java · Go · TypeScript · gRPC

        Ponte

        A management system for tutoring schools: live lessons with recording and consent, TOTP and lockout, a finance ledger ported to Go and checked by replaying a shared corpus.

        TypeScript · Go · PostgreSQL

        deep-engineering-knowledge-base

        An LLM pipeline that writes and checks engineering lessons, with an independent critic that excludes the author.

        Python

        techish-visual

        An engine for animated technical diagrams: a ThorVG WASM renderer and performance budgets in CI.

        TypeScript

        keyframe

        A Linux studio for recording and editing technical videos, with cuts snapped to silence.

        Rust

        java-workflows

        Reusable GitHub Actions for Java teams: a Java 11 to 25 matrix, security scanning and SBOMs.

        GitHub Actions

        Upstream

        OpenShell#4351

        Firecracker compute driver proposal, from AC-004 (open source). · open

        OpenShell#4591

        A gateway reporting "database is locked" under two concurrent clients. · open

        Orca, 10 pull requests

        SSH OAuth forwarding, pairing-offer rotation without restart, security events, isolation from external agent config. · 9 open, 1 closed

        Stack

        Languages
        Go · Java · Python · TypeScript · Node.js · Rust · Kotlin
        Cloud & runtime
        Kubernetes · GKE · GCP · AWS · Helm · Serverless · Firecracker · KVM · gVisor
        Data & messaging
        Kafka · RabbitMQ · Streaming & CDC · PostgreSQL · MongoDB Atlas · Raft · MVCC
        Delivery
        GitHub Actions · GitLab CI · GoCD · Jenkins · Buildkite · Ansible · Packer · Terraform · Locust
        Observability
        OpenTelemetry · Grafana · Loki · Tempo · Mimir · Datadog · Dynatrace · ELK
        Earlier
        Spring · gRPC · Istio · Akka / Pekko · GraalVM · PHP

        Community

        Tech.ish Thoughts, a collaborative tech blog and GitHub organization (actors, JVM serialization and off-heap work, reusable CI, gitshift).

        The Actor Model, at a DevOps community meetup in Porto.

        Mentors Brazilians entering software engineering through an NGO.

        Background

        Associate's degree, Systems Analysis and Development (2016–2018).

        Portuguese (native), English (full professional, C2), Spanish (limited working).