🧪 Problem-Driven Systems Lab
Portafolio tecnico · Docker-first · 7 stacks

20 problemas reales de ingenieria, resueltos y verificables

Laboratorio de ingenierΓ­a enfocado en resolver problemas reales de rendimiento, observabilidad, resiliencia y arquitectura. Cada caso parte de un sintoma medible, nombra la causa, compara opciones y deja evidencia observable β€” en 7 lenguajes, con la primitiva nativa de cada runtime y no con la misma solucion traducida siete veces.

Casos de ingenieria20de sintoma a remediacion verificable
Lenguajes7con la primitiva nativa de cada runtime
Implementaciones140casos x stacks, todas operativas
Documentos publicados407cada uno como pagina HTML
Imagenes Docker149y 168 archivos compose validados en CI

Que demuestra este laboratorio

No es una coleccion de demos que devuelven 200 OK. Cada caso existe porque el problema aparece en produccion y cuesta dinero, tiempo o confianza.

πŸ”¬

Diagnostico tecnico

Cada caso parte de sintomas observados, nombra causas y compara opciones antes de proponer solucion.

🐳

Ejecucion reproducible

Cada caso y cada stack traen su propio Dockerfile y su compose. La via oficial es Docker, no un README optimista.

πŸ“ˆ

Operacion realista

Los casos usan base de datos, workers, metricas y trazas segun corresponda. No hay demos vacias que solo devuelven 200.

🎯

Honestidad tecnica

El repositorio declara donde el substrato es real y donde es simulado, y que garantiza y que no garantiza su seguridad.

Empieza por tu rol

DiseΓ±ado para especialistas en selecciΓ³n, lΓ­deres tΓ©cnicos y equipos de ingenierΓ­a que buscan validar criterio tΓ©cnico con escenarios reproducibles.

Los 20 casos

Cada ficha abre el problema completo: sintomas, diagnostico, causas raiz, opciones, trade-offs, la solucion en los 7 stacks y que mirar para comprobarlo.

⚑
Caso 01 Β· Rendimiento

API lenta bajo carga

La aplicacion responde bien con pocos usuarios, pero degrada su latencia y estabilidad al aumentar la concurrencia.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸ”„
Caso 02 Β· Rendimiento

N+1 queries y cuellos de botella en base de datos

La aplicacion ejecuta demasiadas consultas por solicitud o usa el acceso a datos de forma ineficiente, generando saturacion de base de datos.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸ”­
Caso 03 Β· Observabilidad

Observabilidad deficiente y logs inutiles

Existen errores e incidentes, pero no hay trazabilidad suficiente para identificar causa raiz de forma rapida y confiable.

OPERATIVO🐘 PHP🟒 Node.js🐍 Pythonβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
⏱️
Caso 04 Β· Resiliencia

Cadena de timeouts y tormentas de reintentos

Una integracion lenta o inestable dispara reintentos, bloqueos y cascadas de fallas entre servicios.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
🧠
Caso 05 Β· Rendimiento

Presion de memoria y fugas de recursos

El sistema consume memoria, descriptores o conexiones de forma progresiva hasta degradar o caerse.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
🚚
Caso 06 Β· Entrega

Pipeline roto y entrega fragil

El software funciona en desarrollo, pero falla al desplegar, promover cambios o revertir incidentes con seguridad.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸ—οΈ
Caso 07 Β· Arquitectura

Modernizacion incremental de monolito

El sistema legacy sigue siendo critico, pero su evolucion se vuelve lenta, riesgosa y costosa.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
🧩
Caso 08 Β· Arquitectura

Extraccion de modulo critico sin romper operacion

Se necesita desacoplar una parte clave del sistema, pero esa parte participa en flujos sensibles y no admite quiebres.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
🌐
Caso 09 Β· Resiliencia

Integracion externa inestable

Una API, servicio o proveedor externo introduce latencia, errores intermitentes o reglas cambiantes que afectan el sistema propio.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸ’Έ
Caso 10 Β· Arquitectura

Arquitectura cara para un problema simple

La solucion tecnica consume mas servicios, complejidad y costo del que el problema de negocio realmente necesita.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸ“Š
Caso 11 Β· Operaciones

Reportes pesados que bloquean la operacion

Consultas y procesos de reporting compiten con la operacion transaccional y degradan el sistema completo.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸ‘€
Caso 12 Β· Operaciones

Punto unico de conocimiento y riesgo operacional

Una persona, modulo o procedimiento concentra tanto conocimiento que el sistema se vuelve fragil ante ausencias o rotacion.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
🌧️
Caso 13 Β· Rendimiento

Cache stampede y thundering herd

Cuando la clave caliente expira, los N llamadores concurrentes recalculan el mismo valor y el origen recibe la rafaga entera.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
🚰
Caso 14 Β· Rendimiento

Agotamiento del pool de conexiones

Un pool chico, sin timeout de adquisicion y con fugas en el camino de excepcion deja de dar conexiones para siempre.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
🌊
Caso 15 Β· Resiliencia

Backpressure en colas de mensajes

Productores mas rapidos que consumidores: la cola sin limite crece hasta el OOM y la acotada obliga a elegir entre frenar, perder o mudar el problema.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸ”
Caso 16 Β· Resiliencia

Idempotencia y efectos duplicados

Un reintento por timeout se convierte en un segundo cobro salvo que el servidor pueda distinguir 'es la primera vez que veo esto' de 'ya procese esto'.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
🧬
Caso 17 Β· Entrega

Migracion de esquema sin downtime

Un ALTER TABLE sobre una tabla caliente bloquea la aplicacion entera; expand-contract reparte el mismo trabajo en lotes que nadie nota.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
❄️
Caso 18 Β· Resiliencia

Arranque en frio y retraso del autoescalado

El autoescalador suma instancias y la tasa de error sube con cada una: el proceso esta vivo y el healthcheck en verde mucho antes de que la instancia pueda servir.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸ”Ž
Caso 19 Β· Observabilidad

Deriva del indice de busqueda y CDC roto

La busqueda responde 200 y lo que devuelve esta mal: el indice se desincroniza de a un documento por vez y nada dispara una alerta.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust
πŸͺ¦
Caso 20 Β· Resiliencia

La dead letter queue olvidada

El pipeline muestra throughput normal y cero errores mientras pierde el 14% de los mensajes: los errores se fueron a una cola que nadie mira.

OPERATIVO🐘 PHP🐍 Python🟒 Node.jsβ˜• JavaπŸ”΅ .NET🐹 GoπŸ¦€ Rust

Filtrar por categoria o stack →

Los 7 stacks

El mismo problema resuelto con la herramienta que cada runtime trae de fabrica. Donde un lenguaje no tiene la primitiva, el perfil lo dice en vez de disimularlo.

Comparar los 7 stacks →

Cobertura real de los 20 casos en los 7 stacks del laboratorio

Como se ejecuta

Docker es la via oficial. Un comando levanta el hub de un stack completo con sus 20 casos detras de un unico puerto.

Laboratorio PHP + portal

git clone https://github.com/vladimiracunadev-create/problem-driven-systems-lab.git
cd problem-driven-systems-lab
docker compose -f compose.root.yml up -d --build
# portal en http://localhost:8080

El portal es el hub de evaluacion: rutas por audiencia, seleccion por lenguaje y probes server-side.

Cualquier otro stack

docker compose -f compose.rust.yml up -d --build
curl -s http://localhost:8700/13/health

docker compose -f compose.go.yml up -d --build
curl -s http://localhost:8600/20/health

Cada stack expone sus 20 casos en su propio puerto. Detalle completo en INSTALL y RUNBOOK.

Que es real y que no

La honestidad tecnica es parte del producto. El repositorio declara la frontera en vez de dejar que el lector la asuma.

🔍 Fidelidad del substrato

Los casos 01 y 02 ejecutan SQL real contra un motor en los 7 stacks: db_hits cuenta ejecuciones, no iteraciones de un bucle. La asimetria que queda β€” solo PHP cruza un socket TCP contra PostgreSQL β€” esta documentada caso por caso.

Ver el caso 01 →

🔒 Postura de seguridad

El laboratorio esta pensado para localhost. Lo que el codigo garantiza (prepared statements, allowlists, clamping) y lo que no (auth, rate limiting, TLS) esta escrito, no insinuado.

Leer SECURITY →

Nota: este no es un benchmark de lenguajes. Comparar tiempos entre stacks aqui seria comparar decisiones de diseno distintas bajo cargas distintas. Lo que se compara es como piensa cada runtime el mismo problema.

Documentacion

Los 407 documentos del repositorio estan publicados aqui como HTML. Ninguno obliga a bajar un .md ni a salir del sitio.

Indice completo →