Oscar Swanros

  • El otro día, un amigo que hoy en día trabaja como Senior Software Engineer se sinceró conmigo.

    A pesar de que en su trabajo le pagan bastante bien, y bajo todos los estándares, es un buen empleo, está extremadamente frustrado. “Ya estoy harto de hacer diario lo mismo.” Me platicó que su día a día se ha vuelto tan monótono, que hasta las ganas de programar se le están quitando.

    “No hay nada interesante para hacer. Puros forms, maquetado, y resolver bugs de renderizado.”

    Cuando le pregunté si había algo que pudiera hacer para cambiar su situación, su respuesta no me sorprendió en absoluto.

    “Sí, convertirme en manager. Pero me caga la gente.”

    Si ya no hay nada interesante por hacer como senior, ¿realmente tu única opción es convertirte en manager?

    Es común pensar que la única opción de crecimiento, después de haber sido Senior por un buen rato, es convertirte en Manager. Pero esto no es cierto. El menú está abierto, y en las circunstancias correctas, aun con tu seniority, puedes seguir creciendo tu carrera de desarrollador sin tener que convertirte en gerente de nadie.

    Lo único que tienes que hacer es estar consciente de lo que esto significa.

    Convertirte en manager no es tu única opción de crecimiento después de ser senior

    Algunas personas, cuando llegan a cierto nivel de seniority como desarrolladores, dejan de preocuparse por su carrera. Le dejan de prestar atención a su crecimiento profesional porque creen que el único paso que está delante es el convertirse en management. Algo que no quieren hacer.

    Opino que esto viene de la idea de que únicamente existe un camino de crecimiento profesional. Como mencioné en la última Sesión Grupal de Soft Skills para Devs, esto es completamente erróneo.

    Llegar a ser Senior no significa que no puedes seguir avanzando en tu carrera. Después de convertirte en experto en tu tecnología, tendrás más oportunidades de aportar valor de una manera mucho más amplia. Si no te quieres convertir en manager, después de ser Senior, te podrás convertir en Staff Engineer. Y si quieres continuar por la ruta de contribuidor individual, es decir, sin tener que manejar personas, puedes incluso llegar a convertirte en Principal Engineer.

    Mientras más seniority tienes, menos se mide tu impacto en líneas de código

    En la empresa correcta, una vez que eres Senior, convertirte en manager no es “lo que sigue”.

    Pero aquí hay algo que tienes que considerar: mientras más creces en tu carrera como contribuidor individual, menos se mide tu impacto en líneas de código. Habilitar a otros desarrolladores, aportar valor a otros equipos y áreas de negocio, dar visibilidad a problemas. Todas estas son competencias clave que vas a tener que desarrollar, sí o sí. Todas ellas, van a requerir que le pongas atención, de alguna u otra manera, a tus Soft Skills y a tus habilidades de colaboración con otras personas.

    Está bien que no te guste (o te cague) la gente. No todas las personas somos sociales por naturaleza.

    Pero la oportunidad de mejorar tu carrera ahí está. Si no quieres convertirte en manager, no tienes que hacerlo.

    Lo que sí tienes que hacer, es asegurarte de estar en la empresa correcta para seguir creciendo sin tener que tomar tareas administrativas. Y trabajar en tus Soft Skills.

  • Si en tu empresa te quieren ascender a manager porque eres la persona con mejores capacidades técnicas de tu equipo: felicidades. Acabas de ser víctima del Peter Principle, que dice:

    “En una jerarquía, todo empleado tiende a ascender hasta su nivel de incompetencia.”

    ¿Hiciste un buen trabajo como Jr.? Felicidades, ahora eres Mid. ¿Seguiste haciendo un buen trabajo? Genial, ahora eres Sr. ¿Sigues siendo excelente en tu trabajo como desarrollador? Felicidades, ahora eres manager, y tienes responsabilidades para las que no estás preparado, y probablemente ni siquiera quieras tomar.

    Las habilidades fundamentales que te hicieron tener éxito como contribuidor individual, no son las mismas que te harán tener éxito como manager.

    Escribir “buen” código no se traduce en capacidad para analizar y resolver problemas organizacionales. Saber escoger el lenguaje de programación o framework adecuado para resolver un problema de arquitectura, no se traduce en saber entender las necesidades personales y aspiraciones profesionales de tu equipo, y alinearlas con las de la empresa.

    Probablemente, dentro de tu organización, el convertirte en manager venga con aumentos salariales o mayores prestaciones. Pero ten en cuenta que es un trabajo completamente diferente. Convertirte en manager no es un ascenso. Es un cambio de carrera completo. Puede que estés trabajando en tu misma industria; incluso hasta con el mismo equipo. Pero tus responsabilidades ahora son completamente diferentes.

    Antes de aceptar el “ascenso”, pregúntate: ¿sabes a qué te estás metiendo? ¿Estás consciente de las implicaciones del nuevo rol? Y más importante aún, ¿quieres hacerlo?

    No tener claras las respuestas a estas preguntas te pone en riesgo de sufrir burnout.

    Estarás jugando otro juego. Uno que no conoces. ¿Cómo vas a ganar?

  • Acabo de participar en un entrenamiento para prevenir acoso y discriminación en equipos de trabajo.

    Me pareció que esta información debería compartirse, así que tomé nota. Estas son 6 cosas que puedes hacer si presencias acoso en tu espacio de trabajo, incluso si no eres gerente o tienes una posición de liderazgo.

    1. Interrumpe la conversación. Haz algún comentario que desvíe la conversación e interrumpa el acto de acoso. Puede ser una broma, un cambio drástico de tema, o simplemente hacer un ruido que cambie el foco del grupo.
    2. Pregúntale a la persona cómo se encuentre. Acércate a tocar base, y pregunta si hay algo que puedas hacer para ayudarle.
    3. Aborda a la persona cometiendo el acoso. Especialmente en ambientes donde no estamos sensibilizados en cuestiones de acoso, es importante dar visibilidad y resaltar acciones imprudentes y dañinas. Asume que la persona es ignorante de efecto de su comportamiento, y ofrece una perspectiva diferente: “Sé que tal vez no quisiste decir esto, pero este fue el efecto de tu comentario.”
    4. Apela a la amistad y empatía con la víctima. Hazle saber que tiene aliados, y que no está solo o sola. Reconoce que presenciaste lo que sucedió, y que estás ahí para apoyarle en lo que necesite, aunque sea simplemente moralmente.
    5. Da retroalimentación directa y clara en el momento. “Aquí no hacemos o decimos eso, bajo ninguna circunstancia.”
    6. Niégate a ser parte de la situación, y llévate a otros contigo. El mensaje más valioso que puedes mandar es que no te vas a para ser audiencia de este tipo de actos. En cuanto te percates de que alguien está siendo acosado, retírate de la situación y busca que otros te sigan. A veces lo único que falta para que el cambio suceda es tener alguien a quien seguir.

    Ponerle un alto al acoso es responsabilidad compartida

    “Acoso” puede significar cosas diferentes dependiendo el contexto. Apela a tus valores, o las reglas de convivencia del grupo, para aprender a identificarlos. Pero hay un tipo de acoso que es incuestionable: calumnias, bromas sexuales, transgresión del espacio personal, comentarios hirientes o fuera de lugar.

    Si observas cualquier tipo de acoso y no haces nada para resaltarlo y detenerlo, también eres parte del problema.

  • A finales de 2019 decidí cambiar la dirección de mi carrera profesional y probar suerte como Engineering Manager.

    Para este entonces, tenía un poco más de 10 años de experiencia desarrollando software como contribuidor individual.

    Hoy me encuentro iniciando mi tercer año como Engineering Manager, y creo que es una buena oportunidad para reflexionar sobre estos primeros dos años. Te quiero compartir algunos aprendizajes que he adquirido, con la intención de que te sean de utilidad si es que decides seguir un camino similar al mío.

    Pero antes…

    ¿Cómo me convertí en Engineering Manager?

    Llegué al puesto de Engineering Manager con un set de ideas bastante claras sobre el tipo de líder que quería ser, así como de las estrategias particulares que emplearía para lograrlo. El tema de liderazgo y la psicología organizacional siempre me han llamado la atención, y continuamente estoy aprendiendo y educándome en estas áreas.

    Durante mi tiempo como desarrollador, tuve la oportunidad de experimentar de primera mano los beneficios de tener líderes que genuinamente procuraban mi bienestar y mi crecimiento. También me tocó tener jefes, de los clásicos que nadie debería tener. Pude ver, gozar, y sufrir, gran parte del espectro de los tipos de líderes que existen.

    También es importante compartir que adquirí mi experiencia profesional, principalmente en un ambiente de startups de Estados Unidos y Europa. Esto jugó un papel considerable en mi transición, pues mis primeros dos años como Engineering Manager fueron trabajando para empresas Mexicanas. A pesar de que soy mexicano, habiendo trabajado principalmente con personas extranjeras, sentí el cambio cultural.

    Lo que aquí te voy a compartir no son verdades universales ni reglas. Tómalas como lo que son: interpretaciones de situaciones que viví a través de mis valores, experiencias propias y deseos personales.

    Tus decisiones, por más pequeñas que sean, tienen grandes implicaciones

    Como gerente de ingeniería, tus decisiones tienen la capacidad de influenciar desde la composición técnica de tu proyecto, hasta aspectos fundamentales del negocio. Pero, mayormente, tus decisiones afectan la carrera profesional de las personas a tu cargo.

    Cualquier decisión que tomes, debes de factorizar el impacto a mediano y largo plazo que esta va a tener en la carrera de las personas con las que trabajas.

    Sí, el producto es importante. Pero sin un equipo sano, todo pasa a segundo plano.

    Tu trabajo como Engineering Manager es habilitar a tu equipo

    Es demasiado sencillo llegar a un puesto de Engineering Manager pensando que lo que se espera de ti es que asignes tareas, y te asegures de que se cumplan a tiempo. Y hay personas que podrían argumentar que sí, ese es el trabajo. Yo creo que es un poco más complicado que eso.

    El Engineering Manager, a diferencia de un Project Manager, se encarga de entender las necesidades y visión del negocio. Además, asimila las fortalezas, debilidades, y deseos de su equipo. El reto es alinear estos dos mundos de una manera coherente, sostenible y humana.

    Parte de tus responsabilidades es procurar que los proyectos salgan a tiempo y en forma. Pero no asegurarte. ¿Qué vas a hacer, obligar a tu equipo a que trabaje horas extras? ¿Preguntarles “cómo vamos” cada 3 horas? ¿Intentar comprar su felicidad con pizzas y refresco? Todos hemos tenido (o por lo menos escuchado de) gerentes que usan esas tácticas. Personas para las cuales lo más importante es la fecha, el cliente y su reputación, no su equipo.

    Reflexiona: ¿te gustaría (volver a) trabajar con una persona así?

    Por eso digo que el Engineering Manager procura que las cosas salgan bien. Entiende las necesidades de su equipo (las personas), tiene conciencia de un balance adecuado entre vida y trabajo, y además reconoce y asimila las capacidades de cada uno de los miembros de su equipo. Después toma toda esta información, y crea estrategias, procesos y formas de trabajo que produzcan resultados fiables, en tiempo y forma. En este video exploro un poco más este tema.

    Tienes que buscar un balance sostenible

    La analogía que me gusta utilizar para este punto es la de las mascarillas de oxígeno en los aviones. Antes de despegar, el personal del avión hace las demostraciones de seguridad pertinentes, y comentan al respecto: “en caso de despresurización, antes de intentar ayudar a otras personas, asegúrese de tener la mascarilla bien puesta usted”.

    El mismo consejo aplica para alguien en el rol de Engineering Manager.

    Como alguien que desarrolla software (y más si vienes de la cultura Latinoamericana), probablemente te acostumbraste a glorificar el trabajo duro y pensar que estar ocupado es un símbolo de que estás haciendo algo importante. Cuando tienes ese bagaje cultural y de repente te encuentras en un rol de gerencia, naturalmente vas a buscar formas de mantenerte ocupado.

    Pero como Engineering Manager, tienes que estar consciente de que tu rol es servir a tu equipo. Ayudarles a desbloquearse y a tomar mejores decisiones. Estar ahí cuando te necesiten. Y si no buscas un ritmo sostenible en tu rol, tu equipo lo va a resentir.

    Tener un Engineering Manager quemado es como estar conectado a wifi que no tiene internet: sería menos frustrante no tenerlo en absoluto.

    Lo que para ti pudiera parecer ayuda, para tu equipo se convierte en un perjuicio

    No solamente importan las decisiones que tomas, sino cómo las tomas. El equipo que manejas aprende de tu estilo de resolución de problemas. Si no eres cuidadoso, precavido, diligente, transparente y disciplinado, le estás enseñando a tu equipo que está bien tomar decisiones “al ahí se va”.

    Al inicio de mi carrera como Engineering Manager tenía lo anterior bien claro. A pesar de esto, no pude evitar caer (algunas veces) en la comodidad de tomar decisiones por mi cuenta y simplemente asignar tickets a mis equipos. No fue sino hasta después de un par de iteraciones, que me di cuenta de que la forma de trabajo que estaba impulsando no era sostenible. No solamente me estaba creando más trabajo, sino que además estaba afectando directamente el crecimiento de mis equipos.

    Fue ahí cuando “hizo clic” la idea de que para ser un buen Engineering Manager, tenía que preocuparme más por habilitar a otras personas, que por hacer el trabajo yo mismo.

    El feedback loop es muy largo

    Tus decisiones deberían de estar basadas en el bienestar, sostenibilidad y productividad de tu equipo. Y los resultados de los cambios que implementes para fomentar una cultura de trabajo positiva tardan bastante ser aparentes.

    Si tomas una decisión en función de prevenir el burnout de tu equipo, por ejemplo, el rango de tiempo para darte cuenta de si la estrategia está funcionando o no, podría ser de meses. No solo porque los cambios organizacionales son complejos y tardados, sino porque es muy difícil tomar una medición discreta del bienestar de una persona. Aunque tengas 1on1s recurrentes con cada miembro de tu equipo, las variaciones de estado de ánimo de una semana a otra pueden ser bastante grandes — y no siempre gracias a factores que tú puedas controlar.

    Es por eso que como Engineering Manager tienes que enfocarte en las tendencias que ves en el equipo, no en datos discretos. Todos tenemos días malos, y si ves que alguien no la está pasando tan bien en tu equipo, no necesariamente tienes que hacer algo de manera inmediata (a menos que la situación lo amerite). Pero cuando ves que alguien ya lleva varias semanas pasándola mal, es momento de cambiar algo.

    Cambiando el paradigma

    Creo que hoy, más que nunca, es importante que humanicemos nuestro trabajo, y dejemos de glorificar las horas extras y el sacrificio del bienestar mental y emocional de las personas. Y considero que el Engineering Manager tiene un papel fundamental en esta transición.

    Convertirme en Engineering Manager ha sido un proceso interesante. He aprendido mucho sobre mí y mis sesgos. Me he enfrentado a mi propio ego, y me ha ayudado a entender que el mundo en el que vivimos tiene muchos más matices de los que pensaba.

    ¿He tenido mis momentos difíciles? Sí. ¿He cometido errores? También.

    Pero también he aprendido, y he crecido. Y si reflexiono un poco sobre estos primeros dos años en esta carrera, siendo honesto, considero que lo estoy disfrutando más de lo que disfruté mis primeros dos años como desarrollador.

    Algunas reflexiones extras:

    • No todas las empresas necesitan Engineering Managers. Hay algunas empresas que simplemente necesitan un Project Manager con nociones de ingeniería de software, pero no un Engineering Manager. Asegúrate de que sabes qué es lo que realmente necesitan.
    • Ser Manager significa algo diferente para cada empresa. No te quedes simplemente con el título, indaga un poco más en cuáles son realmente las tareas y expectativas del puesto.
    • Ser Manager no es para todos. Muchas personas creen que la progresión natural de una carrera en esta industria apunta hacia puestos de gerencia, pero no es así. Ser bueno escribiendo software desafortunadamente no te hace buen manager.
    • Para ser Manager, necesitas renunciar a tu identidad como desarrollador. Ve este video para saber más.
  • Un usuario de Reddit escribe sobre su experiencia trabajando en un lugar donde ni siquiera han escuchado hablar de Git:

    Esta mañana, gasté 3 horas reescribiendo lo que hice ayer, porque mi compañero lo eliminó accidentalmente en la carpeta de Windows Server que usamos para desarrollar. No nos permiten utilizar control de versiones, y de hecho, muchos de mis compañeros de trabajo nunca han escuchado de Git. ¿Alguno de ustedes ha trabajado en algún lugar así y encontrado una manera de sobrellevarlo?

    Obviamente, las respuestas recomendándole que huyera de ahí lo más rápido posible no se hicieron esperar.

    Hace casi 22 años, Joel Spolsky publicó en su blog su popular checklist para determinar si un equipo de desarrollo de software es bueno o no: 12 Pasos Hacia Mejor Código. La primera pregunta es: ¿Tu equipo usa manejador de versiones?

    Aunque es fácil caer en la tentación de burlarse del creador del hilo en Reddit, me gustaría reflexionar sobre su situación.

    Recordando que muchas personas crecimos con la idealización del trabajo duro, no es difícil ver cómo esa forma de pensar podría llevarnos a la progresión lógica de que cualquier cosa que le haga al programador la vida más fácil significaría que entonces la empresa no lo está aprovechando al máximo. Estoy seguro de que podrás identificar alguna persona en tu vida (probablemente alguien mayor, o “de la vieja guardia”) que defendería esta retórica. “Los programadores de verdad compilan su propio IDE.” Esto es lo que pasa cuando personas con esta mentalidad dirigen empresas.

    (Dándoles el beneficio de la duda: es probable que esta persona esté trabajando en una industria donde únicamente se pueden utilizar tecnologías aprobadas y validadas por algún tipo de organismo o estándar. En este caso, entendería que, por regulación, no estuviera permitido que usaran tecnologías de código abierto.)

    Por otro lado, es probable que el autor original del hilo simplemente se encuentre rodeado de gente que ignora la existencia de los controladores de versiones, así como sus beneficios. Un par de veces en mi vida me he encontrado con personas que encuentran abrumadora la idea de tener que aprender otra tecnología (Git) además del lenguaje de programación en el que están especializándose. Así que simplemente hacen lo que pueden con lo que saben: ponen su código en Dropbox, Google Drive, y listo. No es hasta que salen problemas que el valor de usar controladores de versiones se vuelve aparente.

    La parte clave de su mensaje es esta:

    No nos permiten utilizar control de versiones, y de hecho, muchos de mis compañeros de trabajo nunca han escuchado de Git.

    Apostaría que la persona que escribió esto encaja en el siguiente perfil: alguien joven, al inicio de su carrera en software, con grandes aspiraciones, en su primer trabajo formal. Probablemente, la empresa sea de una industria vieja (finanzas, construcción, legales, donde las cosas se hacen por regulación) que se está intentando renovar, y lo están haciendo contratando programadores, pero sin crear una cultura de desarrollo de software.

    No conozco al autor del hilo, pero no me sorprendería si tuviera una carrera próspera en su futuro. Después de todo, está demostrando una capacidad que (desafortunadamente) no todos tienen: la de cuestionar el statu quo. No se está quejando, está haciendo una pregunta para educarse y crecer. Está buscando datos, consejos y soluciones.

    Algunas lecciones que me gustaría que todos nos lleváramos de esta experiencia:

    1. No en todas las empresas se puede desarrollar software. Ve esta porción de una de mis charlas para entender más sobre esto.
    2. Algunas empresas solamente quieren programadores, no desarrolladores.
    3. Desarrollar software es mucho más que escribir código.
    4. Se vale preguntar, cuestionar y decidir si la situación en la que estás es en la que quieres estar.
  • El Open Source no se trata de ti

    Rich Hickey, creador de Clojure, escribiendo en GitHub Gist:

    Ser usuario de algo que es Open Source, no te hace merecedor de nada en absoluto. No necesitas contribuir. No tienes por qué exigir nuevas características. No te mereces la atención de otros. No significa que tus quejas tengan un valor para el producto. No te mereces esta explicación.

    Si tienes expectativas (de otros) que no están siendo cumplidas, esas expectativas son tu propia responsabilidad. Eres responsable de tus necesidades. Si quieres algo, hazlo.

    Hace un tiempo escribía sobre como ser desarrollador Open Source parecía no ser tan buena idea hoy en día. El Gist que publica Rich no es nuevo, tiene por lo menos unos 5 o 6 años, pero demuestra la tendencia hacia el burn-out que muchos administradores de proyectos Open Source hoy están reportando.

  • Cómo jugar un rol activo en tu educación continua

    Me puse a reflexionar, y me di cuenta de que, por lo menos en mi caso, durante mi proceso de formación, nunca se me inculcó la importancia de invertir en educación. Claro, se me mencionó que la educación continua era importante. Pero nunca se me dijo que una de las formas de mantenerme educado continuamente era “aventándole dinero al problema”.

    Suena raro, ¿no? Hasta parece obvio.

    Me dio curiosidad saber cuánto dinero invierten las personas en su educación al año.

    ¿Cuándo inviertes en educación al año?

    USD $500 (MXN $10,000) es también más o menos lo que había estado invirtiendo anualmente en mi educación, en promedio, hasta 2020.

    En mi caso, creo que interpreté la idea de “educación continua” como “aprende lo más que puedas de las situaciones que se te presenten”. Que es un consejo sabio, y lo aplico. Pero nunca me pasó por la cabeza que podía influenciar directamente la calidad de la educación que recibía, incrementando la cantidad de dinero que le destinaba a ello.

    Hasta que lo intenté. Dejé de buscar cantidad, y me enfoqué en calidad.

    Hoy en día prefiero mil veces tomar el toro por los cuernos y trabajar con un especialista en sesiones individuales de coaching, que comprar 10 cursos diferentes a un 95 % de descuento (tú sabes de qué plataforma hablo) — simplemente para nunca realmente darme el tiempo de ver los videos y hacer mi tarea.

    Cada uno de nosotros aprende de manera diferente. Yo encontré que me funciona mucho más tomar clases en vivo, acompañado de una cohorte de alumnos, que suscribirme a una plataforma de videos y verlos por mi cuenta. Descubrí que me funciona más comprar libros físicos y tenerlos a la mano de manera tangible, que buscar PDF gratuitos y leerlos en mi iPad.

    Muchas personas confundimos cantidad con calidad. Creemos que simplemente comprar libros, videos y suscripciones, cuenta como educación. No leer, ejecutar o participar. Comprar.

    Tener acceso a más información no es lo mismo que tener mejor educación.

    ¿Tú cuánto inviertes en tu educación al año? Y si tuvieras que duplicarlo, ¿simplemente invertirías más? ¿O invertirías más y mejor?

  • Video: El costo de especializarte

    Otro clip tomado de la participación que tuve en The Dojo, el canal de mi amigo Héctor, hace unos meses. En este, hablo sobre lo que tuve que sacrificar para especializarme como desarrollador de iOS, y las implicaciones que eso tuvo en mi vida. El artículo de Paul Graham que menciono se llama Bus ticket theory of genius.

  • Aquí hay otro ejemplo de cómo la documentación aumenta el valor de tu código. John Regehr recopiló imágenes de cómo en algunos proyectos de código abierto se usa arte ASCII para explicar el código de manera más clara.

    En su artículo, escribe:

    Las personas tienden a ser visuales: usamos imágenes para entender problemas. Los lenguajes de programación más populares, por el contrario, operan en un espacio completamente abstracto, dejando una gran brecha entre programa e imagen.

    Un ejemplo tomado del compilador de Swift:

    Puedes utilizar apps como Mondraw para crear este tipo de documentación. Recuerda el Triángulo de la Documentación de Código, y que agregar documentación no es una admisión de que no fuiste lo suficientemente inteligente para escribir “buen” código.

     

  • El Triángulo de la Documentación de Código

    Hace un tiempo propuse que deberías escribir código que se documente solo, y luego agregarle documentación. En el artículo original, escribí:

    La idea de que “tu código debería de documentarse solo” no es un get out of jail free card para no documentar tu código. Las ocasiones en tu carrera profesional donde escribir documentación no agrega valor a tu trabajo son muy pocas. Tan pocas, de hecho, que no se me viene ninguna a la mente. ¿Tal vez cuando estás trabajando en un proyecto propio? Pero hasta Damian Conway dijo que “la documentación es una carta de amor que le escribes a tu yo del futuro”.

    Hoy me encontré una idea que aumenta mi punto: El Triángulo de la Documentación de Código.

    Documentación de Código:¿Qué, cómo, por qué?
    Documentación de Código:¿Qué, cómo, por qué?

    Este modelo mental nos dice que toda pieza de código está documentada en 3 dimensiones distintas, cada una respondiendo una pregunta muy particular.

    • ¿Qué?: Tu código, en sí, explica lo que estás haciendo.
    • ¿Por qué?: Los comentarios que le agregas a tu código, explican tu proceso de toma de decisiones y la razón de tus soluciones.
    • ¿Cómo?: El contexto dentro del cual estás desarrollando tu programa; la descripción original del problema.

    Si te enfocas en escribir código que “se documente solo”, en un futuro no sabrás por qué llegaste a esa solución, ni cómo esa solución es apropiada para el problema original.

    Recuerda, agregar documentación a tu código (en forma de comentarios, glosarios, RFCs, pruebas, etc.), no es una admisión que no fuiste lo suficientemente inteligente para escribir “buen” código, sino un acto de compasión. Demuestra tu interés porque la siguiente persona que modifique tu código pueda enfocarse en agregar valor al proyecto — y, muy probablemente, esa siguiente persona vas a ser tú.

  • GitHub Copilot ahora disponible de manera general

    Hace un par de días, GitHub anunció que Copilot está ahora disponible de manera general.

    Cualquier persona, hoy puede pagar $10 USD mensualmente por un compañero de pair programming creado con inteligencia artificial.

    Buen momento para recordar lo que escribí hace casi exactamente un año:

    Con el aspecto técnico resuelto (parcialmente) por inteligencias artificiales, las discusiones técnicas dejarán de ser la parte más importante del desarrollo. Los “programadores” ahora se dedicarán a tener discusiones sobre la ética y seguridad del código generado por la computadora. Las tareas técnicas serán resueltas, en su mayoría, gracias a la ley de Moore. Desarrollar software ya no se tratará de programar.

    Aún habrá trabajos para escribir código, pero requerirán una alta especialización. Las personas que sigan escribiendo código lo harán para crear la infraestructura que soportará al resto del ecosistema: compiladores, IA, generadores de código, redes, etc.

    Si estás en la industria del software y piensas que tu único trabajo es programar, heads up. Le acaban de poner fecha de caducidad a tu carrera. Y tienes de dos: o te pones a refinar tus soft skills, o comienzas a especializarte en tecnologías fundamentales.

  • El término “comunicación” es tan amplio y dependiente del contexto del trabajo y la industria en la que uno se desempeña, que muchas organizaciones deciden simplemente no ponerle mucha atención. Adoptan una mentalidad de que “lo que importa es que las cosas se hagan, pero no importa cómo.”

    Adam Thomas escribió brillantemente al respecto (traducido por mí):

    La cultura de comunicación de tu empresa tiene un gran impacto en el resto de tu negocio. Cultivar una atmósfera de confianza es esencial para el éxito. El nivel de confianza que las personas en tu organización depositan en sus líderes y en ellos mismos, afecta la productividad, la salud de tus compañeros y la retención a largo plazo del equipo.

    En su artículo, Adam menciona que existen principalmente dos tipos de empresas: las que quieren hacer las cosas en privado, y las que quieren hacer las cosas en secreto. La diferencia es sutil, pero el diablo está en los detalles.

    Cualquier información que se comparta llamadas, mensajes directos o canales privados se pierde en el limbo. Esto le resta visibilidad al equipo, se pierde la trazabilidad del proceso de toma de decisiones, y en muy poco tiempo, la confianza del equipo se ve mermada por esta opacidad.

    A muchos líderes les cuesta trabajo ver más allá de la meta puntual que tienen en frente, e ignoran las consecuencias de fomentar una cultura de comunicación que hace que los miembros del equipo se sientan asediados, estresados e inseguros.

    Personalmente, estoy consciente de estos problemas y lo fácil que es caer en una situación donde el comportamiento por defecto es ocultar información. En mis equipos procuramos que cualquier llamada que tengamos con otros miembros quede resumida en un mensaje donde se listen los acuerdos a los que se llegaron. También, usamos canales de Slack públicos por defecto, y todos tenemos la expectativa de mover cualquier pregunta que nos hagan por DM a un canal público.

  • El Proyecto de Ley 5761-S, en la legislatura de Washington, dicta que las descripciones de vacantes deberán incluir detalles completos de la compensación que recibirá la persona contratada.

    Puedes leer el documento final aquí. A considerar es que esto solamente aplicaría para compañías que tengan 15 o más empleados.

    Espero que esto se vuelva práctica estándar eventualmente.

  • Un lenguaje de programación no es una tecnología

    Me encontré este Tweet:

    Y creo que es una excelente oportunidad para recalcar un punto que a muchas personas se les escapa: un lenguaje de programación no es lo mismo que una tecnología.

    Los lenguajes son herramientas que te permiten razonar sobre problemas puntuales de maneras muy particulares.

    Por ejemplo, intentemos razonar sobre el concepto del “paso del tiempo”. Para los que hablamos Inglés y Español, vemos el pasado como algo que está a la izquierda, y el futuro como algo que está a la derecha del presente. Los que hablan Árabe, al revés, ponen el pasado a la derecha y el futuro a la izquierda. Y los que hablan Mandarín, ponen el futuro arriba y el pasado abajo.{{{L. Boroditsky, “Does Language Shape Thought?: Mandarin and English Speakers’ Conceptions of Time”, Psicología Cognitiva 43: 1-22 }}}

    Un lenguaje no solamente te permite resolver problemas particulares, sino que, además, cambia la manera en que entiendes el problema en primer lugar. Puedes hablar Mandarín perfecto, pero si te sigues refiriendo al pasado como algo que sucede a la izquierda del presente, no te van a entender cuando trates de explicarle el paso del tiempo a alguien en China.

    Hay una distinción, sutil, pero importante, sobre lo que queremos expresar, y el contexto en el que lo expresamos.

    Cuando el autor del Tweet original dice que “el lenguaje de SQL se ha mantenido vigente por más de 40 años” no se refiere a que no ha habido avances en la tecnología que le da el contexto necesario al lenguaje. SQL es un modelo mental tan poderoso para resolver problemas de organización, administración y escritura de datos, que trascendió su tecnología y se convirtió en un estándar de la industria. Hoy, si sabes SQL, puedes programar bases de datos utilizando diferentes tecnologías, como Oracle, MySQL, Access, PostgreSQL, Sybase, Microsoft SQL Server, y más.

    Ahí es justamente donde yo dibujaría la línea. Si sabes SQL, un lenguaje que sigue siendo relevante después de 40 años, no significa que no tienes que preocuparte por el contexto en el que vas a usarlo. Ese contexto hoy en día es mucho más amplio y tiene muchos más matices que cuando la tecnología original fue inventada. Y la primera pregunta que cualquier persona experimentada te haría si le pides consejo porque quieres usar SQL para administrar una base de datos es, ¿tienes la certeza de que una base de datos relacional es la solución adecuada?

    SQL permanecerá vigente indefinidamente mientras haya necesidad de resolver problemas de bases de datos relacionales. Pero la tecnología fundamental, el contexto en el que el lenguaje realmente brilla, puede cambiar, mejorar, empeorar, y sí, hasta desaparecer.

    Saber cómo expresarte en un lenguaje de programación no es una bala de plata. Incluso me atrevería a decir que tener dominio de únicamente un lenguaje puede llegar a ser contraproducente. Porque para ser eficiente y efectivo programando, no solamente tienes que saber expresar la solución a un problema — también debes poder determinar si la solución que quieres expresar es la adecuada para el contexto de tu problema.

    Es decir, tienes que saber si estás intentando usar Mandarín para explicarle a un Chino que ayer está a la izquierda.

  • Toda la diferencia entre el trabajo de producto vs. el de consultoría está en los incentivos que determinan el cómo se trabaja.

    Hacer consultoría se trata de completar proyectos para un cliente. El objetivo es entregar a tiempo y cumplir con un contrato.

    Si trabajas en consultoría, lo que importa es entregar en tiempo y forma, lo que significa que la calidad y exactitud técnica del desarrollo no es prioridad. Después de todo, hay una gran posibilidad de que una vez que se llegue a la meta, y el cliente esté satisfecho, no será necesario revisarlo ni mantenerlo a largo plazo. Se le resolvió el problema al cliente, se entregó a tiempo y con los requerimientos cumplidos, y ahora puedes pasarte a pensar en el siguiente proyecto sin voltear atrás.

    Trabajar en desarrollo de producto se trata de resolver problemas para un usuario. El objetivo es agregar valor.

    Al desarrollar un producto, lo que estás buscando es crear tecnología para resolverle un problema a tu usuario. Muy probablemente (si trabajas en un startup, por ejemplo) no habrá una guía para encontrar la forma óptima de agregar valor. Tendrás que experimentar, investigar, innovar. Pero más importante, trabajar en producto tiene la implicación de que el mismo equipo será el responsable de arreglar cualquier cosa que se rompa, y de saldar cualquier deuda técnica que se adquiera.

    La fuente de frustración más grande que he experimentado es cuando he intentado desarrollar un producto como si trabajara en consultoría, y viceversa. Pero dejo esa historia para otra publicación.