Boring where it counts
Novel technology in the parts that can fail loudly is a bad trade. I would rather spend the innovation budget on the product and keep the transport, the persistence and the deployment aggressively unsurprising.
About
I am a senior full-stack engineer based in Paris. For nine years I have worked almost entirely in environments where software failing is expensive — banks, payment providers, insurance platforms. Java on the back, React on the front, and a lot of time spent on the parts between them that nobody demos.
I also design, build, ship and operate two products of my own. Not prototypes: real products with paying customers, Stripe webhooks, transactional email, support requests and outages. That second half is not a hobby that runs alongside the first. It is the reason the first half got good.
At Pluxee I work on secure card-related workflows: encrypted file ingestion from hardware security modules over SOAP with mTLS and WS-Security, idempotent asynchronous processing, change-data-capture pipelines on Debezium and Kafka, and a generic audit infrastructure that has to satisfy people who read logs for a living.
Before that, Docaposte, Société Générale and CIH Bank. Digital signature systems, banking platforms built from scratch, IAM, transfer products, cash-deposit services. The work is unglamorous and the constraints are real: you cannot retry a payment twice, you cannot lose an audit trail, and you cannot ship a certificate rotation that expires on a Saturday.
TheQuizMaster is technical assessment infrastructure: it turns a job description into a runnable assessment, executes candidate code in fourteen languages and scores it against a rubric you can actually read. RevealTogether synchronizes a single moment — a gender reveal — across every guest's screen anywhere in the world, with live voting and second-accurate countdowns.
I built both alone. That means architecture and code, but also pricing, Stripe, deliverability, SEO, three languages of copy, the analytics that tell me what is broken, and the 2am message from a customer whose party starts in an hour.
The two products are written up properly, constraints and trade-offs included: how TheQuizMaster runs untrusted code to score it and how RevealTogether keeps one moment in sync worldwide. The short professional history lives on the CV.
Novel technology in the parts that can fail loudly is a bad trade. I would rather spend the innovation budget on the product and keep the transport, the persistence and the deployment aggressively unsurprising.
The first question on any integration is what happens when it is called twice, when the network drops halfway, and when the other side changes something without telling us. Designing for that first is cheaper than retrofitting it after an incident.
Most production problems live between two components that were each individually correct. Contracts, schema evolution, idempotency and clock skew get more of my attention than any single service does.
Running my own products taught me the difference between finishing a feature and being responsible for it at 3am. It changed how I write code for other people too.