Escala para desarrolladores de Software: Junior, Middle, Senior, Arquitecto

No existe en la industria del Software un entendimiento común de lo que significa ser un desarrollador Junior, Middle, Senior o Arquitecto, si bien son términos que se usan constantemente y los roles y ofertas de empleo se categorizan así, es poco claro tanto para las empresas como para los desarrolladores lo que estos títulos conllevan y lo que se debería esperar en cada caso.
Para cada contexto, situación, cultura se tiene un concepto propio, con un vocabulario común las empresas podrían tener un mejor entendimiento de los perfiles que les permitan competir y mantenerse en un nivel por lo menos similar a las otras empresas en el mercado en lo que se refiere a capacidades de sus empleados.

La idea de este artículo es entonces sugerir conceptos generales, apoyados en definiciones, perfiles y necesidades a nivel mundial.

Algunos ejemplos de ofertas actuales (figura 1):

Ofertas

Después de unos intensos meses participando en múltiples procesos de selección para diferentes tipos de empresas de desarrollo (locales, nacionales, multinacionales, extranjeras) me quedaron varias inquietudes sobre los perfiles requeridos, los conocimientos mínimos con los que se debía contar para cada caso y las habilidades específicas, esto sumado a un interés personal por ser Arquitecto (el mejor Arquitecto que se pueda ser hoy a nivel mundial), me di a la tarea de preguntar, investigar, estudiar y definir de una forma generalizada y consistente lo que un profesional del desarrollo de software debería ser.

La mayoría de conceptos a continuación planteados son mi visión particular de lo que es el Software y la forma como desde nuestra propia personalidad aportamos a su construcción, esto visto desde la Ingeniería, pensando en implementaciones de alta calidad y usuarios felices.

Cuadrante 3+1 (figura 2):

Cuadrante

El primer nivel entonces de definiciones tiene 4 aspectos fundamentales: Pasión, Comunicación, Liderazgo y Habilidades técnicas. La división 3+1 hace referencia a 3 habilidades blandas y 1 habilidad de conocimiento específica.  Si bien este cuadrante aplica para la gran mayoría de profesiones, es de vital importancia para el software porque su resultado está altamente relacionado con la forma en las que las personas interesadas en el producto interactuan para crearlo (ver conways’ law).  Una idea que se olvida constantemente en el ámbito de la ingeniería es que somos personas, no máquinas y que nuestras acciones y resultados dependen en gran medida de como nos relacionamos y no meramente del conocimiento técnico.

Un pequeño detalle a las habilidades blandas para entrar en el detalle técnico:

Pasión: Es el motor de nuestras actividades del día a día, es la actitud con la que se encaran los desafíos a nivel personal y profesional, esa energía que se siente cuando se está comprometido con una causa. Creo que es la base y principal controlador del éxito que podemos alcanzar como personas y profesionales. ¿Se puede ser un desarrollador sin pasión? claro que sí, para hacer código basta leer un manual y escribir unas líneas, ahora bien ¿Se puede hacer Ingeniería de Software de alta calidad? probablemente no.

Hace algún tiempo tenía una discusión sobre si se requiere Arquitectura para desarrollar aplicaciones o no, si es un requisito fundamental o no, la conclusión es: depende, si se piensa en una aplicación para un único usuario o incluso único cliente, con muy pocas funcionalidades y con cero importancia en cuanto a la calidad, la respuesta es: no se necesita, pero si por el contrario se necesita construir sistemas más complejos y garantizar que se satisface a todos los interesados, la respuesta es: si se quieren evitar dolores de cabeza hágalo, si no le importa ni su empresa ni su cliente, ignórelo.

Comunicación: Como se había indicado anteriormente las condiciones propias de los productos de software hacen que el nivel de relacionamiento y por ende la comunicación sea muy relevante, el entender el mínimo detalle de lo que la contra parte quiere expresar resulta vital.

Liderazgo:  El liderazgo visto desde el punto de vista de capacidad de servicio, de ayuda, de siempre ser el primero en dar ejemplo sobre como debe actuar un Profesional en una materia.

Este es el primer punto en el cual tengo discrepancias con la realidad de la industria hoy,  suele pasar que los líderes son aquellos con “nivel técnico más alto”, y no los que cuentan con un mejor balance entre habilidades blandas y duras. Desafortunada y tristemente es bastante difícil encontrar líderes que no pongan sus necesidades (mejorar hoja de vida con nuevos conceptos, practicar las tecnologías de moda…) por encima de las necesidades de la solución tecnológica, que entiendan lo que es poner sus destrezas al servicio del otro.  También para fortuna de algunas pocas compañías he encontrado personas con este rol con una actitud y energía maravillosas, personas que tienen muy claro lo que es ser un líder, un facilitador.

Habilidades técnicas: Este merece un poco más de detalle debido a su complejidad y extensión.

Cuadrante de habilidades técnicas (figura 3):
Habilidades técnicas

Inglés:  Este es un aspecto de la formación de los cuales se cree que es importante y no se le presta tanta atención;  no sólo por los temas de formación (cursos, manuales, tutoriales, charlas) que se encuentran en mayor cantidad en este idioma, si no por el creciente ingreso de empresas extranjeras (Estados Unidos y Europa) se hace indispensable el uso de un medio de comunicación común.

Los elementos propios de la codificación de Software supongo que no requieren aclaración ni justificación, son elementos aceptados ámpliamente por la industria y no merecen un análisis, sólo detalle para ejemplificar:

Cuadrante de habilidades técnicas detallado (figura 4):

Habilidades técnicas - detalle

Experiencias positivas y negativas: Creo que este es el punto crucial (junto con la especialización) y que determina la escala en la que se ubican los desarrolladores. Estoy convencido que no es un tema de tiempo de experiencia únicamente, he trabajado en equipos con diferencias de edades abismales, en donde personas de 20 años tienen un rendimiento muy superior a otros de 40 o más.

¿En dónde radica entonces la diferencia?  En la forma como se asimilan las experiencias y se aprende de los errores, como tantos los aprendizajes negativos como positivos se integran a nuestro actuar.

¿Entonces es importante la edad o no? La edad es importante porque alguien a los 20 años no ha tenido la oportunidad de experimentar los suficientes aciertos y desaciertos como para garantizar que se puede enfrentar a grandes retos y los superará, no tiene la madurez suficiente para comunicarse con personas de mayor rango y discutir con argumentos, es un proceso de evolución personal y profesional, otro punto en contra de quienes son muy jóvenes es la teoría de las 10.000 horas, que indica que la maestría en un determinado tema se alcanza a este número de horas de práctica real en un tema específico, esto son alrededor 10 años (si decimos que trabajamos 80 horas al mes, en Colombia son 180, pero el estándar de horas productivas a nivel mundial en la industria es 20 horas semanal), lo cual es imposible a temprana edad.

 

Con todo el sustento teórico podemos sugerir:

Desarrollador Junior: Entre 1 a 3 años de experiencia y con conocimientos básicos(*) en todas las capas de la figura 4.  La pasión es algo que no creo que se pueda negocear en ninguna de las escalas,  en cuanto a comunicación y liderazgo en esta etapa está en construcción (Depende de la edad, se está suponiendo un desarrollador que inicia su experiencia laboral entre los 20 y 22 años).

Desarrollador Medio: Entre 4 a 7 años de experiencia y con conocimientos medios (*) en todas las capas de la figura 4.

Acá empieza a ser importante no sólo los años de experiencia, si no también la capacidad y profundización en cada aspecto, un desarrollador medio no sólo conoce las herramientas, las comprende, conoce los puntos débiles y fuertes en cada elemento.

Desarrollador Senior:  8 años en adelante. y con conocimientos altos (*) en todas las capas de la figura 4. En esta etapa se propone, se guía, se habla desde la experiencia pero también desde el alto conocimiento especializado.

El liderazgo es fundamental para pertenecer a esta escala, no serviría mucho si las habilidades alcanzadas en este punto no se ponen al servicio del equipo, tanto para tomar mejores decisiones tecnológicas como para aportar en el crecimiento personal y profesional de los otros integrantes.

Arquitecto: Este análisis merece un capítulo aparte, pero para dar una definición, podría ser un desarrollador Senior que cuenta con una visión general de los sistemas, interactúa con todos los niveles e interesados y asegura que las soluciones cumplen con todas las expectativas (Gerencia, Negocio, Infraestructura, Desarrollo, etc)

*: Para eliminar un poco la subjetividad y si se requiere conocer más detalle sobre lo que podría ser conocimiento básico, medio y alto se puede consultar esta matriz.

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s