SmartKSeF
Poland is making e-invoicing mandatory: from 2026 every invoice has to go through a government gateway (KSeF). SmartKSeF is the thing that sits between a company’s ERP and that gateway. Roughly 300 organisations run on it (Empik, Auchan, LuxMed and Crédit Agricole among them) and it was sized for 20+ million invoices a year. I was on the backend from the very first commit and ran the team from 2024 onwards.
The law kept changing under us. Deadlines got pushed, requirements got rewritten more than once, and every time that happened the Ministry of Finance put out a fresh XML schema for the invoice. So we were implementing a spec that refused to sit still. At some point we stopped treating each new schema like a fire drill and made it boring instead: versions live side by side in the system, and adding another one is a maintenance ticket, not a migration.
Most of the engineering is there because the gateway isn’t dependable. Invoices get checked against the schema before anything is sent, so a structural error comes back as something the client can actually fix (rather than a rejection they find out about later). When KSeF or the network goes down, documents wait in a queue and go out once things recover. Delivery confirmations (the UPO) are pulled back and the status gets written into whatever system the invoice originally came from. We also watch the gateway around the clock, and the system tells us, and the customers, when it starts acting up.
Three hundred companies, and every one of them has its own rules. Validation for sales and purchase invoices is configured per client, same with the rules that classify a document and decide which internal system it belongs to. A single company often means several legal entities, each with its own idea of who is allowed to see what. Active Directory integration let clients keep their own security policy instead of learning ours. Recipients get notified as well (including foreign counterparties who have no KSeF access whatsoever), and the whole processing history goes into an archive.
I came in as a junior when the project kicked off, got promoted twice over three years, and took over the five-person team in 2024. Mostly backend, with the occasional detour into the frontend when someone needed a hand.