Semi Senior Software Engineer
Job Description:
Buscamos un/a Semi Senior Software Engineer para ejecutar, con las manos en el código, el plan de modernización de la plataforma: alguien con base sólida en .NET y ganas de aprender a fondo un sistema real en producción, trabajando codo a codo con el Senior Engineer que lidera la arquitectura. Somos una plataforma SaaS de firma electrónica y gestión contractual (CLM) con clientes activos en producción. El producto corre sobre un monolito .NET Framework con satélites en .NET 8, un front React y Azure como nube. Hay seis años de código, deuda técnica conocida y un plan de modernización progresiva ya definido. No vamos a reconstruir la plataforma: vamos a evolucionarla sin frenar el negocio. Este rol existe porque la modernización necesita capacidad de ejecución constante: migraciones, refactors, tests, pipelines. Es el lugar ideal para alguien que quiere dar el salto a senior aprendiendo de un referente técnico, en un sistema con problemas reales y no en un proyecto de laboratorio. • Reporta a: Senior Software Engineer (referente técnico) y, por encima, al CTO (fractional). • Equipo: equipo core de backend (4 personas), dupla de front, QA/certificación independiente. • Modalidad: remoto (LATAM, huso horario Argentina ±2 h), con disponibilidad para reuniones presenciales ocasionales. • Dedicación: full-time. Responsabilidades El rol tiene cuatro frentes. El peso principal está en la ejecución; los otros tres crecen con el tiempo. 1. Ejecutar la modernización • Implementar tareas concretas del plan de evolución: migración de satélites a .NET 10, actualización del monolito a .NET Framework 4.8.1, actualización de paquetes, reemplazo de dependencias obsoletas. • Participar en la migración del front React a una versión soportada, major por major, con la dupla de front. • Construir y mantener pipelines de CI/CD en GitHub con build y tests en cada PR, siguiendo las definiciones del Senior. • Escribir tests unitarios e integración sobre los módulos que se van tocando, de forma que cada refactor deje el código mejor cubierto que antes. 2. Aprender y documentar el legacy • Conocer el monolito módulo por módulo (dominio, servicios, entidades, integraciones, esquema de datos) a medida que se trabaja sobre él. • Documentar lo que se descubre: diagramas, READMEs por módulo, decisiones y gotchas, en el repo y en lenguaje simple. • Atender incidentes de producción de complejidad media con acompañamiento del Senior, y participar de releases y rollbacks. 3. Hands-on en código de producción • Desarrollar features y correcciones en backend (.NET) y, en menor medida, en front (React). • Refactorizar clases grandes y extraer servicios siguiendo el diseño acordado, con PRs pequeños y revisables. • Usar herramientas de AI para desarrollo (agentes de código, generación de tests, análisis de repositorio) con criterio y siempre revisando lo generado. • Hacer code review de pares con atención y a tiempo. 4. Compartir conocimiento • Hacer pair programming con el Senior y con el equipo core de forma regular. • Preparar y dictar sesiones técnicas cortas sobre lo aprendido (una nueva herramienta, una migración hecha, un módulo entendido). • Explicar en los PRs el «por qué» de cada cambio, no solo el «qué». Requisitos excluyentes Buscamos base sólida y ganas de profundizar, no un historial largo. En la entrevista vamos a pedir ejemplos concretos de lo que hayas hecho. Área Lo que necesitamos Experiencia .NET legacy .NET moderno 3 a 5 años desarrollando software profesionalmente, con al menos 2 en .NET sobre sistemas en producción. Haber trabajado en .NET Framework 4.x con ASP.NET MVC o Web API y Entity Framework 6. Entender cómo se despliega y configura en IIS. Experiencia en .NET 6 o superior con ASP.NET Core y EF Core. Haber participado (no necesariamente liderado) de una actualización de versión de framework o de una migración de .NET Framework a .NET. Datos Nube CI/CD y Git Front SQL Server: consultas, joins, índices básicos, migraciones de esquema con EF o scripts. Capacidad de analizar una query lenta. Azure a nivel práctico: App Services, Functions, SQL, Blob Storage. Haber desplegado y diagnosticado algo en Azure. Git con fluidez (branches, rebase, PRs). Haber escrito o modificado un pipeline en GitHub Actions o Azure DevOps. Lectura y modificación de código React y TypeScript. No hace falta ser especialista, sí poder hacer cambios acotados y revisar PRs del front. Área Calidad Comunicación Lo que necesitamos Tests unitarios como práctica habitual. Conocer los principios básicos de refactoring seguro. Español nativo o fluido. Capacidad de explicar un cambio por escrito en un PR y de pedir ayuda a tiempo. Inglés técnico para leer documentación. Deseables Ninguno es excluyente, pero suman: • Uso cotidiano de herramientas de AI para desarrollo (Claude Code, Copilot, Cursor o similares) y criterio para revisar lo que generan. • Experiencia en Azure Functions y servicios event-driven. • Nociones de infraestructura como código (Terraform o Bicep). • Experiencia con logs estructurados y App Insights. • Conocimiento de seguridad aplicada: gestión de secretos con Key Vault, OWASP básico. • Haber trabajado con PDF, certificados o firma digital. • Experiencia en SaaS B2B multi-tenant. • Haber trabajado en equipos chicos donde la misma persona codea, prueba y despliega.