Archivo de la etiqueta: empatía

Cómo crecer tu carrera en software de manera responsable

En el mundo del desarrollo de software, muchas veces nos centramos en la tecnología y en aprender nuevos lenguajes de programación o herramientas.

Sin embargo, hay un aspecto que suele pasar desapercibido: la agencia que cada desarrollador tiene sobre su carrera profesional. En este artículo, exploraremos la importancia de tomar las riendas de nuestro propio crecimiento y éxito.

Elegir dónde y con quién trabajar: un aspecto clave

Es común que los desarrolladores pongan mucho énfasis en la tecnología con la que trabajarán, pero elegir dónde y con quién trabajar es igual o más importante. Un ambiente laboral tóxico o poco estimulante puede frenar nuestro desarrollo profesional, además de afectar nuestra calidad de vida y salud mental. Por ello, es crucial investigar y seleccionar cuidadosamente las empresas y equipos con los que colaboraremos, asegurándonos de que compartan nuestros valores y objetivos.

Sí, está bien que una de tus metas sea trabajar con la tecnología de moda — llámese Elixir, Clojure, o TypeScript. Pero toma en cuenta que toda la tecnología es una ola, nada más. Se va a ir, y mañana habrá algo nuevo que será la sensación.

¿Sabes qué es lo que no se va tan fácil? El daño de sufrir burnout por haber trabajado en una empresa sin visión clara, con comunicación horrible, y con liderazgo tóxico.

No te quemes de a gratis.

El éxito es encontrar un camino hacia delante

Todos enfrentamos obstáculos y desafíos en nuestra carrera profesional. El éxito no se trata de tener un camino perfecto y libre de problemas, sino de nuestra habilidad para encontrar soluciones y avanzar entre las opciones que realmente tenemos a nuestro alcance.

Ser resilientes y adaptarnos a las circunstancias nos permitirá seguir creciendo a pesar de las dificultades.

Las habilidades blandas: el secreto para crecer profesionalmente

Es fácil caer en la trampa de pensar que, como desarrolladores, solo necesitamos mejorar nuestras habilidades técnicas. Pero las habilidades blandas, como la comunicación, el trabajo en equipo y la empatía, son extremadamente importantes para nuestro crecimiento profesional. Estas competencias nos permiten colaborar eficazmente con nuestros colegas, resolver conflictos y generar soluciones creativas a los problemas que enfrentamos.

Aparte, toma en cuenta que cada día que pasa, si lo único que sabes es programar, tu carrera está en más riesgo.

Impacto vs. conocimiento: crecimiento exponencial

Medir nuestro progreso solamente en función de cuánto sabemos puede hacernos crecer de manera lineal, es decir, mejorar poco a poco en nuestras habilidades técnicas sin realmente avanzar en nuestra capacidad para resolver problemas reales y generar valor. Sin embargo, si nos enfocamos en buscar tener un mayor impacto en nuestro trabajo y en la comunidad, nuestro crecimiento será exponencial. Colaborar en proyectos de código abierto, compartir nuestro conocimiento con otros y contribuir al desarrollo de nuevas soluciones nos ayudará a aumentar nuestra influencia y a expandir nuestras oportunidades profesionales.

La responsabilidad es tuya

La responsabilidad de crecer en la carrera de desarrollo de software va más allá de aprender nuevas tecnologías y herramientas. Debemos elegir cuidadosamente dónde y con quién trabajamos, ser resilientes ante los desafíos, desarrollar nuestras habilidades blandas y buscar tener un mayor impacto en nuestro entorno. Al tomar las riendas de nuestra carrera profesional, no solo mejoraremos como desarrolladores, sino que también contribuiremos al crecimiento de nuestra comunidad y de la industria en su conjunto.

Evita frustrar aún más a tus usuarios con tu documentación

Escribir documentación es una de las habilidades más importantes de un desarrollador.

JustSimply.dev:

Si alguien ha llegado a buscar algo que has escrito en Google, significa que está atascado. Estar atascado puede ser frustrante y molesto. Así que trata de no hacer que se sienta peor diciéndole lo fácil que debería ser encontrar lo que busca. Esto puede obstaculizar su capacidad para aprender lo que quieres que aprenda.

Es probable que tengas la tentación de que al escribir documentación sobre tus proyectos, quieras usar palabras como “sencillo”, “fácil”, “simplemente”, “nada más”.

Se entiende. Lo que quieres es contarle a tu usuario lo mucho que estás haciendo por él o ella, resaltando lo poco que tienen que hacer para resolver su problema ahora que va a utilizar tu solución.

Desafortunadamente, con lo que tu lector se va a quedar es con un sentimiento de frustración e insuficiencia, pues en lo que ha estado atorado todo este tiempo, resulta ser “fácil” de resolver.

Tenemos que ser más cuidadosos y compasivos al momento de escribir documentación. Si alguien la está consultando, es porque quiere aprender algo más. Lo menos que podemos hacer es procurar que las personas que nos leen no se queden con la idea de que, dhu, lo que estás buscando es OBVIO.

“A esta empresa se viene a trabajar, no a ponerse sentimental”

Una de las banderas rojas más grandes es si tu jefe te contesta “a esta empresa se viene a trabajar, no a ponerse sentimental” cuando le comentas que una situación de tu trabajo te está afectando a nivel personal.

Para mí, esa es una señal inequívoca de estar en el lugar incorrecto para crecer profesional y personalmente.

https://twitter.com/Swanros/status/1472986970947080193

Como líder de un equipo, tengo claro que mi objetivo principal no es exprimir el talento de las personas con las que tengo el privilegio de colaborar. Mi trabajo es propiciar las condiciones necesarias a nivel organizacional para que ese talento florezca por sí solo, y luego potenciarlo. Desafortunadamente, muchos “líderes” de equipo realmente funcionan como jefes, exigiendo sin aportar, promulgando sin poner el ejemplo. Y la frase “a esta empresa se viene a trabajar, no a ponerse sentimental” es el reflejo de esa mentalidad, donde lo que importa es el resultado y no la persona. Un medio para un fin.

Hace unos meses escribí:

Tú y yo somos parte de un sistema que, hora tras hora, está buscando exprimir la mayor cantidad de productividad de cada uno de nosotros. Eficiencia, dicen, es lo principal. Ser eficientes. Ser productivos. Si no estás siendo productivo, estás desperdiciando recursos. Si no maximizas tus horas de trabajo, estás siendo irresponsable.

Gran parte del reto es el contexto cultural en el que nos desarrollamos — especialmente en Latinoamérica, donde muchos hemos crecido con la idea de que lo que importa es el trabajo duro, y que reprobar (o que te corran) es lo peor que te podría pasar. Peor incluso que vivir angustiado, amargado o con ansiedad. Y cada día que paso trabajando con personas y buscando la manera de honrar su individualidad, metas y objetivos personales, me doy cuenta de la mucha falta que hace que los líderes en esta industria sean más humanos.

Si logras identificar las banderas rojas en tu empleo, y estás inseguro sobre si deberías buscar otro camino, déjame decirte que tienes muchas cosas a tu favor. El mercado está más caliente que nunca, y hay muchas empresas y organizaciones que están decidiendo apostar por la persona, más que por el output que generan. Solo tienes que levantar la cabeza y buscarlas.

Primero, hazte consciente de tu valía como persona, analiza tu propuesta de valor y, como dice Vicente Plata, no aceptes abusos.

Agregando una opción de ”ninguna de las anteriores” a formularios

El Gobierno de Reino Unido publicó una guía de diseño para agregar “ninguna de las anteriores”  como opción a las formas que usen checkboxes en sitios oficiales.

The ‘Register your trailer to take it abroad’ service on GOV.UK on a laptop

Frankie Roberto explica por qué en el blog de diseño:

A veces, está bien contestar uan pregunta dejando todas los checkboxes vacíos. Sin embargo, algunos equipos en el gobierno han encontrado algunos problemas con esto.

Observaron que:

  • los usuarios podrían estar inseguros si pueden hacer esto — lo cual puede resolverse usando elementos de guía, pero no todos los usuarios los van a ver
  • algunas veces, los usuarios quieren dar una respuesta concreta, especialmente si les preocupa contestar las preguntas con confianza y con la verdad
  • dejar los checkboxes desmarcados significa que los usuarios podrían pasar la pregunta por accidente, tal vez pensando que podrían regresar a ella después

Tengo varios comentarios respecto a esto.

Primero, el hecho de que el Gobierno de Reino Unido tenga un blog dedicado a compartir notas de diseño para sus sistemas internos me voló la cabeza.

Segundo, todos podemos aprender de su razonamiento para resolver este tipo de problemas. Cuando se trata de sistemas internos, o en este caso, de gobierno, los que los producimos debemos de tener en cuenta que el 90 % de las veces, las personas que los van a utilizar quisieran no tener que hacerlo. ¿Cuándo fue la última vez que te dio gusto emplear un sistema de gobierno? Aquí, claramente están poniendo como prioridad crear soluciones que realmente le ayuden a su usuario a reducir su carga cognitiva y, por ende, ayudarles a hacer lo que quieren hacer de una manera más confiable.

Un programador podría argumentar, lógicamente, que la ausencia de un valor podría considerarse como una opción válida. Después de todo, no contestar es, en sí mismo, una respuesta. Por otro lado, el usuario argumenta que un no es en sí también una respuesta explícita, y debería de poder usarla.

Qué bueno que ganó la empatía por el usuario, y no los tecnicismos.

Cosas que no te enseñaron en la escuela, pero debes saber para trabajar en la industria del software

A continuación te comparto cosas que no te enseñaron en la escuela, pero que debes de saber si quieres trabajar en la industria del software.

  1. Tú te pones tus propias metas. En la escuela tenías la comodidad de llevar un “plan de estudios”. Sabías lo que seguía en cada paso. Acá afuera nadie va a entregarte un plan de estudios para tu carrera profesional. Tienes que definirlo por ti misma.
  2. No tienes que pedir permisos. ¿Quieres aplicar para un trabajo? ¿Te urge cambiar de tecnología? ¿Te gustaría ganar en dólares y vivir en LATAM? ¿Tu sueño es trabajar para un unicornio? ¿Lo que quieres es pasar más tiempo con tu familia? Date. Nadie te detiene.
  3. Debes de tomar decisiones por tu cuenta. En la escuela te condicionaban a aprender una metodología preestablecida. Salirte del protocolo era castigado. En la vida real tienes que aprender a tomar decisiones y a hacerte responsables de sus consecuencias. Nada más.
  4. Puedes irte en cualquier momento. Tenía un profe que se quejaba de los alumnos diciendo “es que ustedes creen que las cosas van a ser como ustedes quieran”. ¿Y por qué no? Si estás en un trabajo o situación que no te favorece, ¿para qué te quedas? No te pongas la camiseta.
  5. Se espera que sepas colaborar, no que te sepas todos los lenguajes de programación del mundo. Saber más lenguajes de programación solo significa que sabes más lenguajes de programación. Aprende a resolver problemas colaborando — técnicos, de negocio, de usuario.
  6. Saber hacer la pregunta correcta es más importante que ser una enciclopedia de conocimiento. Expandiendo en el punto anterior un poco. “No es la respuesta de StackOverflow, es que sepas lo que tienes que Googlear para encontrarla.”
  7. Programar es un medio para resolver problemas, no un fin. Sí, yo sé que es bien divertido programar. Te aconsejaría que no te clavaras únicamente en eso. Puedes programar toda la vida y no resolver ningún tipo de problema. Y te van a pagar por resolver problemas.
  8. Una solución que es correcta el día de hoy, mañana puede ser considerada ineficiente. Yo creo que en software no hay soluciones “exactas”, sino soluciones “ideales para la situación actual, con el conocimiento que tenemos”.
  9. Existen lenguajes más aptos para resolver ciertos tipos de problemas. Hay desde “lenguaje especializado” que es complicado de aprender, pero te dará soluciones compactas, a “lenguaje genérico” que es fácil de aprender, pero será lejos del ideal para resolver todo.
  10. Mientras más “escalas” de posición, se trata menos del código y más de las personas. Las habilidades más valiosas de alguien considerado “Sr.” son las sociales y de liderazgo. Gente que programe “bien” hay un montón.
  11. Necesitas una red de apoyo. Sí o sí. Rodéate de gente que te quiera ver crecer y que comparta tus principios y valores.
  12. Aprende a valorar tu trabajo. Costo ≠ Valor.  No cobres por el esfuerzo físico que lleva hacer una tarea. Cobra por el valor del problema que estás resolviendo.

Originalmente compartí este hilo en Twitter, donde también puedes seguirme.

Liderazgo efectivo: La importancia de las reuniones 1on1 en equipos de desarrollo

Profesionalmente, crecí en un ambiente que desde muy al inicio me enseñó la importancia de ver primero a la persona y luego su utilidad. Y aún recuerdo el primer 1on1 (one-on-one, o una plática uno a uno) que tuve con mi líder.

Hoy sé lo afortunado que fui.

Aún no tenía tanta experiencia en la industria. Y, como muchos, pensaba que el rol del líder era regañarme, presionarme o criticar mi trabajo (luego entendí que lo que yo pensaba era un líder, en realidad era un jefe). La sorpresa que me llevé cuando en mi primer 1on1 con él, durante una hora, en vez de reclamarme por lo que es lo que estaba haciendo “mal” (a mi parecer), me preguntó que cómo me podía ayudar para que lo que estaba haciendo bien fuera más sencillo.

En ese momento fue cuando entendí el trabajo de un líder: crear conexiones con las personas con las que trabaja, entender qué los motiva y buscar la manera en que sus labores diarias sucedan en la periferia de sus intereses personales.

En una industria que está tan acostumbrada a enfocarse en el aspecto utilitario de las cosas, una conexión humana puede sentirse como un vaso de agua fría en el desierto.

A lo largo de mi carrera en software he conocido personas que, a pesar de llevar años trabajando con su equipo, nunca han intercambiado una palabra más allá de un reporte de progreso. Líderes que no saben que su equipo está quemándose porque no están haciendo aquello que los motivó a aplicar a su empresa en primer lugar. Contribuidores individuales que únicamente tienen visibilidad de lo que tienen que hacer de aquí al viernes.

No es sorpresa que tantas personas estén descontentas con lo que hacen 8 horas al día.

Líder: ¿cuándo fue la última vez que saliste de una llamada con tus reportes y saliste con un mejor entendimiento de qué puedes hacer para ayudarles a tener más éxito?

Ten 1on1s regulares. Hablen de qué los motiva. Hablen de qué les causa estrés. Haz un esfuerzo por ir más allá del dashboard de Jira, y si algo no está funcionando, entiende por qué. Luego busca la manera de arreglarlo. Sé ese líder que van a recordar porque no solo pedía resultados, sino que ayudaba al equipo a conseguirlos.

El 1on1 es una oportunidad para ambas partes. No la desaproveches.

5 Soft Skills para dominar si desarrollas software

Los Soft Skills son imprescindibles para cualquier desarrollador de software. Puede que seas capaz de codificar mientras duermes, pero si no tienes la capacidad de comunicarte te encontrarás en una situación incómoda. Y a menos que pretendas trabajar por tu cuenta para siempre, no es lo ideal.

Un estudio en el estado de Sonora demuestra que los mismos desarrolladores de software dicen que los Soft Skills son igual o más importantes que conocer ciertas tecnologías.

Este artículo te enseñará los Soft Skills principales que pueden ayudarte a hacer o deshacer tu carrera como desarrollador de software.

Comunicación

La buena comunicación es una habilidad esencial para cualquier trabajo profesional. Pero es especialmente importante para los desarrolladores de software que son serios con su trabajo. Desarrollar software, a final de cuentas, se trata de resolver problemas — para y con otras personas.

No importa si trabajas por tu cuenta como freelancer o en un equipo de desarrollo, vas a tener que comunicar ideas complejas a otras personas. Lo único que cambia es el medio. El diseño de una API comunica cómo debería ser utilizado tu servicio. Cómo redactas reporte de un bug comunica muchas veces no solamente lo que se debe de resolver, sino cómo debería de resolverse.

Los desarrolladores de software, como personas lógicas que somos, tendemos a pensar en términos de unos y ceros. Pero tener esta misma mentalidad al momento de comunicarnos con otras personas, especialmente personas que no tienen nuestra misma formación, no hace otra cosa más que perjudicar nuestra carrera.

Aprende a comunicar, y verás cómo tu código e ideas se vuelven 100% más efectivos.

Negociación

Los desarrolladores de software también tendrán que negociar con personas. Es raro el escenario en el que no tendrás la necesidad de discutir con otra persona para resolver un problema.

Si trabajas eres freelancer, por ejemplo, tendrás que negociar fechas de entrega, alcance del proyecto y hasta tu compensación. Si eres parte de un equipo, tendrás que encontrar la manera de llegar a acuerdos con respecto a metodologías de trabajo, herramientas y hasta qué convenciones seguir.

¿Usarás tabs o spaces?

¿Por qué deberíamos de usar Ruby y no Elixir?

¿Deberíamos desarrollar este feature antes de refactorizar el sistema?

No hay manera de que te escapes de tener que negociar cuando desarrollas software. Incluso, si lo piensas, diseñar una API se trata meramente de negociar qué es lo que el usuario te debe de dar vs. lo que tú le vas a regresar.

Ser excelente negociando hará tu vida desarrollando software mucho más productiva. No

Habilidades interpersonales

Empatía, tacto, persuasión, liderazgo, entre otras. Las habilidades interpersonales son importantes cuando hay que interactuar con otros miembros del equipo para que no se sientan molestos o disgustados por tu presencia. No es divertido tener un compañero grosero, combativo, que se queja de todo y no sabe cómo adaptarse al grupo.

Pero, yo diría, son mucho más importantes porque desarrollar software, al final del día, se trata de resolverle problemas a las personas.

Muy rara vez se desarrolla un software para que funcione en un vacío. Es casi seguro que si estás desarrollando una aplicación o sistema, o implementando un algoritmo, es porque alguien, en algún lado, necesita resolver un problema. Es aquí donde las habilidades interpersonales marcan la diferencia entre un software mediocre (dogmático, apegado a las ideas del programador) y un software realmente útil (usable, que resuelve los problemas del usuario).

Cuando desarrollamos software tenemos que tener siempre en mente a nuestro usuario. Por más novedosa que sea nuestra arquitectura, o más eficiente sea nuestro algoritmo — nada de eso importa si no estamos resolviendo el problema de la persona que usará nuestro desarrollo.

Sucede exactamente lo mismo en el contexto del equipo de desarrollo: ¿de qué sirve que seas el que más sabe de algún tema si nadie quiere trabajar contigo?

Eres una persona, y te mueves en un mundo de personas. No dejes que tus habilidades interpersonales se echen a perder.

Trabajo en equipo

Complementando a las habilidades interpersonales, viene el trabajo en equipo. Que es similar, pero no lo mismo. El trabajo en equipo es uno de los Soft Skills más citados en currículums, pero no muchos saben realmente qué significa.

Más allá de poder comunicar ideas complejas a tus compañeros, y de poder “llevar la fiesta en paz”, la habilidad de trabajar en equipo se podría resumir en la siguiente frase: tú no eres lo más importante del equipo.

Debes de ser capaz de observarte dentro del contexto del equipo, y ver cómo puedes apoyar, no cómo puedes obtener más control. Un desarrollador que sabe trabajar en equipo gestiona soluciones, delega responsabilidades y apoya en lo que puede. Pero nunca bloquea esfuerzos, acapara responsabilidades o tiene actitud de “quítate, yo lo hago”.

Seguramente has escuchado el término 10x Programmer — hace referencia a un programador que hace el trabajo de 10 personas, presumiblemente porque es tan bueno. Pero piénsalo de esta manera: un 10x Programmer no solamente hará el trabajo de 10 personas, sino que hará que 10 personas no quieran trabajar con él o ella. Y, a largo plazo, esa es una posición en la que no quieres estar. Muy bueno tirando código, pero insoportable al momento de colaborar.

No seas ese rockstar.

¿Quieres ser un 10x Programmer? Trabaja en equipo y haz que 10 personas crezcan para cumplir sus metas y objetivos.

Paciencia

Seguido me preguntan qué es lo que se necesita para poder desarrollar software profesionalmente. Muchas personas no se esperan que la respuesta que usualmente comparto es: paciencia. Un Soft Skill que usualmente pasa desapercibido porque es personal.

Desarrollar software es como armar un rompecabezas en tu cabeza. Solamente que no sabes cómo se debería de ver el diseño final, ni qué tamaño debería tener, ni si está en la orientación correcta. Si te frustras fácilmente, no sabes cómo lidiar con incertidumbre, y buscas la gratificación inmediata de todas tus experiencias, probablemente serás miserable desarrollando software.

No solamente deberás ser paciente con tus propios problemas — cuando estés intentando encontrar un error en un programa o aprendiendo una nueva tecnología. También deberás de ser paciente con personas que no hablan el mismo idioma que tú, o que no tienen la misma experiencia empírica. Tendrás que explicar conceptos complejos a personas que no saben de lo que estás hablando, y te harán preguntas sin sentido. Deberás lidiar con cientos de intentos fallidos para configurar alguna parte de tu stack.

Desarrollar software es un ejercicio de paciencia constante.

Si no eres paciente contigo mismo, y con las personas que te rodean en tu industria, probablemente la pasarás mal.

Y si estás leyendo esto porque apenas estás considerando iniciar tu carrera desarrollando software, te ofrezco una disculpa. Sé que puede sonar nada divertido, y hasta como una advertencia de que no lo hagas. Pero, por experiencia propia te digo: hasta las veces que perdí la paciencia y lloré porque no podía configurar una simple tabla en mi aplicación de iOS valieron la pena. Porque durante los siguientes 10 años pude aprender de los mejores, viajar por el mundo, hablar en conferencias y mi código hoy corre en cientos de millones de dispositivos. Porque fui paciente.

Ser líder es como jugar una partida de póker

No sabes qué cartas te van a tocar. Pero cuando te las dan, debes de tomarte el tiempo para analizar cada una y ver cómo encaja con las otras que tienes en tu mano.

Una sola carta, aislada, no gana una partida. No importa si en tu mano tienes un 10, A, Q, J y K, si no sabes que juntos hacen una Escalera Real. Solamente tenías que cambiar el orden en que la veías.

Sucede lo mismo con las personas.

Liderar un equipo no se trata simplemente de cumplir metas o de alcanzar resultados estrictos. Se trata de reconocer las habilidades (y debilidades) de cada uno de los miembros del equipo.

Como líder, así como cuando juegas una partida de póker, tu única tarea es optimizar para sacarle el mayor provecho a las piezas con las que cuentas. Y la manera más sencilla de perder es no saber reconocer lo que tienes.