Ir al contenido

Guillermo Natali Ulla

Software Engineer specialized in infrastructure and Backend.

Software Engineer / Backend Lead at a software consultancy. Backend and infrastructure are my specialty, and I have built several complete products: database, API, frontend and server.

Taking systems to production and keeping them running afterwards

Guillermo Natali Ulla
systems in productiontoday
  • omnichannel messaging45 accounts
  • skin studiomicaskin.com
  • multi-app vps6 services

+500,000

Inbound messages per month on the platform I lead

45

Accounts in production on a single instance

3

Systems I designed and still maintain

3

Years of experience building solutions

What I use every day

  • PostgreSQL
  • Django
  • Django Ninja
  • Ruby on Rails
  • Docker
  • Nginx
  • Caddy
  • Redis
  • Sidekiq
  • Celery
  • n8n
  • GitHub Actions
  • JavaScript
  • React
  • Next.js

About

I started by taking machines apart to see how they worked inside. I still do the same thing.

I come from the countryside. As a kid I helped my dad take machines apart: understanding how something worked inside was always the part that hooked me. In 2015 I built my first PC on my own and got into C++ to understand how what I saw on the screen was actually built.

In 2017 I got to Python and everything turned around: any idea I had in my head, I could build quickly and simply. I never let go of that. I taught myself for years, between courses, the terminal and pure logic, and during the pandemic I added web, frontend and frameworks.

In 2022 I started a technical degree and in 2024 I graduated as a Software Development Technician. I am studying engineering in parallel, now in my fifth year. The drive is still the one I had at fifteen: open the "machine" and see how it works.

Skills

  • Backend and APIs

    Django, Django Ninja and Rails on PostgreSQL. Typed APIs, queues with Sidekiq and Celery, business rules in the database. Today I maintain a multi-tenant platform handling more than 500,000 messages per month.

  • Infrastructure and deployment

    Docker, Nginx and Caddy, TLS and CI/CD pipelines with GitHub Actions. I run my own server with six services in production and keep deployment reproducible so anyone on the team can do it.

  • Complete products

    A backend specialist, but I have built several complete products: database, API, frontend in React or Next.js and the server they run on. Skin Studio is one of them, and it is public.

The three cases are the same problem.

Things that have to coexist on a shared substrate without stepping on each other: clients on one instance, rules in one model, applications on one server. Isolation is not provided by the interface; it comes from the design underneath.

  • 1 instance → N clients

    A single instance serves 45 accounts, each with its own WhatsApp number and its own inbox, never seeing another account's conversation.

  • 1 domain → N rules

    Business rules lived as unspoken agreements and broke on every exception; now they live in the model, each with its own test.

  • 1 server → N apps

    The pattern I use to host six applications in production, this site included. A new app comes in without touching any of the ones already running.

How I work

Four steps, always in the same order

It is the sequence I follow on every project, and the reason business rules do not break the moment the first exception shows up.

  1. 1

    Understand the business

    What can happen, what must never happen, and which exceptions already exist even if nobody wrote them down.

  2. 2

    Model the data

    I design the model as the problem demands, relational or document-based. Non-negotiable rules live in the data layer: constraints, transactions and schema validation, not in the UI.

  3. 3

    Deploy it

    One compose per app, a central reverse proxy, automated TLS and CI/CD. Deployment is part of development, not a step handed off to someone else: the team can ship changes the same day.

  4. 4

    Keep it running

    Update it, respond when something breaks, and revisit decisions when the business changes. Shipping is half the job.

Cases

Three systems in production

Clients are named by industry, not by name. Each case has its own page with the problem, the technical decision and the result.

1 domain → N rulesBeauty industry

Skin Studio

Business rules lived as unspoken agreements and broke on every exception; now they live in the model, each with its own test.

Mandatory deposit
test ok
Rescheduling window
test ok
Arrival tolerance
test ok
Break between appointments
test ok
1 server → N appsSelf-hosted infrastructure

Multi-app VPS

The pattern I use to host six applications in production, this site included. A new app comes in without touching any of the ones already running.

Files to add an app
2
Database ports published
0
Apps that need a restart
0
Certificates renewed by hand
0

The difference

The shortcut and the road that holds

What usually gets done

  • A full installation per client, each with its own server, updates and certificates
  • Business rules validated in the form, and again on every new screen
  • Databases with their port open to the world because it was faster that way
  • Deploys handled by another team, with every change waiting its turn

How I solve it

  • One multi-tenant instance, with the client resolved at the edge by its identifier
  • Non-negotiable rules in PostgreSQL, with constraints, transactions and their tests
  • Databases on an internal network, with not a single port published outside
  • Deploys automated and documented: one compose, one conf, and it ships the same day

Stack

What I work with, and what for

A tool makes this list once I have put it in production and kept it running. What I am still learning, I say so.

PostgreSQLAtomic logic and constraints in the database, not in the application. Advanced SQL.Where: Omnichannel messaging · Skin Studio
MySQL, MongoDB, FirebaseRelational or document-based, whichever the model calls for. Firebase for auth and real-time data when a custom backend is not justified.Where: Purchasing API · audit projects
Python, DjangoDRF and Django Ninja for typed APIs with Pydantic.Where: Skin Studio
Ruby on RailsI extend and maintain an open source platform in production.Where: Omnichannel messaging
Docker, Nginx, CaddyOne compose per app, a central reverse proxy, TLS with Certbot.Where: Multi-app VPS
GitHub ActionsAutomated build and deployment pipelines to my own servers.Where: Multi-app VPS
Sidekiq, Celery, RedisEverything that must not block a request.Where: Omnichannel messaging · Skin Studio
IntegrationsWhatsApp Cloud API, MercadoPago, Google Calendar, n8n, Evolution API.Where: Omnichannel messaging · Skin Studio
JavaScript, React, Next.jsThe frontend of the products I built end to end, in TypeScript. React and Vite where it already existed.Where: Skin Studio · this site
GoGrowing. Not in production yet.Where: —

Experience

Where I have been and what I took with me

  1. October 2025 — today

    Software Engineer / Backend Lead

    Software consultancy · remote

    Leading the backend of a multi-tenant platform in production: deciding the architecture, keeping it up under load and responding when something breaks.

  2. January — October 2025

    Backend Developer

    E-commerce in production

    Ten months building modules and custom templates reusable across projects. It was my first contact with real development, deployment and infrastructure cycles.

  3. 2022 — today

    Education

    Software Development Technician, ISBL (graduated 2024) · Information Systems Engineering, UAI — 5th year

    The foundations I use every day: data modeling, algorithms and relational databases.

  4. 2015 — 2021

    Self-taught

    C++, Python, the terminal and pure logic

    Seven years learning on my own, with nobody to correct me. That is where I picked up the habit of reading other people's code until I understand it, which is what I do today when I extend a platform I did not write.

Do you have a system that has to run in production and stay up?

I design it, build it end to end and take ownership of keeping it running. Write to me and let's talk. I reply the same day.