Aceptamos nuevos proyectos · equipo formado exclusivamente por profesionales sénior · trabajo a distancia prioritario PWN-ALL · Estudio de software a medida

Software en Rust y Python que perdure al equipo que lo lanzó.

Somos un estudio formado exclusivamente por profesionales con amplia experiencia que desarrollamos software a medida en dos lenguajes a propósito: Rust, donde cometer errores sale caro, y Python, donde retrasarse en el lanzamiento sale caro.

Mejora media p99 en 40 migraciones
Reducción de memoria 0 frente a los valores de referencia de JVM / Node
Servicios en producción 0 desde 2024
Incidentes de seguridad resueltos 0 a lo largo de toda nuestra historia
Equipos que confían en nuestro código
01 Dos idiomas. No cinco.

Una pila, elegida a propósito.

Las agencias políglotas suenan muy bien en una presentación. En la práctica, significan tres sistemas de compilación, cuatro variantes de null y un cementerio de servicios a medio mantener. Elegimos dos lenguajes que cubren el 95 % de las cargas de trabajo reales, y nos hemos vuelto muy, muy buenos en ambos.

Ruta crítica · sistemas · seguridad

Rust

9,6 puntuación de ajuste interno

Seguro para la memoria sin recolector de basura. Sin conflictos de datos en tiempo de compilación. El revisor de código más exigente que jamás tendrás —y una vez que te da el visto bueno, tu servicio no te despertará el domingo.

Cuando lo buscamos

  • Canales de pago y cualquier cosa relacionada con dinero o datos personales
  • Pasarelas API de alto rendimiento con SLA de cinco nueves
  • Motores de coincidencia de baja latencia, operaciones bursátiles, en tiempo real
  • Módulos WebAssembly enviados al navegador
  • Herramientas de CLI y daemons que deben iniciarse en milisegundos

Compromisos que no vamos a ignorar

  • Formación de nuevos empleados: ~2–4 semanas hasta que son productivos
  • Tiempos de compilación en espacios de trabajo enormes (lo solucionamos con sccache)
  • Ecosistema más joven que el de Java: maduro donde importa
Glue · datos · ML · velocidad

Python

9,3 puntuación de ajuste interno

El camino más rápido desde la pizarra hasta un sistema operativo. El ecosistema más rico del mundo para datos, aprendizaje automático y automatización. Python moderno — 3.12, uv, ruff, pydantic, FastAPI — es un lenguaje preciso, tipado y lo suficientemente rápido para la mayor parte de lo que necesitas.

Cuando lo buscamos

  • Herramientas internas, paneles de control, paneles de administración
  • ETL, canalizaciones de datos, Airflow / Dagster / Prefect
  • ML: entrenamiento, implementación y evaluación
  • Automatizaciones e integraciones con las API de los proveedores
  • MVP que se lanzarán este trimestre, no el año que viene

Las concesiones que no vamos a ignorar

  • El rendimiento de un solo núcleo es entre 20 y 50 veces más lento que el de Rust
  • Mayor consumo de memoria por solicitud: fatal para algunas cargas de trabajo
  • El tipado dinámico es un problema sin mypy / pydantic estrictos
Rust, donde lo incorrecto sale caro. Python, donde la lentitud en el lanzamiento sale cara. Un equipo. Cero dogmas.
02 Las cifras, no las sensaciones

Rust y Python frente a los sospechosos habituales.

Toca una métrica para resaltar dónde se sitúa cada lenguaje. Las puntuaciones van de 0 a 10, recopiladas a partir de nuestras propias pruebas de rendimiento y fuentes públicas (Techempower R22, CLBG, migraciones reales que hemos llevado a cabo).

Criterio Rust Python Go C++ Java Node.js
Rendimiento bruto (p99, un solo núcleo) 10 3 7 10 7 5
Seguridad de la memoria y conflictos de datos 10 9 8 2 8 7
Tiempo hasta el prototipo funcional 5 10 7 3 6 8
Amplitud del ecosistema 8 10 7 9 10 9
Concurrencia sin complicaciones 10 6 9 4 6 7
Coste operativo por solicitud 10 5 8 9 5 6
Disponibilidad de personal sénior 6 10 7 8 10 9
Mantenibilidad a 10 años 10 8 8 5 8 5
03 De → A

Qué cambia al migrar.

Elige un lenguaje de partida. Observa el impacto de pasar a Rust o Python. Las cifras son medianas de nuestros últimos 40 proyectos de migración, no palabrería de marketing.

Actualmente en

C / C++

Rápido, sí. Pero cada puntero nulo es un CVE potencial, cada subproceso es una carrera de datos potencial, y tu sistema de compilación es el trabajo a tiempo completo de alguien.

Problemas habituales
  • CVE de seguridad de la memoria
  • Comportamiento indefinido
  • Expansión del sistema de compilación
Ir a

Rust

Rendimiento ×6,4
Consumo de memoria −78 %
Fallos en tiempo de ejecución −99 %
Factura mensual de computación −65 %

Ideal si actualmente convives con errores de puntero nulo, conflictos de datos o memoria que crece sin límites. Rust mantiene la velocidad y elimina los riesgos ocultos.

Pasar a

Python

Velocidad de desarrollo ×3,1
Líneas de código −55 %
Tiempo hasta el lanzamiento −60 %
Sobrecarga de tiempo de ejecución +40 %

Ideal cuando el coste real es el tiempo de ingeniería, no la CPU. Cambia el rendimiento bruto por un bucle de retroalimentación más corto, bibliotecas más completas y código que los humanos puedan leer.

Cómo medimos estas cifras

Medianas de 40 migraciones completadas entre 2023 y 2026. Rendimiento medido en la capa de aplicación (p50 de extremo a extremo bajo carga realista, no microbenchmarks). La memoria es RSS en estado estable. El coste es el de la computación bajo demanda mensual en AWS/GCP, con el resto de condiciones iguales. Los resultados individuales varían; también publicamos los que no salieron según lo previsto, previa solicitud.

04 Cifras sin asteriscos

Solicitudes por segundo bajo carga real.

Carga de trabajo idéntica — validación de JSON → consulta a Postgres → renderización — medida en un único equipo AMD Ryzen 7. No se trata de microbenchmarks. Fuente y metodología ↓

  1. 1 Rust · Axum
    21 030 solicitudes/s
  2. 2 C# .NET · ASP.NET Core
    14 707 solicitudes/s
  3. 3 Node.js · Fastify
    9.340 solicitudes/s
  4. 4 C++ · Drogon
    7.200 solicitudes/s
  5. 5 Go · Gin
    3.546 solicitudes/s
  6. 6 Python · FastAPI (Uvicorn)
    1.185 solicitudes/s
  7. 7 PHP · Laravel
    299 solicitudes/s

Interprétalo correctamente: Python está cerca de la parte inferior de este gráfico, y eso está bien. No ejecutamos FastAPI en la ruta principal. Lo ejecutamos donde 1.185 solicitudes por segundo ya son aproximadamente 10 veces más de lo que necesita la carga de trabajo, y las horas de ingeniería valen más que los ciclos de CPU. Metodología: AMD Ryzen 7, Linux, Docker, instancia única, un marco popular por lenguaje. Las cifras son promedios de múltiples ejecuciones.

05 El coste real del código defectuoso

Lo que realmente te cuesta una interrupción del servicio.

«Cinco nueves» no es marketing. A continuación se muestra lo que cuesta una hora de tiempo de inactividad no planificado, por sector — con fuentes. Construimos Rust donde residen estas cifras.

Coste acumulado desde que abriste esta sección
Finanzas / sanidad 0 ~83 000 $/min · 5 millones de $/h
Automoción 0 ~38 000 $/min · 2,3 millones de $/h
Grandes empresas 0 23 750 $/min · 1,4 M $/h
Empresa mediana 0 ~5 000 $/min · 300 000 $/h
Finanzas y sanidad Más de 5 millones de dólares por hora

Los sectores con mayor riesgo. Las plataformas de negociación, los sistemas de liquidación y los sistemas clínicos pueden superar los 5 millones de dólares por hora durante una interrupción grave, sin contar los costes regulatorios o de litigios.

Fuente: Estudio de Gartner sobre las empresas de la lista Fortune 500 de 2024; Costo por hora del tiempo de inactividad de ITIC de 2024.
Fabricación de automóviles 2,3 millones de dólares por hora

Una línea de producción parada supone una pérdida de aproximadamente 640 dólares por segundo. La interrupción de CrowdStrike en julio de 2024 le costó solo a Delta Air Lines 380 millones de dólares en cinco días.

Fuente: Desglose sectorial de Erwood Group 2025; análisis posterior de Antithesis CrowdStrike.
Grandes empresas (promedio) 1,4 millones de dólares por hora

Cifra de BigPanda para grandes empresas en 2024: 23 750 dólares por minuto. El ITIC informa de que el 41 % de las grandes empresas pierden entre 1 y 5 millones de dólares por hora de interrupción del servicio.

Fuente: Estudio de BigPanda de 2024; 11.º informe anual del ITIC sobre el coste por hora del tiempo de inactividad.
Global 2000 (Oxford Economics) 400 000 millones de dólares al año

Coste oculto total del tiempo de inactividad no planificado en las 2000 empresas más grandes del mundo, según el estudio de Oxford Economics de 2024: un impacto medio de 200 millones de dólares por empresa al sumar los ingresos, la productividad y las medidas correctivas.

Fuente: Oxford Economics 2024, «The Hidden Costs of Downtime».
Medianas y grandes empresas (hora típica) Más de 300 000 $/hora

Encuesta de ITIC de 2024: más del 90 % de las medianas y grandes empresas sitúan ahora el coste de una sola hora de tiempo de inactividad no planificado por encima de este umbral, sin contar las sanciones legales, civiles o normativas.

Fuente: Informe de ITIC de 2024 sobre el coste por hora del tiempo de inactividad.
Pequeñas y medianas empresas (pymes) 25 000–150 000 $ / hora

El estudio conjunto de ITIC y Calyptix de 2025 revela que muchas pymes pierden esta cantidad por hora; Siemens informa de que las pymes afectadas por interrupciones pueden llegar a perder hasta 150 000 $/hora. La duración media de una interrupción es de 87 minutos.

Fuente: ITIC + Calyptix 2025; Siemens, «El verdadero coste del tiempo de inactividad», 2024.
06 Trabajos seleccionados

Tres proyectos. Tres retos diferentes.

Anonimizados donde lo exige el acuerdo de confidencialidad, específicos donde lo permiten los resultados. Estos son los proyectos que recomendaríamos en primer lugar a un comprador técnico.

  1. Caso 01 Python Base de datos Criptografía RGPD

    Almacén de datos fintech: 4 veces más pequeño, 5,5 veces más rápido y conforme a las normativas globales.

    El cliente tenía un clúster de Postgres de 1,8 TB sobrecargado con columnas heredadas, índices obsoletos y BLOB cifrados en línea que habían crecido a lo largo de siete años. El cifrado se ejecutaba en una biblioteca obsoleta señalada en tres auditorías distintas. El riesgo regulatorio era real; los auditores estaban al acecho.

    Lo que hicimos

    • Auditoría completa del esquema y del uso, eliminación de columnas e índices no utilizados, introducción de una partición adecuada.
    • Migrar el canal de cifrado de una biblioteca heredada a una pila AEAD moderna y auditada con claves rotativas.
    • Convertir el cifrado BLOB en línea a cifrado de sobre referenciado + KMS dedicado.
    • Alinear los flujos de retención de datos y de acceso de los interesados con el RGPD, la CCPA y la APPI.
    Resultado

    Los mismos datos, una cuarta parte de la factura de almacenamiento, 5,5 veces más rendimiento y un informe de conformidad impecable para el próximo regulador que viniera a inspeccionar.

  2. Caso 02 Rust C++ → Rust Seguridad Almacenamiento

    Servicio de C++ reescrito en Rust: más de 100 errores de clase CVE eliminados en 9 semanas.

    Servicio de procesamiento de archivos orientado al usuario en C++, que se bloqueaba cada 4-5 días y se parcheaba in situ cada vez. Nuestra auditoría reveló más de 100 errores reales: rutas de denegación de servicio, desbordamientos de búfer, gestión de solicitudes sin límites. Los errores 503 en horas punta eran un ritual semanal. En cuanto al almacenamiento, las subidas de los usuarios se habían acumulado en un marasmo de archivos duplicados que consumían el espacio del bucket.

    Lo que hicimos

    • Reescritura completa en Rust (axum + tokio) con validación estricta de entradas y límites de recursos definidos.
    • Pruebas basadas en propiedades + cargo-fuzz en cada analizador y límite de formato de transmisión.
    • Capa de almacenamiento por contenido con deduplicación en el momento de la escritura.
    • Implementación azul-verde en una ventana de integración de 4 horas, sin tiempo de inactividad.
    Resultado

    El servicio pasó de ser «frágil y parcheado semanalmente» a «dejamos de mirar el buscapersonas». Los costes de almacenamiento se redujeron con la deduplicación, las incidencias sobre errores y los 503 desaparecieron, y la reescritura se amortizó en menos de un trimestre.

  3. Caso 03 Rust Python eBPF / XDP CRM · 4000 usuarios

    CRM empresarial, rediseñado: de 18 servidores a 5, reducción de gastos de más del 60 %.

    CRM interno que da servicio a más de 4000 usuarios en IAM, SOC, registro centralizado, chat, compartición de archivos, VoIP y datos cifrados de extremo a extremo. Dieciocho servidores, Cloudflare por encima, y una factura de la nube que no dejaba de crecer independientemente del número de empleados. Reconstruimos la ruta principal en Rust, mantuvimos Python en la capa de integración y generación de informes, y colocamos un filtro eBPF/XDP directamente delante de la entrada.

    Lo que hicimos

    • Servicios en Rust para autenticación (IAM), mensajería en tiempo real, señalización VoIP y transferencia de archivos.
    • Python para interfaces de administración, generación de informes, correlación de eventos SOC e integración con las API de los proveedores.
    • Bot eBPF/XDP y filtrado de abusos en el kernel: sustituyó a Cloudflare para esta carga de trabajo.
    • Pipeline de registro estructurado reescrito en torno a un esquema de copia cero.
    Resultado

    Trece servidores menos, ya no hay partida presupuestaria para Cloudflare, el equipo del SOC ve una señal más clara a través del canal de registro, y el director financiero dejó de hacer preguntas incómodas sobre el presupuesto de infraestructura.

07 Cómo trabajamos realmente

Ajusta los parámetros. Observa cómo cambia el plan.

Cada proyecto equilibra velocidad, coste y fiabilidad. La estimación de cinco fases que se muestra a continuación está calibrada con respecto a las medias del sector (descubrimiento 2-6 semanas, arquitectura 1-4 semanas, implementación 4-20 semanas, refuerzo 2-8 semanas, entrega 1-2 semanas —según informes de 2024-2026 de NIX United, Agilie, SOLTECH y OTG Lab). Mueve los controles deslizantes; el plan se reajusta en tiempo real.

01

Fase de descubrimiento

3 semanas

Lee tu código, entrevista a tu equipo de operaciones, enumera las incógnitas, elige el lenguaje por componente.

  • Entrevistas sobre el dominio y auditoría del código
  • Registro de riesgos y objetivos del SLA
  • Decisión sobre el lenguaje por servicio
02

Arquitectura

2 semanas

Contratos antes que el código. OpenAPI / protobuf, modelos de datos, topología de implementación, plantillas de runbook.

  • Solicitudes de cambio (RFC) para cada contrato público
  • Modelo de datos + plan de migración
  • Referencia de «infraestructura como código»
03

Implementación

8 semanas

PR pequeñas, CI en verde desde el primer día, implementaciones en cada fusión, revisión por parte de un segundo senior.

  • Rust: axum · tonic · sqlx
  • Python: FastAPI · Pydantic · SQLAlchemy
  • Demostraciones semanales + registro de cambios
04

Fortalecimiento

3 semanas

Fuzzing, pruebas basadas en propiedades, pruebas de carga con tráfico realista, modelo de amenazas.

  • cargo-fuzz · proptest · hypothesis
  • Pruebas de carga k6 vinculadas a los SLO
  • Revisión de seguridad y auditoría de dependencias
05

Entrega

1 semana

Manuales de procedimientos, rotación de guardias, ADR y un equipo que ya ha lanzado esto una vez.

  • Manuales de procedimientos + matriz de guardias
  • Registro de ADR y diagramas de arquitectura
  • Soporte durante 30 días tras el lanzamiento
08 El mismo problema, dos lenguajes

Cómo se ve el mismo punto final en cada uno.

Recuperar un usuario, validar la entrada, guardar en Postgres, devolver JSON. Cambia entre lenguajes: ambos son código real que realmente lanzaríamos.

SQL_CREATE_USER = "insert into users(email,name) values(lower($1),$2) returning id,email,name"
Name = Annotated[str, StringConstraints(strip_whitespace=True, min_length=1, max_length=120)]

class UserIn(BaseModel):
    email: EmailStr
    name: Name

class UserOut(UserIn):
    id: int

@router.post("/users", response_model=UserOut, status_code=201)
async def create_user(u: UserIn) -> UserOut:
    try:
        row = await pool.fetchrow(SQL_CREATE_USER, str(u.email), u.name)
   except UniqueViolationError as exc:
        raise HTTPException(status_code=409, detail="el correo electrónico ya existe") from exc
    if row is None:
        raise HTTPException(status_code=500, detail="error al insertar")
    return UserOut.model_validate(dict(row))
#[derive(Deserialize, Validate)]
#[serde(deny_unknown_fields)]
pub struct UserIn {
    #[validate(email)]
    pub email: String,
    #[validate(custom(function = "valid_name"))]
    pub name: String,
}

pub async fn create_user(
    State(pool): State<PgPool>,
    ValidatedJson(u): ValidatedJson<UserIn>,
) -> Result<(StatusCode, Json<UserOut>), ApiError> {
   let user = sqlx::query_as!(UserOut,
        "insert into users(email,name) values(lower($1),$2) returning id,email,name",
        u.email.as_str(),
        u.name.trim(),
    )
    .fetch_one(&pool)
    .await
    .map_err(ApiError::from_db)?;

    Ok((StatusCode::CREATED, Json(user)))
}
Líneas de código
16 22
Rendimiento
1.185 solicitudes/s 21 030 solicitudes/s
Latencia p50
21,0 ms 1,6 ms
RAM en reposo
41,2 MB 8,5 MB
Respondemos en el plazo de 1 día laborable. No es broma.

Te has leído toda la página.
Vamos a crear esto.

Dinos qué problema tienes con tu pila tecnológica o qué quieres crear desde cero. Recibirás una opinión técnica real, no un discurso de ventas.

  • Sin ingenieros junior. Sin deslocalización.
  • Opciones de precio fijo para trabajos de alcance definido.
  • Firmamos un acuerdo de confidencialidad antes de preguntarte nada.