Welcome to my humble world

I trust proofs more than tests

Resume: experience, open source, skills →

Hi! I'm Alan, a software engineer.

I live with my family in one of the sunniest cities in the world: flowers all year round and not a drop of rain all summer (which, honestly, might be a downside).

I started out teaching and doing user support, then spent years in infrastructure and systems administration, and now I write the software that runs on it. So when I build an application, I understand its whole lifecycle, from the first commit to years in production, and I know what it will feel like to the people who use it every day.

The best part of all of it is the people: helping them solve real problems, taking the busywork out of their business, and seeing what I've built actually get used.

On this site you'll find my projects, personal and professional, past and present, and what I'm planning next. Sometimes I have something to say, so I write it up; those posts live here too. When time is short, I post on X. And since I work with a lot of different tools, I find bugs in them, and I find the time to report them upstream or fix them myself.

I'm open to a good conversation and to interesting work where my skills and experience can make a difference. Every message is welcome, even if you just want to say good morning. And one more thing: I always reply within a day. Reach out however works best for you: email, X, or the contact form below.

Background

From “it works” to “it's proven”

Racks, clouds, code. And the proofs underneath.

I've kept production running through every generation of it, from physical racks and FreeBSD boxes to virtualization, containers and the cloud. That's where I learned how systems really fail: quietly, at 3 a.m., in the part everyone was sure about. The biggest job was a fleet of 505 servers that we rebuilt and moved mostly to Linux, saving $63K a year.

Then I started writing the software myself: tools that took over 60% of the routine work off the admins, pipelines that deploy 40% faster, hybrid clouds for healthcare, fintech and logistics that cut hosting bills by up to 79%, and an ERP system built from scratch that automated a whole company, from inventory to accounting and manufacturing.

At a developer-tools startup I worked on a polyglot runtime with a Rust and GraalVM core. I built its database layer with 1,136 tests and a harness around the official Node.js test suite, then took conformance from 25% to 72%, measured on every run rather than claimed.

All of it taught me one thing: a test can only show that a bug is there, never that it isn't. That's why I work with formal methods: a compiler and network dataplane whose proofs, written in Lean, reach step by step toward the native code they describe. Every claim is cut back to what is actually proven, and every proof is re-checked by an independent kernel. I trust proofs more than tests, and the only tests I trust are the ones that can fail.

More about my experience in the resume →

Skills

Close to the metal

The tools change every few years. The habits don't.

I like solving problems as close to the machine as I can get. And no bloat. Anything can be written in assembly; you rarely should, but knowing you could changes how you read every layer above it. Day to day that's Rust and TypeScript, sometimes plain C, Go and C# always within reach, Python for glue and SQL for the data. Lean is non-negotiable when a claim deserves a proof. Underneath it all: Linux and FreeBSD, containers, CI/CD and the cloud.

On the web, my default is plain and fast: HTML rendered on the server with Go and HTMX, or TypeScript at the edge, and JavaScript only where it earns its place. Vue or React when an interface really needs them, PostgreSQL behind it all, and pages that still work when a script fails to load. The parts nobody sees get the same care as the ones everybody does: strict security headers, bot protection without captcha torture, two-factor sign-in, encrypted nightly backups, admin panels with moderation, and SEO that search engines can actually read.

I don't leave things half-explored. Every commit gets checked as far as it can be: types, linters, tests that can fail, property tests, mutation tests, and a proof where one fits. This site is built the same way: static pages served from Cloudflare's edge, a Worker only where it has to think, no trackers. And nothing reaches it without types, linters, property tests and a mutation-testing gate.

I'd rather show a green check than promise one, and I never promise what I can't deliver. If something is out of reach, you'll hear it from me first. And I learn fast. That's not a résumé line: it's how I got from racks of servers to compilers.

Stories

The Dull, the Huge and the Fun

Three jobs that say more about me than a list of skills.

The dull one
2,133 tests from the official Node.js suite against a runtime meant to replace Node. Starting point: 25%. Then one at a time: run it, find the real cause, fix it, run everything again. A good day was worth two or three points. One test decompresses 16 GB and only stops if stream back-pressure works; others spawn child processes that hold the output open and hang the whole run. Two months later it stood at 72%, behind a ratchet that won't let the number slide back: 857 known failures on record, and every new regression shows up instead of hiding among them.

The huge one
Move a manufacturing plant from Windows to Linux without stopping production. Everything went except the domain controllers, and even some of the secondary ones ended up on Samba. 505 servers, 28 physical and 477 virtual, moved to KVM and containers under Zabbix monitoring. File storage, printing, mail, internal services and the databases moved one by one, the databases partly to PostgreSQL and partly to AWS. Old and new ran side by side until the new one earned the switch, and every step had a way back. The people on the shop floor never noticed. The company did: $63K a year less on licenses and hardware.

The fun one
Then the desktops moved to Linux too: accounting, and everyone for whom a computer means their one familiar work app and social media. I took the stock Debian installer apart and turned it into our own enterprise distribution. A machine booted over the network via PXE, the preseeded installer ran with zero questions, joined the box to Active Directory and pulled in the whole software set, with network drives and printers on Kerberos single sign-on. Zero-touch: the user just signed in with their usual domain account. Technicians went from seven machines a day at best to 15–25.

What bugs me

Five things I won't get used to

Not complaints. A to-do list.

Photos you can't trust
Scrolling a feed now comes with a second job: deciding whether every photo and video is real or generated. I want the old deal back. A photo is evidence. A video means the person behind the camera was actually there.

Feeds you didn't ask for
Social networks and messengers keep pushing things I never asked to see. I want to see what I chose, and nothing else. And I want to talk anonymously: no phone number, no photo, no personal data, no real name. Just a nickname and words. That's what matters; everything piled on top is either tinsel or somebody's keen interest in who you talk to and about what. Remember ICQ and IRC? Perfect.

Code that only looks like it works
With AI, almost anyone can write code now, and the world is flooded with millions of programs that are mostly noise, don't work, or both. What the world needs is clean code that works, and the tools that can tell it apart from code that only looks like it works don't fully exist yet.

Jobs that don't exist
Job search is buried under thousands of fake and ghost postings, and finding a real one means digging through all of them. Then you fill out ten pages on a job board, only to be sent to the employer's site to create an account and fill out fifteen more. Enormous effort, next to no result.

Talking without fear
In authoritarian countries people can't simply talk to each other without fearing their own government, and nothing out there fully gives them that. It should exist.

What bothers you? If even one of these hits home, please do write to me, and let's figure out together how to fix it.

Epilogue

What it's like to work with me

Short version: no surprises.

You'll never hear "it's almost done" from me. You'll hear what's done, what isn't, and why, before you have to ask. And when I don't know something yet, I say so, then go find out.

I start with your problem, not with my favorite tools. I leave code, docs and servers clearer than I found them, so the next person doesn't have to guess. If a job turns out to be boring, I automate the boring part.

Remote and async suit me fine; I'm on Pacific Time. The rest is easier to talk about than to read about.

Contact

Say hello.

Tell me what you're building, what's broken, or what you'd fix first. It comes straight to me.

Prefer email? hi@alanwisper.com

How I handle your message →