Fluyapp
Four years of continuous operation is the one proof a SaaS cannot fake.
- When
- 2022–2026
- With
- co-founder and CEO, Node.js, PostgreSQL, MongoDB, Redis, Kafka, Spark, Flink, Kubernetes on AWS
Four years as co-founder and CEO, starting when I left XPLOR. A SaaS platform for queue management and customer experience, and the full microservice ecosystem behind it: Node.js, PostgreSQL, MongoDB, Redis, Kafka, Apache Spark and Apache Flink, orchestrated with Kubernetes on AWS.
Multi-tenant by design, real-time data processing, and continuous operation throughout those four years.
What a SaaS that never switches off teaches you
A system that has been in production for years has survived everything that never shows up in a diagram: schema migrations with customers on top of them, the queue that fills up at 8 a.m. on a Monday, the tenant that grows ten times faster than the rest, the dependency that stops being maintained. None of that is learned by designing — only by operating.
The decision I am gladdest about: multi-tenant from day one. It costs more up front and it is the one thing you cannot retrofit later without rewriting the entire product.
On the role
I was co-founder and CEO of Fluyapp between 2022 and 2026. That chapter is closed. Some third-party data aggregators still list the role as current; it is not. Today I am a co-founder of El Empleado Juan.
Isolation, in the engine
“Multi-tenant from day one” means the separation does not depend on anyone remembering to filter.
-- Isolation lives in Postgres, not in application code: the query you
-- forget to put a WHERE on cannot return another customer's rows because
-- the engine will not let it, not because somebody reviewed it.
ALTER TABLE tickets ENABLE ROW LEVEL SECURITY;
CREATE POLICY tickets_by_tenant ON tickets
USING (tenant_id = current_setting('app.tenant_id')::uuid);
-- And monthly partitioning, which is what stops the customer growing ten
-- times faster than the rest from degrading everybody else.
CREATE TABLE tickets_2026_09 PARTITION OF tickets
FOR VALUES FROM ('2026-09-01') TO ('2026-10-01');
Adding this to a schema that already assumed a single customer is not a migration: it is rewriting the product with customers on top of it. That is why it is the decision you take on day one or never.
Write to me
If you are thinking about building something with AI and want to talk it through with someone who has put it into production, write to me. I answer myself.
hola@giron.ai