Disponible para mandatos de Head of Engineering, Technical Lead y arquitecto fundador

Quito el riesgo de plataforma
del escritorio del CEO.

Technical Product Lead · Solutions Architect · Head of Systems & Data Engineering. Doce años convirtiendo sistemas frágiles, aislados y sin cumplimiento en infraestructura por la que nadie tiene que volver a preocuparse — y que cuesta una veinteava parte de lo que cuesta operar la versión de manual.

Antes que nada, déjame nombrar lo que probablemente ya estás pensando.

Ya te han vendido «senior» antes y recibiste un currículum. Has visto una demo de plataforma lucir hermosa y desmoronarse en producción. Has visto una arquitectura vivir por completo dentro de la cabeza de una sola persona — hasta que esa persona se fue. Y has tenido una revisión de cumplimiento que frenó en seco un lanzamiento, a tres semanas de la fecha que ya habías anunciado.

Ese es el riesgo que está sobre tu escritorio ahora mismo. Eliminarlo es todo el trabajo para el que me contratan.

12+
Años liderando ingeniería y BI
<500ms
Time-to-first-byte de voz-IA, arquitecturado
20×
Menor costo de infraestructura que el equivalente gestionado
Multi-cloud
Portable entre AWS, Cloudflare, Hetzner, Azure y GCP
0
PII en texto plano en reposo, por arquitectura
Prueba de trabajo · 01

El presupuesto de 500 milisegundos.

Encadena un pipeline de voz de la manera obvia — detectar, transcribir, pensar, hablar — y el usuario espera de tres a seis segundos antes de oír algo. En ese punto no has construido una conversación. Has construido un menú telefónico con un large language model conectado.

Tiempo hasta el primer byte audible Menos es mejor
Pipeline secuencial ingenuoProcesa cada etapa por lotes, espera a que termine la anterior
3.000–6.000 ms
Lo que arquitecturéHTTP/2 multiplexado, síntesis a nivel de oración, interrumpible a mitad del stream
< 500 ms
0 msEl presupuesto perceptual de la conversación humana6.000 ms
Paso 01

Multiplexa, no hagas polling

Los fragmentos de audio y las señales de control comparten una única conexión HTTP/2 bidireccional sobre Connect RPC — sin máquina de estados WebSocket, sin round-trip por frame.

Paso 02

Filtra antes de pagar

La detección de actividad de voz corre en el cliente. El silencio nunca sale del dispositivo, así que nunca se convierte en una factura de transcripción.

Paso 03

Transmite oraciones, no respuestas

La síntesis comienza con la primera oración completa y la reenvía a través de io.Pipe sin buffering. El usuario oye el habla mientras el modelo todavía está pensando.

Paso 04

Haz que interrumpir sea gratis

El barge-in se propaga a través de context.Done(), matando la generación a mitad del stream. El medidor de facturación se detiene en el instante en que el usuario empieza a hablar.

TL;DR · para quien está filtrando esto

Si solo tienes treinta segundos.

Sin necesidad de hacer scroll. Todo lo que un comité de contratación necesita para decidir si vale la pena agendar la siguiente conversación.

Resumen ejecutivo Santo Domingo · Remoto-global · Entidad B2B US (DE)
Qué soy
La persona que es dueña de toda la línea — edge, cómputo, datos, cliente y cumplimiento — y es responsable personalmente de que siga en pie. No un especialista alrededor del cual tienes que armar un equipo.
Dónde lo he hecho
Doce años dirigiendo business intelligence, analítica e ingeniería de sistemas en Estados Unidos, Kenia, Sudáfrica, Filipinas y la República Dominicana, reportando a nivel VP y C-level. Además de proyectos de datos que apoyaron varias iniciativas del Programa de las Naciones Unidas para el Desarrollo.
Qué entrego
IA de voz en tiempo real sub-500 ms. Plataformas offline-first que compilan a iOS, Android, escritorio y web desde un solo codebase. Cifrado sin PII en texto plano sobre AWS KMS. Infraestructura definida enteramente en código, reproducible desde cero.
Cuánto cuesta
Una plataforma a escala nacional corriendo en producción sobre una sola instancia de 4 GB, con producción y desarrollo idénticos byte a byte. Aproximadamente una veinteava parte del equivalente de cloud gestionado, con la postura de seguridad mejorada en lugar de sacrificada.
Cómo opero
Fail-fast, sin fallos silenciosos. Pruebas contra base de datos real, nunca mocks. Una cadena de suministro con versiones fijadas y sin tags flotantes en ningún lado. Entrega asistida por IA con bucles automatizados de lint y test — velocidad de senior sin headcount de senior.
Por qué importa ahora
Cada trimestre que esperas es otro trimestre de silos endureciéndose, de arquitectura viviendo en la cabeza de una sola persona, y de deuda de cumplimiento acumulándose en silencio hasta que aflora en exactamente el peor momento.
Prueba de trabajo · 02

La arquitectura es una línea en tu P&L.

La mayoría de los ingenieros diseñan el sistema que recomienda la arquitectura de referencia y te entregan la factura. Yo diseño hacia atrás desde lo que la organización puede sostener — y luego hago que la restricción sea invisible. Abajo está la misma carga de trabajo, dibujada de dos maneras.

Costo mensual de operación · misma carga de trabajo Precio de lista típico de cloud gestionado vs. arquitectura entregada
La construcción de manual
$471 / mes
Estado gestionado multi-capa: base de datos, caché, load-balancer y capas de aplicación por separado, tal como lo dibuja el diagrama de referencia.
PostgreSQL gestionado, multi-AZ$210
Nodo de caché gestionado$45
Application load balancer$23
Cómputo de app redundante ×2$120
NAT gateway + procesamiento de datos$33
Object storage + egress$40
Lo que realmente corro en producción
$20 / mes
Una instancia sin estado con un volumen persistente, un edge delante de ella y archivado continuo detrás. El desarrollo es idéntico byte a byte a producción.
Instancia cloud única, 4 GB$9
Volumen de block storage$5
Object storage, archivo WAL$6
CDN, WAF, DNS, TLS$0
Capa de base de datos gestionadaeliminada por diseño
Capa de load balancer + NATeliminada por diseño
~20× menos
Costo de operación de la misma carga, por entorno
≈ $5.400 / año
Devuelto al runway, por entorno, antes de headcount
0 drift
Producción refleja el desarrollo exactamente — sin «funciona en staging»
Por qué esto no es un downgrade. Eliminar la capa de base de datos gestionada elimina una frontera de seguridad — así que la reemplacé con una más fuerte. Cada campo de PII se sella con una clave emitida por KMS antes de llegar al disco, lo que significa que la base de datos en sí nunca almacena datos personales legibles. La defensa en profundidad se movió del diagrama de red, donde es cara y en su mayoría decorativa, hacia la aplicación, donde de verdad detiene a un atacante que tenga un dump robado. Las cifras de arriba son precios de lista publicados típicos para la capa gestionada equivalente, mostrados como comparación de orden de magnitud.
El mandato

Tres cosas por las que realmente me pagan.

01

Arquitectura que sobrevive el contacto con la realidad

Sistemas distribuidos diseñados para cuando la red está caída, el batch falla a la mitad y el mismo mensaje llega dos veces. Replicación offline-first, replay idempotente, timeouts acotados, cancelación en cascada. Correcto en la pizarra es lo mínimo; correcto a las 3 a.m. es el trabajo.

02

Seguridad que un regulador de verdad puede auditar

Envelope encryption AES-256-GCM a nivel de aplicación sobre AWS KMS, con las data keys borradas de la memoria tras su uso. Firmas ED25519 en cada mutación offline. Sesiones ligadas al dispositivo, opaque tokens, mTLS. Construido para que «¿dónde está la PII?» tenga una respuesta de una sola frase.

03

Fluido en la sala de juntas y en la terminal

Doce años como la capa de traducción entre operaciones, finanzas, liderazgo ejecutivo e ingeniería. Escribo el modelo de P&L y el handler de Go. Por eso los roadmaps que poseo no se desvían — los trade-offs se cotizan en la sala donde se deciden.

Sistemas emblemáticos

Cuatro plataformas. Cuatro tipos distintos de difícil.

No una lista de tecnologías que he tocado. Estos son sistemas que arquitecturé, construí y de los que sigo siendo responsable — con la restricción específica que hizo difícil a cada uno.

Los nombres de clientes y productos se reservan por confidencialidad. La ingeniería es real y te la explico a fondo en una llamada — los logos simplemente no son míos para publicar.

01 — IA en tiempo real

Plataforma de IA conversacional voice-first

Menos de 500 milisegundos hasta el primer byte, o deja de ser una conversación. Cada decisión arquitectónica en esta plataforma se deriva de ese único número.

La parte difícil

Un pipeline de voz son cuatro servicios en red disfrazados de uno — detección de voz, speech-to-text, un agente LLM, text-to-speech. Encadénalos de forma ingenua y obtienes de tres a seis segundos de silencio muerto, una factura que escala con cada sílaba hablada, y ninguna forma de interrumpir a la máquina una vez que empieza a hablar.

Lo que construí

  • Streaming HTTP/2 bidireccional sobre Connect RPC — audio y señales de control multiplexados en una sola conexión, sin gestión de estado WebSocket.
  • Barge-in dirigido por contexto — la interrupción se propaga a través de context.Done(), matando la síntesis a mitad del stream y cortando el medidor de facturación al instante.
  • Reenvío sin buffer vía io.Pipe, con síntesis a nivel de oración en lugar de batch-and-wait.
  • Enrutamiento a doble base de datos — PII y facturación a un vault gestionado sobre un túnel autenticado por mTLS; analítica pesada a PostgreSQL local en un vSwitch privado.
  • Opaque tokens en Valkey con interceptores de cuota que imponen límites por tier en la frontera del protocolo, fallando rápido antes de gastar un solo centavo.
< 500 ms
Time-to-first-byte arquitecturado
~70 %
Costo de síntesis reducido mediante response-shape engineering
0
Credenciales humanas expuestas — túnel M2M solo saliente
Go 1.26Connect RPCHTTP/2 h2cProtobufPostgreSQL / pgx v5mTLS vault tunnelValkeyWhisper STTStreaming TTSWebRTC VADCaddyFlutter
02 — Distribuido y offline-first

Plataforma federada de datos cívicos

Funciona sin señal. Cifrada antes de tocar un disco siquiera. Modelada contra tres autoridades legales en competencia que no coinciden entre sí — a propósito.

La parte difícil

Operadores de campo a lo largo de un territorio nacional, frecuentemente sin conexión, capturando datos personales regulados. Lo que significa: escrituras locales que deben repetirse de forma determinista, prueba criptográfica de quién escribió qué, autorización jerárquica que se resuelve en tiempo constante, y un presupuesto sin fines de lucro que descarta por completo una arquitectura gestionada multi-capa.

Lo que construí

  • Cola de comandos offline-first — mutaciones escritas localmente, firmadas con ED25519, repetidas en el servidor en sub-transacciones por registro para que un registro malo nunca aborte un lote.
  • Envelope encryption AES-256-GCM — data key de KMS, IV aleatorio de 12 bytes, sobre sellado en la fila, texto plano y clave puestos a cero en memoria inmediatamente tras su uso.
  • RBAC de alcance espacial reemplazando roles planos — árboles de UUID codificados por prefijo que dan resolución de contención O(1) a través de una federación nacional → regional → local.
  • Triple registro para la verdad geopolítica — el estándar internacional, el estatuto nacional y la autoridad catastral reciben cada uno su propio árbol congelado y versionado, con crosswalks en lugar de una jerarquía forzada.
  • Inmutabilidad impuesta por triggers de base de datos, no por disciplina — las ediciones de referencia publicadas físicamente no se pueden editar, y los seed tests hacen fallar el build si se viola la procedencia.
  • Un solo codebase de Flutter → cuatro targets, con SQLCipher y keystore de hardware en nativo, y un vault WebCrypto no extraíble en la web.
4 targets
iOS · Android · escritorio · web, un solo codebase
O(1)
Resolución de autorización jerárquica
1 nodo
Producción refleja el desarrollo exactamente
Go 1.26Connect RPCPostgreSQL 18ValkeyAWS KMSAES-256-GCMED25519Flutter / DartSQLCipherWebCryptoOpenTofuHetzner CloudCaddy 2.11WAL-GBufDevbox
03 — Datos empresariales y BI

Plataforma de BI multinacional y fuente de verdad

Cuatro países, un número. Cuando operaciones, finanzas y el equipo ejecutivo discrepaban sobre el desempeño, la discusión era sobre los datos, no sobre la decisión. Yo terminé esa discusión.

La parte difícil

Un BPO de alta demanda operando en Estados Unidos, Kenia, Sudáfrica, Filipinas y la República Dominicana, con reportería fragmentada entre servidores, hojas de cálculo y departamentos. Cada revisión ejecutiva comenzaba relitigando qué números eran correctos — y la nómina, la facturación y la compensación por incentivos colgaban todas de esos números.

Lo que construí y lidero

  • Despliegue empresarial de Apache Superset estableciendo la fuente de verdad definitiva de reportería para el liderazgo ejecutivo y la gobernanza operativa.
  • ETL automatizado entre servidores en SSIS, Python y Power Query, con integración centralizada en SQL Server que eliminó los silos de datos institucionales y redujo la latencia de procesamiento un 40%.
  • Marcos de KPI e incentivos ponderados abarcando los niveles de agente, supervisor, gerente, director y VP — el modelo de compensación y el modelo de reportería comparten una sola definición.
  • Reportería de P&L y modelos de pronóstico financiero entregados directamente a stakeholders de C-level, más la exactitud de nómina y facturación contra ingresos, horas facturables y términos contractuales.
  • Propiedad completa del SDLC de sistemas web internos — incluyendo una aplicación MVC segura para procesar y auditar horas de trabajo manuales, construida según estándares PCI-DSS y de la industria de call-centers, y una aplicación de monitoreo de calidad de alcance empresarial desde la arquitectura hasta la adopción.
5 países
USA · Kenia · Sudáfrica · Filipinas · RD
40 %
Reducción en la latencia de procesamiento de reportes
12 años
Antigüedad continua, con ascensos de alcance
Apache SupersetMS SQL ServerSSIS / SSRSPythonPower BIT-SQLC# / .NET MVCRPA / VBAPCI-DSSData governance
04 — SRE e infraestructura de edge

Red de edge sin IPv4 permanente

La superficie de ataque más barata de defender es la que no existe. Esta plataforma no tiene dirección IPv4 pública en reposo — genera una durante unos segundos, y luego la descarta.

La parte difícil

Un host solo-IPv6 no puede descargar imágenes de contenedor privadas de un registry que no publica registros AAAA. La solución obvia es una dirección IPv4 pública permanente — y una superficie de escaneo permanente. Rechacé ese intercambio y lo resolví por ingeniería en lugar de relajar la postura de seguridad bajo la presión del debugging.

Lo que construí

  • El bracket de IPv4 efímero — una dirección se adjunta solo para la fase de descarga de imagen y se desadjunta en un hook success() dirigido por eventos, no por un timer, eliminando una race que derribaba rutas a mitad de la descarga.
  • Origin CA de CDN aprovisionado por IaC resolviendo un bucle de challenge ACME detrás de un proxy siempre-HTTPS, con cero intervención manual de consola.
  • Desacoplamiento del ciclo de vidaignore_changes en la config de arranque para que los applies rutinarios no reconstruyan el cómputo, prevent_destroy en volúmenes de base de datos y claves KMS, y el ciclo de vida de la IP desacoplado del ciclo de vida del servidor para acabar con el churn de DNS.
  • Credenciales de registry de vida corta reemplazando personal access tokens permanentes — ningún secreto de larga vida que almacenar, rotar o filtrar.
  • Automatización de despliegue verificada con polling de readiness, protección contra crash-loop, sondas de egress dentro de la red y rollback automático ante una verificación fallida.
  • Sondas de diagnóstico conservadas tras el incidente, no borradas — la instrumentación que encontró el bug queda disponible para el siguiente.
0
Superficie IPv4 pública permanente en reposo
0
Secretos de registry de larga vida que rotar
Minutos
Recortados de cada arranque en frío al podar la ruta de aprovisionamiento
OpenTofu / TerraformHetzner CloudCloudflare WAF / DNS / Origin CAcloud-init + NetplanDocker ComposeGitHub ActionsCaddySOPS + ageTrivyIPv6-only
También entregado

Programa de las Naciones Unidas para el Desarrollo

Entregué trabajo de datos y analítica en un par de proyectos que apoyaron programas del PNUD — convirtiendo los datos de programa en reportería utilizable para los equipos que los dirigían.

Plataforma de datos electorales en tiempo real

Pipelines de conteo de votos en vivo integrados con el feed de datos de la autoridad electoral nacional, más un sistema de registro de membresía y una app. Lideré un equipo de un analista y tres desarrolladores como project y product manager mientras yo mismo era dueño de la ingeniería de datos en vivo.

Contenido de cumplimiento en salud

Elaboro documentación auditada de políticas, procedimientos y licenciamiento para una compañía nacional de cumplimiento en salud con base en Texas — trabajo aplicado y profundo en HIPAA, HITECH, Stark Law y regulación de salud de EE. UU., cada documento aprobado por un Compliance Specialist certificado.

Prueba de trabajo · 03

Por qué Go, específicamente.

Porque un lenguaje que compila a un único binario estático, planifica cien mil conversaciones concurrentes en una máquina de 4 GB, y convierte ignorar un error en un acto visible de vandalismo es la única elección honesta para las dos restricciones de arriba. Así se ve esa disciplina en el código real.

internal/vault/seal.go Sin fallos silenciosos
package vault

import (
    "context"
    "crypto/aes"
    "crypto/cipher"
    crand "crypto/rand"
    "encoding/binary"
    "errors"
    "fmt"
    "io"
    "time"

    "go.opentelemetry.io/otel/attribute"
    "go.opentelemetry.io/otel/codes"
    "go.opentelemetry.io/otel/trace"
)

// A version byte prefix lets keys or algorithms rotate later with no data migration.
const (
    envelopeV1 = 0x01
    nonceSize  = 12 // 96-bit GCM nonce
)

// Sentinel errors — internal KMS/network detail never leaks to the caller.
var (
    ErrSeal    = errors.New("vault: seal failed")
    ErrContext = errors.New("vault: context invalid or canceled")
    ErrEntropy = errors.New("vault: entropy source failure")
)

// Seal encrypts one PII field with a per-record data key from KMS and returns a
// self-describing envelope. The plaintext data key never outlives this call.
func (v *Vault) Seal(ctx context.Context, plaintext []byte) (_ []byte, err error) {
    if len(plaintext) == 0 {
        return nil, fmt.Errorf("%w: empty payload", ErrSeal)
    }

    // One span per seal; success/error recorded on the way out.
    ctx, span := v.tracer.Start(ctx, "Vault.Seal", trace.WithAttributes(
        attribute.String("kms.key_id", v.keyID),
        attribute.Int("payload.bytes", len(plaintext)),
    ))
    defer func() {
        if err != nil {
            span.RecordError(err)
            span.SetStatus(codes.Error, err.Error())
            v.metrics.SealErrors.Inc()
        }
        span.End()
    }()

    // Bound the call only if the caller gave us no deadline of its own.
    if _, ok := ctx.Deadline(); !ok && v.kmsTimeout > 0 {
        var cancel context.CancelFunc
        ctx, cancel = context.WithTimeout(ctx, v.kmsTimeout)
        defer cancel()
    }
    if err = ctx.Err(); err != nil {
        return nil, fmt.Errorf("%w: %w", ErrContext, err)
    }

    // KMS data key, with latency recorded for the SLO.
    start := time.Now()
    dek, err := v.kms.GenerateDataKey(ctx, v.keyID)
    v.metrics.KMSLatency.Observe(time.Since(start).Seconds())
    if err != nil {
        return nil, fmt.Errorf("%w: generate data key", ErrSeal)
    }
    defer wipe(dek.Plaintext) // zeroed on every path, including panic

    block, err := aes.NewCipher(dek.Plaintext)
    if err != nil {
        return nil, fmt.Errorf("%w: new cipher", ErrSeal)
    }
    gcm, err := cipher.NewGCM(block)
    if err != nil {
        return nil, fmt.Errorf("%w: new gcm", ErrSeal)
    }

    // One allocation for the whole envelope.
    size := 1 + 2 + len(v.keyID) + 2 + len(dek.Ciphertext) + nonceSize + len(plaintext) + gcm.Overhead()
    out := make([]byte, 0, size)
    out = append(out, envelopeV1)
    out = binary.BigEndian.AppendUint16(out, uint16(len(v.keyID)))
    out = append(out, v.keyID...)
    out = binary.BigEndian.AppendUint16(out, uint16(len(dek.Ciphertext)))
    out = append(out, dek.Ciphertext...)

    // Reserve the nonce and fill it from the OS CSPRNG.
    ivStart := len(out)
    out = out[:ivStart+nonceSize]
    if _, err = io.ReadFull(crand.Reader, out[ivStart:]); err != nil {
        return nil, fmt.Errorf("%w: %w", ErrEntropy, err)
    }

    // Seal in place: ciphertext+tag land in the same backing array.
    out = gcm.Seal(out, out[ivStart:], plaintext, nil)
    return out, nil
}
1 binario

Sin runtime que instalar, parchear o explotar

Un binario estático de Go en un contenedor distroless y non-root. Nada interpretado, sin árbol de dependencias en tiempo de ejecución, y un arranque en frío medido en milisegundos. Por eso una instancia modesta sostiene toda la plataforma.

~4 KB

Concurrencia cotizada en kilobytes, no megabytes

Una goroutine arranca con un par de kilobytes de stack. Los runtimes de thread-per-request arrancan con un megabyte. Esa proporción es precisamente por qué los streams de audio en tiempo real y los workers de sincronización en segundo plano coexisten en hardware que cuesta un solo dígito al mes.

0 ocultos

Errores que no puedes ignorar por accidente

Go convierte cada fallo en un valor explícito. Combinado con errcheck como merge gate, un error sin manejar detiene el pipeline. Eso no es ceremonia — es por qué los incidentes de producción llegan con una causa legible en lugar de un stack trace.

Criterio de ingeniería

Cualquiera puede listar tecnologías.
Esto es a lo que dije que no.

La seniority no es la longitud del stack. Es la calidad de los rechazos — y la capacidad de defenderlos ante un board seis meses después. Cada uno de estos es una decisión que tomé y que sigo respaldando.

Opaque tokens en Valkey
en lugar de  sesiones JWT

Los JWT no se pueden revocar sin inventar una lista de revocación, que es un session store disfrazado. Tomé el session store de frente y obtuve revocación instantánea, sin token bloat en cada request, y conteo de cuotas O(1) gratis.

Brackets de IPv4 efímero
en lugar de  una IPv4 pública permanente

Una dirección permanente se escanea permanentemente. Acepté una complejidad de temporización significativa para mantener un estado de reposo sin IPv4 permanente — y luego eliminé la complejidad haciendo que el teardown fuera dirigido por eventos en lugar de por un timer.

Cifrado a nivel de aplicación
en lugar de  separación de capas de infraestructura

Con un presupuesto restringido no puedes comprar una capa de datos segregada. Sí puedes cifrar cada campo de PII con una clave emitida por KMS antes de que llegue al disco. Defensa en profundidad donde de verdad detiene a un atacante, no donde solo satisface un diagrama.

Producción idéntica al desarrollo
en lugar de  un estado gestionado multi-capa

Una instancia modesta, idéntica en ambos entornos. Cero drift de configuración, cero «funciona en staging», y un costo operativo que la organización puede sostener indefinidamente. Sin estado por diseño, así que la escala horizontal es una decisión, no una reescritura.

Protobuf sobre HTTP/2, en todas partes
en lugar de  JSON REST

Un contrato binario que tanto el servidor como el cliente generan desde el mismo archivo elimina toda una categoría de bugs de integración, versiona limpiamente mediante numeración de campos, y reduce el tamaño del payload justo en las conexiones móviles que son las peores. JSON en el cable está prohibido.

SQL crudo a través de un connection pool
en lugar de  un ORM

Planes de consulta que puedes leer, índices sobre los que puedes razonar, y comportamiento de time-series particionado que se mantiene predecible bajo carga. La abstracción que vende un ORM se paga con intereses la primera vez que un reporte hace timeout en producción.

Tests contra base de datos real
en lugar de  repositorios mockeados

Los mocks verifican que el código coincide con tus supuestos. Solo una base de datos real verifica que tus supuestos coinciden con la base de datos. CI falla si se saltan los tests — un pipeline verde que no probó nada es peor que uno rojo.

Version pinning estricto, sin tags flotantes
en lugar de  :latest / @main

Versiones semánticas o digests SHA-256, tanto en contenedores como en Actions, módulos de Go y proveedores de IaC. Un build de hace seis meses debe reproducirse byte a byte, porque ese es el build del que trata el incidente.

Prueba de trabajo · 04

Construido para que la auditoría sea aburrida.

El cumplimiento resuelto en tiempo de arquitectura cuesta una decisión de diseño. El cumplimiento resuelto en tiempo de revisión cuesta un trimestre. He trabajado dentro de las restricciones de HIPAA, HITECH, Stark Law, PCI-DSS y GDPR — y construí la criptografía, no solo el documento de política.

PII en texto plano solo en memoria AWS KMS GenerateDataKey IV aleatorio 12 bytes, crypto/rand AES-256-GCM sellado en memoria PostgreSQL row [DEK | IV | ciphertext] wipe() — zeroed en reposo: ilegible

Envelope encryption AES-256-GCM

KMS emite una data key; el payload se cifra en memoria con un IV aleatorio de 12 bytes; la base de datos almacena [ciphertext_DEK | IV | ciphertext]. El texto plano y la clave se ponen a cero de inmediato. Los round-trips a KMS se disparan solo cuando un lote realmente contiene PII, así que la latencia del servicio de claves nunca condiciona el tráfico ordinario.

Identidad zero-trust mTLS · ED25519

Los handshakes ligados al dispositivo devuelven token de sesión, máscara de permisos, alcances espaciales y una clave de base de datos local derivada del servidor en un solo payload atómico. Las mutaciones offline llevan firmas ED25519 verificadas antes del replay. El acceso a la base de datos del vault se autentica por certificado — no existe contraseña que se pueda filtrar.

GDPR Artículo 9 y 17 Por diseño

Los datos de categoría especial están protegidos por una arquitectura de conocimiento cero sin PII en texto plano en reposo. El derecho al olvido es estructural en lugar de procedimental: registros con clave UUID y cascadas de borrado globales, así que la eliminación es una sola operación con un radio de impacto demostrable.

Entrega en industrias reguladas HIPAA · PCI-DSS

Una aplicación MVC de nómina y horas manuales construida y auditada según estándares PCI-DSS y de la industria de call-centers. Trabajo diario dentro de las restricciones de HIPAA, HITECH y Stark Law para consultorios médicos de EE. UU. OWASP A02 y A04 atendidos en las capas de criptografía y arquitectura, no con un reporte de escáner.

Cadena de suministro y licencias Gobernanza OSI

Version pinning sin tags flotantes en ningún lado. Secretos cifrados en reposo con SOPS + age. Trivy para escaneo de configuración, sistema de archivos y licencias; govulncheck, osv-scanner y go-licenses en el pipeline. Auditoría de copyleft para que una postura de licencia permisiva sea verificada, no asumida.

Recuperación ante desastres Verificada, no asumida

Archivado continuo con WAL-G a object storage compatible con S3, con simulacros de restauración automatizados en lugar de documentados. Guardas prevent_destroy en volúmenes persistentes y claves KMS, y targeting explícito de recursos para que una reconstrucción solo pueda tocar la capa de cómputo.

Una nota honesta, porque de todos modos lo descubrirías. La arquitectura de cumplimiento de arriba es un diseño de ingeniería auto-evaluado contra estándares publicados — riguroso, documentado y defendible, pero no certificado por un tercero. Donde se requiere una certificación, construyo el rastro de evidencia que un auditor necesita y trabajo junto al evaluador. Prefiero decírtelo en la primera página a que lo descubras en la cuarta llamada.
Estándares operativos · cómo el trabajo se despliega y se mantiene en pie

Los estándares de oro, dibujados.

La mayoría de los ingenieros dicen tener disciplina SRE. Aquí está como sistema: las compuertas que un cambio supera antes de llegar a tus usuarios, el bucle que lo mantiene sano después, y la única regla que decide si un arreglo está realmente hecho. Cada paso de abajo es una práctica que corro en producción, no una aspiración.

El camino del commit a producción
merge gate debe pasar auto-rollback
01 · commit

Feature branch

El trabajo ocurre en una feature branch. Nunca en main, nunca directo a producción.

gate · pre-push hook
02 · verify

Lint y análisis estático

golangci-lint, go vet, staticcheck. Un error sin manejar hace fallar el build.

gate · errcheck bloquea
03 · prove

Tests contra base de datos real

Los tests de integración golpean un Postgres real. Los tests saltados hacen fallar CI — nada de verde sobre la nada.

gate · sin mocks
04 · build

Imagen fijada y escaneada

Distroless, non-root, fijada por SHA. Trivy + govulncheck escanean antes del push.

gate · sin tags flotantes
05 · release

Despliegue verificado

Despliegue rolling por SSH, polling de readiness, sonda de egress dentro de la red antes del tráfico.

proof · las sondas pasan

Si alguna compuerta falla o la verificación no pasa: el despliegue hace rollback automáticamente y las sondas de diagnóstico quedan en su lugar. Un arreglo no está «hecho» porque el diff se vea bien — está hecho cuando la sonda lo dice.

Caja de herramientas

Ordenado por consecuencia, no por alfabeto.

Tier 1 es lo que defendería en una revisión de arquitectura. Tier 2 es cómo se entrega realmente el trabajo. Tier 3 es la parte que sobrevive a cualquier herramienta particular.

Tier 1 — Crítico para la misión

Portante. Los sistemas de producción dependen de que estos sean correctos.
Runtime y protocolo
Go 1.26Connect RPCProtocol BuffersHTTP/2 (h2c)gRPCBuf CLIprotovalidate (CEL)sqlc
Datos y estado
PostgreSQL 18pgx v5 / pgxpoolPartitioned time-seriesPL/pgSQLValkey / RedisMS SQL ServerOracleMySQLSQLite / SQLCipherWAL-G
Seguridad
AWS KMSAES-256-GCM envelope encryptionED25519mTLSOpaque tokensSOPS + ageZero-trust VPC isolation
Cliente
Flutter / DartiOS · Android · desktop · webOffline-first syncIsarWebCrypto vaultSvelte 5Astro 5TypeScript
Infraestructura
OpenTofu / TerraformAWS (EC2, S3, RDS, VPC, KMS, ELB)Cloudflare (Pages, WAF, DNS, R2, D1, Turnstile)Hetzner CloudMicrosoft AzureGoogle Cloud (GCP)Docker & ComposeCaddy 2.11GitHub ActionsLinux

Tier 2 — Entrega y velocidad

Cómo se despliega el trabajo sin una solicitud de headcount anexada.
Ingeniería asistida por IA
Claude CodeAider ChatOpenCodeCodexGemini AI StudioAuto-test & lint loopsGoogle Developer Platform
Entorno y calidad
Devbox (hermetic)golangci-lintgo vet · staticcheck · revivegovulncheckosv-scannerTrivygo-licensesast-greptree-sitterVitest
Datos e BI
Apache SupersetSSIS / SSRSPower BI & Power PlatformPythonInter-server ETLMetrics governanceApache EChartsMapLibre GL
Red y operaciones
TailscaleWireGuardPrometheus + Alertmanagercloud-init / NetplanIPv6-only topologiesGitHub CLIJira · Linear · ClickUp

Tier 3 — Patrones que sobreviven a las herramientas

La parte que se transfiere a cualquier stack que ya tengas.
Arquitectura
Distributed systemsOffline-first replicationCQRS-lite command modelModular monolithPolyrepo isolationStateless compute / persistent volume separationImmutable & disposable infrastructureDeclarative IaC
Corrección
Idempotent replayAt-least-once + de-dupeOptimistic lockingDatabase-enforced immutabilityBounded timeoutsCascading cancellationFail-fast, no silent failures
Práctica
SRE & Google SRE cultureAgile / SCRUMTDDClean codeADR-driven decisionsDocumented technical debtSpec-driven developmentBusiness analysis (CBAP track)
La persona detrás del trabajo

Los sistemas se construyen con personas. Los equipos también.

Jose Miguel (JM) Sanchez
Santo Domingo, RD · liderando remote-first, globalmente

Jose Miguel (JM) Sanchez

Líder de Producto Técnico · Arquitecto de Soluciones · Jefe de Ingeniería de Sistemas y Datos

He pasado más de veinte años en el espacio entre la sala de juntas y la terminal. Desde Santo Domingo dirijo un equipo de business intelligence e ingeniería cuyo trabajo llega a operaciones en Estados Unidos, Kenia, Sudáfrica, Filipinas y República Dominicana — la persona a la que operaciones, finanzas y ejecutivos llaman cuando los números tienen que ser correctos y el sistema debe mantenerse en pie. Me importa tanto la gente que entrega el trabajo como la arquitectura que entregan: el mejor sistema del mundo falla si el equipo que lo rodea no puede ser dueño de él.

01Lidera equipos distribuidos

Dirige un equipo de BI e ingeniería cuyo trabajo abarca cinco países y cada zona horaria de entre ellos — doce años gestionando y haciendo crecer personas, no solo código.

02La capa de traducción

Enlace principal entre operaciones, finanzas, liderazgo ejecutivo e ingenieros — convirtiendo objetivos empresariales ambiguos en roadmaps que todos firman.

03Construye rendimiento, no solo software

Diseñó marcos de KPI, incentivos ponderados y objetivos desde nivel de agente hasta VP — midiendo y elevando cómo los equipos se desempeñan realmente.

04Se comunica entre culturas

Español nativo, inglés C2, italiano conversacional. Entrega SCRUM, documentación con la que otros pueden actuar, y capacitación formal de liderazgo (Adaptive & Effective Leadership, CBAP®).

Modelo operativo

Lo que mis equipos nunca pueden desplegar.

La cultura no es una página de valores. Es la lista corta de cosas que detienen un merge. Estas son las mías, y se aplican mediante pipelines en lugar de recordatorios.

  • Sin fallos silenciosos. Cada error va envuelto con contexto. Sin continue pelado, sin catch vacío, sin excepciones tragadas. Si el sistema se degrada, el usuario lo ve y el log dice por qué.
  • Timeouts acotados en cada llamada de red. Medidos en segundos, con cancelación que se propaga a través de un contexto compartido. Nada se cuelga en silencio.
  • Verificación antes de «hecho». Sondas TLS directas más allá del CDN, llamadas RPC autenticadas, verificaciones de preflight CORS. Una corrección no es completa porque el diff se vea bien.
  • Deuda técnica escrita, en el repositorio. Los atajos conocidos están documentados donde el próximo ingeniero realmente los encontrará. La deuda sin documentar es la cara.
  • Disciplina de rama, siempre. Feature en develop en main. Nunca directo a producción, sin importar quién lo pida ni cuán pequeño parezca.
  • Metodología antes de escalación. Cuando algo se rompe, agrego instrumentación — no excepciones al modelo de seguridad. Los diseños endurecidos sobreviven presión de debugging o nunca fueron endurecidos.
”Un sistema que está en pie en hardware modesto supera una arquitectura correcta que nadie puede costear.”
La restricción que escribí en un registro de decisión de arquitectura, que luego sostuve en cuatro repositorios, una instancia y un despliegue nacional.

Esta es la diferencia entre un arquitecto y un consultor. No diseño el sistema que tu presupuesto merece en una keynote — diseño el sistema que tu presupuesto puede realmente correr, y luego lo hago lo suficientemente bueno para que nadie note la restricción.

Funcional de múltiples áreas por defecto. Doce años como enlace técnico principal en cinco países y cada zona horaria de entre ellos — coordinando cuatro repositorios interconectados ligados por un contrato compartido, y traduciendo entre operaciones, finanzas, liderazgo ejecutivo e ingenieros que todos definen «hecho» de manera diferente.

Trayectoria

Veintidós años. Sin lagunas en criterio.

PRESENTE  ·  BAJO NDA

Product Manager · AI-Lead · Principal Developer

Producto confidencial · equipo de 3 ingenieros
  • Desarrollador principal en un equipo de ingeniería de tres personas, responsable de la dirección del producto y la arquitectura de IA de extremo a extremo.
  • Detalles retenidos por confidencialidad — el trabajo es actual; el cliente simplemente no es mío para nombrar.
JUNIO 2022 — PRESENTE

Gerente de Business Intelligence, Estadísticas e Informes

ERC Global CX · Remoto, multinacional
  • Gestiono un equipo de BI y analítica de 5 personas entre Santo Domingo y EE. UU., e lideré la transformación de informes estáticos a una práctica completa de business intelligence.
  • Tengo a cargo datos y procesos de facturación, nómina y KPI de desempeño — consolidando datos de producción de EE. UU., Kenia, Sudáfrica, Filipinas y República Dominicana.
  • Enlace técnico principal entre operaciones, finanzas y liderazgo ejecutivo; entrego marcos de KPI, modelos de incentivos ponderados e informes de P&L directamente a VP y nivel C.
  • Actualmente transitando el stack a tecnologías de código abierto listas para IA para procesamiento de datos más rápido.
2025 — PRESENTE  ·  CONCURRENTE

Especialista en Contenido de Cumplimiento Sanitario

Empresa nacional de cumplimiento sanitario · Texas, EE. UU. (remoto)
  • Investigo y redacto documentación de políticas, procedimientos y licencias auditada para prácticas médicas de EE. UU. — cada documento es revisado y aprobado por un especialista en cumplimiento certificado.
  • Trabajo profundo y aplicado en HIPAA, HITECH, Stark Law, licencias sanitarias, estándares y regulación de EE. UU. — las prácticas de documentación deben resistir auditoría.
CONTRATO DE 6 MESES  ·  B2B

General Manager · Product Manager · Scrum Master

Proyectos empresariales farmacéuticos · República Dominicana
  • Lideré un equipo multifuncional de 6 personas (analistas, desarrolladores junior y senior) en tres productos concurrentes — BI geoubicado, una solución Microsoft Power Apps, y una plataforma SaaS con capacidades de call-centre.
  • Tenía a cargo la relación con el cliente y los stakeholders de extremo a extremo como GM / Product Manager / Scrum Master, y arquitecturé el layout de AWS (ELB, EC2, topología de red).
2014 — JUNIO 2022

Gerente de Estadísticas e Informes

ERC Global / Working Bees
  • Construí la función de informes desde dashboards de desempeño hasta P&L ejecutivo, sirviendo a personal de primera línea hasta nivel C.
  • Diseñé e implementé bases de datos, stored procedures, paquetes SSIS para ETL automatizado, y transferencia de datos entre servidores — eliminando silos de información institucional.
  • Tenía a cargo cálculos de ingresos, horas facturables y nómina que alimentaban los modelos financieros detrás del P&L y presupuestos de pronóstico.
2012 — 2014

Analista Senior → Gerente del Equipo de Informes

Laurus International · Santo Domingo
  • Lideré un equipo de 3 analistas como Analista Senior, luego gestioné el Equipo de Informes — diseñando e implementando pipelines ETL completos de SQL Server para facturación, nómina y KPIs operacionales.
  • Automaticé flujos de informes operacionales con SQL y Excel avanzado, reduciendo el tiempo de procesamiento manual en 40%.
2003 — 2010

Analista Principal de Estadísticas · Jefe de Departamento

Amov International Teleservices (Claro / América Móvil) · Santo Domingo
  • Lideré un departamento de estadísticas de 3 personas, teniendo a cargo estadísticas operacionales y servicios de informes para cuentas de telecomunicaciones internacionales, más análisis de procesos para proyectos operacionales.
  • Construí bases de datos, servidores de carpetas compartidas, macros y controles de entrada de datos en tiempo real para equipos distribuidos simultáneamente.
Credenciales — Jose Miguel (JM) Sanchez

Educación

  • B.S. Ingeniería de Software Universidad del Caribe (UNICARIBE) · en progreso
  • Diploma Técnico Profesional, Informática Politécnico Fabio A. Mota

Idiomas

  • Español Nativo
  • Inglés Profesional pleno (C2)
  • Italiano Conversacional

Confiabilidad e ingeniería

  • Site Reliability Engineering Google
  • Developing a Google SRE Culture Google
  • Spec-Driven Development Kiro / AWS
  • Clean Code with Go CodeSignal
  • Mastering Design Patterns with Go Especialización — creacional y conductual

Negocios y liderazgo

  • Certified Business Analysis Professional™ (CBAP®) Exam Prep Especialización Coursera
  • Business Analysis: Key Definitions & Strategy Analysis Starweaver
  • Effective Leadership Principles for Business Leaders CodeSignal
  • Adaptive Leadership Principles CodeSignal

Contratación

  • Entidad B2B de EE. UU. (Delaware) Contratación y nómina global sin fricción — sin gastos generales de empleador registrado para ti
El resultado final

Eficiencia que sientes más a escala.

No se trata de mantener eficiencia para gastar menos. Se trata de ingenierizar cada capa para hacer más con menos — así la ventaja no se encoge cuando creces, se compone. La misma disciplina que sirve a tus primeros cien usuarios sirve a tus primeros diez millones, y la brecha entre lo que ganas y lo que pagas para ganarlo se amplía todo el camino hacia arriba.

Infraestructura vs. ingresos, cuando escalas
Los ingresos suben. El costo para servirlo se mantiene casi plano. La banda verde ampliándose es margen bruto — y runway — que la eficiencia auto-hospedada devuelve al negocio.
hundreds millions of users →
Revenue Infrastructure cost Gross margin & runway
0.0%
Gross margin the architecture can sustain at scale
0.0%
Infrastructure, as a share of revenue
Illustrative — directional, not a quoted figure.

01Margen que se compone

Cuando la infraestructura es una parte decreciente de los ingresos, el margen bruto sube por sí solo mientras creces. Ese es el número sobre el que se suscribe un term sheet de Series A — y el que mantiene rondas posteriores en tus términos, no en los del mercado.

02Runway es opcionalidad

El capital no gastado en capacidad ociosa no es un ahorro para celebrar — es un ingeniero extra, un runway más largo, un pivot que puedes permitirte. Eficiente por construcción es default-alive por construcción.

03Escala sin el costo de la reescritura

La infraestructura sin estado, propia y portátil significa que compras capacidad cuando el ingreso lo pide — nunca antes, y nunca con una factura de lock-in o un proyecto de re-platforming que estanque el roadmap justo en el momento equivocado.

No construyo sistemas económicos. Construyo sistemas que se rehúsan a desperdiciar tu capital — así se compone en las únicas dos cosas que deciden si una empresa lo logra: el producto, y el tiempo para terminarlo.

— el principio operativo detrás de cada arquitectura en esta página
Una pregunta antes de irte

¿Cómo se vería el próximo año si el riesgo de plataforma simplemente dejara de ser tu problema?

Si la respuesta honesta es «materialmente diferente», esa es la conversación que vale la pena tener. Tráeme la restricción que crees que es imposible — el presupuesto, el objetivo de latencia, el regulador, la arquitectura que nadie quiere tocar. Esa es la parte que encuentro interesante.

LinkedIn
Envíame un mensaje directo

Ninguna dirección de correo ni número de teléfono se publica en esta página — deliberadamente. Si te pido que confíes en mí con los datos de tu plataforma, lo menos que puedo hacer es tratar mis propios detalles de contacto de la misma manera. El formulario enruta tu mensaje a mí directamente, encriptado en tránsito.