¿Qué hace un Software Engineering Manager?

¿Que hace un software engineering manager?
La figura del software engineering manager (SEM) es un perfil en la empresas de desarrollo de producto digital que procede de las startups tecnológicas de la costa este estadounidense. En este artículo voy a intentar desgranar que hace un Software Engineering Manager y cuales son sus responsabilidades principales.

En el modelo de desarrollo más tradicional, solemos agrupar los desarrollos en proyectos, este modelo requiere el rol de project manager (con formación project management professional, pmp o equivalente) que es el que se encarga de gestionar el proyecto en tres ámbitos principalmente: el económico, el equipo y el cliente. Con esas tres variables estira y aprieta donde considera oportuno para ejecutar proyectos rentables en los plazos previstos.

Las necesidades de gestión de un proyecto y un producto digital son diferentes.

Cuando pensamos en el desarrollo de productos digitales en empresas digitales, las necesidades de gestión son algo diferentes puesto que hay un alcance variable, un equipo fijo (por lo general) y un roadmap en lugar de una planificación. En esos casos suele desaparecer la figura del Project Manager porque al usar metodologías ágiles y prototipado rápido, no hace falta una gestión del alcance (si no una gestión del backlog) y el alcance económico se extrapola en base al equipo que tienes (no con un seguimiento del "estimate to complete").

Por lo tanto, podemos decir que la posición de Software Engineer Manager (SEM), dentro de la Software Engineer Career (Carrera profesional de ingeniería del software), encaja en la parte de gestión de procesos de producción, dirección de equipos y coordinación tecnológica. Los SEM son los responsables de implementar la estrategia de ingeniería de software definida por el VP of Software engineering strategy o por el CTO.

Responsabilidades clave de un Software Engineer Manager

Un Software Engineer Manager es el responsable de alinear a sus equipos, a la tecnología y a los procesos productivos.

Una empresa digital es una empresa que ha implantado la digitalización y entiende la necesidad de evolucionar sus productos digitales a la par que evoluciona su negocio. Por lo tanto, su equipo de ingeniería de software es tan relevante en la compañía como el equipo de ventas, logística o marketing. 

En las empresas digitales no tiene mucho sentido trabajar por proyectos que define negocio y ejecuta IT. Esto crea distancias grandes entre negocio y tecnología, pero si pones equipos scrum trabajando a la orden de negocio, suele pasar que la deuda tecnológica generada y la diferencia tecnológica entre los desarrollos de los diferentes equipos requieren costosas refactorizaciones en el medio plazo.

En las empresas digitales (y en las que pretenden serlo) hace falta una figura que sea la responsable de la gestión de los equipos de desarrollo así como de conservar la coherencia tecnológica entre los desarrollos. El Software Engineer Manager es esa figura de líder servicial que alinea a los equipos de desarrollo con la compañía garantizando la solidez tecnológica a la par que optimiza los procesos de desarrollo.

¿Cuáles son las responsabilidades de un software engineering manager?

Gestión de equipo de ingeniería

El equipo es uno de los puntos más importantes que deberá gestionar el Software Engineer Manager, esta es posiblemente la parte más importante y compleja de su función dada la naturaleza que tiene la gestión de personas en general. Las responsabilidad concreta es garantizar que los equipos disponen de las herramientas y conocimientos necesarios para ser autónomos y funcionales, y para ello deberá ocuparse de realizar las siguientes tareas:

  • Motivar al equipo y alinearlo con los principios de responsabilidad, colaboración y compromiso.
  • Realizar la selección de los perfiles necesarios para complementar las capacidades de sus equipos.
  • Analizar la evolución del equipo aprovechando puntos fuertes y reforzando los puntos débiles con nuevos miembros del equipo o con capacitación.
  • Identificar problemas externos al equipo de desarrollo que puedan hacer que este pierda su autonomía de desarrollo.
  • Dimensionar adecuadamente los equipos para poder cumplir con el roadmap marcado.
  • Identificación de riesgos y resolución de conflictos.

En el supuesto de disponer de equipos formados por proveedores externos, el Software Engineer Manager deberá formar parte de la selección del proveedor y deberá supervisar la correcta integración de los equipos externos con los equipos de la compañía.

El Software Engineer Manager debe ser un líder servicial que sea un referente al que asemejarse. Deberá trabajar desde el ejemplo y construir sus equipos basados en el respeto.

Existen algunas técnicas de la gestión de equipos tradicionales que se pueden aplicar para entender y mejorar los equipos. Ejemplo de ello son la teoría del quiere/puede, el modelo de liderazgo situacional de Hersey-Blanchard y el modelo de desarrollo de equipos de Tuckman. 

Gestión de procesos

La gestión y optimización de procesos suele ser uno de los puntos más relevantes del trabajo del Software Engineer Manager a vistas de la organización. Este trabajo es especialmente apreciado porque suelen ir acompañados tanto de ahorro económico como de mejoras competitivas.

Además, el Software Engineer Manager deberá trabajar con una mentalidad de prueba rápida, observación y aprendizaje del error con el fin de minimizar el riesgo. Esta forma de operar es lo que en la cultura DevOps llaman CLAMS (almejas en español), siglas que nos permiten memorizar los pasos a realizar para mejorar cualquier proceso.

Filosofía de desarrollo CLAMS para DevOps

Todos los procesos productivos deberán ser observados y serán susceptibles de mejora por parte del SEM, incluso aquellos procesos organizativos que relacionan a sus equipos con la organización. Por ejemplo, un Software Engineer Manager puede proponer hacer pruebas para cambiar la comunicación de su equipo con el equipo de marketing si eso hace que el proceso productivo mejore (siempre partiendo de la experimentación).

Es bastante común iniciar el trabajo de ingeniería de procesos revisando el proceso de delivery con una visión DevOps que garantice la correcta comunicación en todo el proceso productivo maximizando la automatización del proceso (desde desarrollo hasta la operación). Típicamente este proceso DevOps es representado por un símbolo infinito que nos recuerda la importancia de la mejora continua. En la siguiente imagen os muestro un ejemplo de set de herramientas de automatización típica en un entorno de microservicios distribuido en contendores.

Entorno DevOps de Ejemplo

Gestión de la tecnología

La gestión de la tecnología es otro de los puntos que deberá gestionar un Software Engineer Manager, y que obviamente va muy relacionada con los dos anteriores, puesto que el conocimiento equipo y las herramientas que usaremos para el despliegue deberán siempre estar correctamente alineadas.

Un SEM deberá garantizar que existan los siguientes puntos y que sus equipos tengan conocimiento sobre los siguientes aspectos tecnológicos:

  • Stack Tecnológico. Sus equipos de desarrollo deberán conocer el Stack Tecnológico sobre el que tienen que desarrollar y la capacidad de decisión que tienen sobre el mismo.
  • Reglas de desarrollo. Sus equipos deberán conocer las reglas de desarrollo que deberán seguir así como best practices, como usar las ramas del repositorio, como comentar, como documentar, patrones de diseño, ...
  • Artefactos de arquitectura. Sus equipos deberán conocer y usar esos artefactos de arquitectura como código común, librerías comunes, etc.
Tecnología responsabilidad del engineer manager

Tareas de un Manager de Ingeniería de Software

Aunque es complicado definir cuales son las tareas de un perfil tan estratégico como este, aquí ponemos algunas de las tareas que en esencia debería hacer un Software Engineer Manager.

  • Diseño, ejecución, uso y mantenimiento de aplicaciones y procesos DevOps.
  • Diseño y desarrollo de arquitectura de solución tecnológica.
  • Gestionar soporte para el desarrollo de negocios, ingeniería de sistemas y personal técnico de SR.
  • Supervisar la capacitación y el desarrollo del personal de ingeniería de software.
  • Asignación del trabajo al personal de ingeniería de software y evaluar el rendimiento del equipo.
  • Apoyo para reclutar personal de ingeniería, personal técnico y de formación para los equipos de proyecto.
  • Supervisar los resultados de ingeniería.
  • Gestionar el soporte continuo y proporcionar métricas del sistema para productos orientados al cliente.
  • Presentar aportes prácticos para decisiones tecnológicas estratégicas.
  • Apoyar la preparación de la Hoja de ruta tecnológica.
  • Garantizar que se cumplen con las best practices profesionales departamentales y de la compañía.
  • Ayuda a la traducción de los requisitos comerciales en requisitos y acciones técnicas.
  • Supervise la responsabilidad de informar para contratistas de software independientes, ingenieros de software y socios de subcontratación.
  • Asegúrese de que el personal de ingeniería de software esté adecuadamente capacitado para realizar todas las funciones del trabajo y use adecuadamente las herramientas relacionadas con el proyecto y el software.

Estos puntos pueden ser usados como job description de un Software Engineer Manager, pero a parte de estos puntos que pueden ser más o menos comunes, es importante validar que el profesional se alinea con la filosofía de desarrollo de la compañía (agile, procedimientos de desarrollo más tradicionales, ...).

Te puede interesar ...