• Haz código que no necesita documentación. Y documéntalo.

    Los programadores tenemos tendencias egocéntricas.

    Entendemos (o creemos entender) cómo funcionan las computadoras. Y eso nos hace sentir especiales. Y si somos tan especiales para entender cómo funcionan las computadoras, cualquier persona que no entienda mi código no es tan especial como yo.

    Documentar qué estás haciendo, y por qué, puede ser un golpe al ego. Pero uno que vale la pena. Que documentes algo 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 seas tú.

    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”.

    Escribir documentación no tiene que ser aburrido ni estar limitado a únicamente escribir comentarios.

    En orden de accesibilidad, puedes escribir:

    1. comentarios en tu código.
    2. READMEs
    3. glosarios
    4. RFCs o documentos de diseño
    5. pruebas
    6. Documentos de arquitectura

    Te invito a que veas la documentación como un tema de accesibilidad, y no de exactitud. ¿Qué opinarías de alguien que dice que no debería haber rampas en las banquetas de una ciudad porque no necesita caminar para transportarse? Reflexiona.

  • Ser bueno técnicamente es solamente una parte de lo que te toca hacer

    Ser bueno técnicamente en X o Y tecnología no te hace bueno en todo lo demás que conlleva trabajar en esta industria. Necesitas ponerle más atención a eso.

    Es muy de programadores creer que como somos buenos en X, automáticamente somos buenos en Y. Pero eso está muy lejos de la realidad.

    Puedes dominar Linux, y carecer aún de la empatía necesaria para poder ser líder de un proyecto.

    Puedes ser un experto en Ruby on Rails, y necesitar ayuda para saber cómo arreglar una discusión en tu equipo.

    Puedes haber escrito el libro sobre trabajo remoto y aún así regarla horriblemente… porque nunca desarrollaste el hábito de resolver problemas desde la empatía y la compasión.

    Y ejemplos como estos hay miles. Todos hemos conocido alguien muy bueno en la parte técnica, pero que funcionalmente es más un blocker que un apoyo (o una molestia, cuando menos) para el equipo.

    Un líder…

    • con actitud de “quítate yo lo hago”…
    • que responde preguntas de manera condescendiente…
    • que no protege a su equipo…

    … pero que es muy bueno en Linux. ¿… yay?

    El argumento de que necesitas ponerle más atención a tus soft skills no es una negación de que la tecnología es importante. A final de cuentas es la parte operativa que te toca desempeñar.

    Y es ahí donde se abre la discusión.

    ¿Cómo le vas a hacer para darte cuenta de que la parte técnica es únicamente eso, UNA PARTE, de lo que te toca hacer en esta industria?

    Encontremos la respuesta juntos.

  • ¿Qué hace competente a un programador?

    Saber más lenguajes de programación, arquitecturas o tecnologías no te hace un programador competente.

    Más allá de sus contribuciones con compiladores, sistemas distribuidos y sistemas operativos, Dijkstra nos dejó el aprendizaje más grande de todos en su clase de 1972, The Humble Programmer: la característica más importante de un programador realmente competente es su humildad.

    Si eres un programador competente entonces eres consciente de que no lo sabe todo. Así que te aproximas a cualquier tarea que se te asigna con humildad, y no caes en las trampas de tu ego — no te complicas por la simple motivación de hacer notar que sabes más o eres mejor.

    Estar en lo correcto se siente bien. Y creo que hay un lugar y un espacio para hacerlo — a final de cuentas reconocer nuestros éxitos es también parte importante del crecimiento. Pero hacerlo en exceso es una receta para el delirio.

    Hay una línea muy delgada que todos los profesionales de esta industria debemos de trazar. Esta línea te ayuda a identificar si estás intentando resolver un problema para agregar valor real o para satisfacer tu propio ego.

    Si no eres consciente de la razón por la cual estás resolviendo algo, es muy fácil que caigas en la trampa del ego.

    También, si no tienes la humildad para reconocer cuando estás resolviendo algo por ego y no por avanzar tus objetivos, te conviertes en un bloqueo para tu equipo.

    Lo que te hará mejor desarrollador no es saber más lenguajes de programación, frameworks o arquitecturas. Es tener la humildad de aceptar que no lo sabes todo, e intentar resolver tus problemas partiendo de esa premisa.

    Contrario a la idea con la que probablemente creciste, aceptar que estabas mal o que no sabes algo no significa que eres incompetente. Significa que tienes la humildad de reconocer tus errores y la integridad de aprender de ellos. Mientras más pronto lo admitas y te hagas consciente de ello, más rápido te moverás hacia la respuesta correcta.

  • La falsa seguridad de los desarrolladores de software

    Probablemente te llueven ofertas de trabajo en LinkedIn — simplemente por listar el lenguaje de programación de moda como una de tus habilidades. Si es así: cuidado, esa seguridad que sientes es falsa.

    Saber más lenguajes, tecnologías y metodologías no significa que tienes mejores prospectos para crecer profesionalmente.

    Una trampa común para las personas que van iniciando en desarrollo de software es creer que su valor real en esta industria es el stack de tecnología que dominan. Así como yo, tú probablemente en algún momento sentiste orgullo en decir que desarrollabas X tecnología, y nada más. Pero te tengo que decir algo: el stack tecnológico, por más variado, amplio, profundo y dinámico que sea, es meramente un detalle de implementación. Cualquiera puede aprender cualquier lenguaje de programación, y volverse suficientemente bueno, con suficiente dedicación.

    Una carrera profesional, al contrario de un simple trabajo, no se construye de manera lógica, lineal o transaccional.

    Todos los carpinteros saben usar martillos, serruchos, sierras. ¿Por qué hay carpinteros más exitosos que otros? ¿Es porque saben usar el martillo mejor con más estilo? ¿O porque agarran el serrucho de una manera muy particular?

    El carpintero más exitoso, que se da el lujo de decir con qué clientes sí quiere trabajar; aquel que es reconocido por la manera en que materializa su visión de cómo se debería de ver un mueble, no llegó a esa posición por tener el mejor martillo. Ese carpintero se dio cuenta de que lo que realmente importa (y por lo que le pagaban) era todo lo demás. Entregar a tiempo, cumplir su palabra, saber negociar… no ser el mejor usando una herramienta en particular, sino saber qué herramienta usar para lograr su objetivo.

    ¿Cuándo fue la última vez que escuchaste alguien en una posición importante en esta industria presentarse listando las tecnologías que dominan? Y aquí estamos muchos, creyendo que llegaremos lejísimos y tendremos una carrera siendo nada más un “Ruby Developer”.

    Desarrolladores de Ruby encuentras en todos lados. Un verdadero profesional de la industria que sepa Ruby es algo mucho más raro.

  • 7 razones por las que tu carrera en desarrollo de software no ha despegado

    Si estás leyendo esto es probable que te sientas estancado o estancada en tu carrera. Sí, has estado desarrollando software, tal vez profesionalmente, por algún tiempo. Pero ese breakthrough aún no llega.

    Aquí hay 7 cosas que estás haciendo, y que te están metiendo el pie sin que te des cuenta.

    1. No tienes bien definido qué quieres hacer, o en quién te quieres convertir. Te gustaría dominar cierta tecnología, pero no tienes claro por qué, ni para qué usarás ese dominio una vez que lo obtengas. Básicamente estás aprendiendo por aprender.
    2. Estás construyendo en aislamiento. Crees que la solución es más importante que el proceso, cuando en realidad en el desarrollo del problema es donde se encuentran los verdaderos aprendizajes. Nada crece en un vacío.
    3. Estás acumulando conocimiento. Le das más valor a aprender cosas nuevas, que a aplicarlas y experimentar. En algún momento tienes que cerrar tus 200 cursos de Platzi y ponerte a resolver problemas reales. goto: 1.
    4. Te quedas con la textura de las discusiones, e ignoras el bigger picture. ¿Qué importa más, si ganó tu propuesta o si la solución acordada impacta de manera positiva al equipo?
    5. Le das demasiada importancia a los detalles de implementación. Sí, es importante el framework que quieres usar, o la arquitectura con la que quieres resolver el problema. Pero nada es más importante que resolver el problema a la mano.
    6. Aún le tienes miedo a tu ego. No quieres fallar en público, le temes a compartir tu proceso, y prefieres llegar con soluciones ya armadas. Crees que la opacidad de tus respuestas es una ventaja, porque te hace esencial. En realidad te hace un punto de fallo dentro del equipo.
    7. Estás aplicando demasiada lógica. Tratas a las personas con la misma frialdad con la que diseñas algoritmos. No es sorpresa que la tengas difícil a la hora de generar capital social.

    Haz pequeños ajustes en estas 7 áreas, y verás cómo por arte de magia las oportunidades de crecimiento profesional comienzan a aparecer ante ti.

  • La trampa de la productividad sin consciencia

    ¿Por qué quieres incrementar tu productividad? La respuesta más común a esta pregunta es “para poder hacer más cosas”. Habiendo yo mismo dado esta respuesta múltiples veces, intento reflexionar en qué parte del proceso de crecimiento comenzamos a asociar la cantidad de cosas que hacemos con nuestro valor como personas.

    La idea de ser más productivo no debería de estar enfocada en hacer más, sino en reducir la fricción para que hagamos lo que tenemos que hacer de la manera más tranquila posible. De la manera más humana posible.

    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.

    Mientras más enfoque le das a ser productivo y a incrementar tu eficiencia, más estás renunciando a lo que te hace humano: la imperfección. Al espacio para tener sentimientos, opiniones y reacciones a las circunstancias que se te presentan.

    A alguien que idealiza la como una medida para determinar su valor le costará mucho entender que lo que te hace único es tu perspectiva, experiencia de vida y tu humanidad. La misma humanidad que te hace a veces fallar en tus metas, y no completar tu lista de tareas a tiempo. Colectivamente, mientras más nos enfoquemos en ser productivos y eficientes por el simple hecho de hacer más, nos haremos menos humanos. Porque entonces necesitaremos menos personas.

    “Suena la campana que aún puede sonar. Olvida tu ofrenda perfecta. Hay una grieta en todo. Es así como entra la luz.” Leonard Cohen inicia su canción “Anthem” con esa reflexión.

    La próxima vez que te quieras sentir mal por no ser “suficientemente productivo”, recuerda: hay una grieta en todo. Es así como entra la luz.

  • Ser líder: ¿quieres el puesto o la responsabilidad?

    El puesto de liderazgo está sobrevalorado.

    Muchas personas asociamos ser “únicamente” seguidores, o miembros de un equipo, con sentimientos negativos. Como si no tener el reconocimiento del puesto nos hiciera menos personas. Y como si el hecho de no tener un nombramiento oficial significara que no podemos ejercer el rol de liderazgo que sentimos merecemos.

    En realidad, dentro de una organización, todas las personas están siguiendo los pasos de otras. Nadie es un líder sin ser liderado.

    Hay líderes, y hay seguidores. Y así como hay buenos y malos líderes, hay buenos y malos seguidores.

    Un buen líder da dirección y provee al equipo de herramientas y frameworks para cumplir objetivos a largo plazo. Un mal líder reparte tareas y espera que las metas se cumplan porque sí.

    Un buen seguidor puede tomar la dirección de un buen líder, estar en desacuerdo, y buscar maneras de hacer saber que la premisa de la tarea es incorrecta. Un mal seguidor tomará la tarea, y aún sabiendo que la dirección no es la correcta, la implementará. Después culpará al líder.

    Un buen seguidor a su vez es un buen líder. Pues ser un líder no significa que sabes más o que tienes el control — o que tienes un nombramiento, necesariamente. Sino que tienes una responsabilidad con tu equipo. Cómo materializas esa responsabilidad es lo que te definirá como un profesional.

    Un buen líder a su vez es un buen seguidor. Pues sabe que la retroalimentación de las personas a las que está liderando no siempre será fácil de digerir, pero que el resultado neto será siempre positivo.

    ¿Quieres el puesto, o la responsabilidad? Porque la responsabilidad está lista para que la tomes. Todo lo demás es tu ego hablando.

  • Tienes HiPPO y no sabías

    Probablemente, tienes HiPPO y aún ni te das cuenta.

    HiPPO es el acrónimo de Highest Paid Person’s Opinion. Tener HiPPO te hace pensar que las ideas de las personas que ganan más que tú son automáticamente mejores o más válidas que las tuyas.

    Sabes que el HiPPO está jodiéndote la vida cuando sales de una llamada refunfuñando porque la jefa tuvo una pésima idea, y ahora sientes que tienes que rehacer todo tu trabajo. Pero no dijiste nada. Porque la jefa dijo.

    Cuánto gana una persona es menos un reflejo de sus habilidades, y más un reflejo de qué tan buen vendedor es.

    Tener HiPPO es bastante cómodo. Después de todo, deferir la responsabilidad de la toma de decisiones a un líder o un jefe es conveniente. Quejarse y amargarse es mucho más sencillo que decir “no estoy de acuerdo”. Si algo sale mal, fue él o ella el que tomó la decisión — tú solo ejecutaste.

    Afortunadamente, hay un antídoto para quitarte el HiPPO, y no es que te asusten, o que te pongan un hilo rojo en la frente. Se llama Sentido de Agencia. Se dice que alguien tiene bien desarrollado el Sentido de Agencia cuando esa persona sabe que sus acciones tienen consecuencias, y está dispuesta a afrontarlas.

    El Sentido de Agencia ejercido es lo que marca la diferencia entre alguien que vive para trabajar y alguien que trabaja para vivir.

    Para desarrollar y ejercer tu Sentido de Agencia, recuerda:

    • Si gana más no es porque sabe más.
    • Todos tienen algo que aportar en la mesa.
    • De todos modos no te conviene trabajar en un lugar donde no valoran tu opinión.

    Quítate el HiPPO. Atrévete a cuestionar. Confía en tu expertise.

  • Atrévete a fallar. En público.

    Incrementar tu masa muscular duele. Tienes que ir al gimnasio y lastimar tus músculos. Y no será sino a través de la consistencia y dedicación que, después de un tiempo, comenzarás a ver los resultados. Tus músculos estarán más definidos, y tendrás más vitalidad.

    Lo que nadie te dijo es que es exactamente el mismo proceso — complicado, arduo y tedioso a veces — para crecer profesionalmente. A diferencia del físico, para crecer en tu carrera profesional no necesitas lastimar tus músculos. Necesitas lastimar tu ego. Y lastimar el ego duele mucho más, de manera más profunda, que un trícep recién ejercitado.

    Fallar significa que estás conociendo tus límites. Ese sentimiento de fracaso, aprenderás eventualmente, es en realidad el trampolín a aprender cosas nuevas. Así como una Roomba debe de primero pegarse en todos los muebles para saber dónde no puede limpiar, tú necesitas fallar en muchas tareas para saber qué no sabes. Aún.

    Pero a diferencia de la Roomba, tú sí puedes tumbar esa pared, o mover ese mueble.

    Todos tenemos miedo de fallar. Sobre todo a fallar en público o con un equipo. Desafortunadamente la educación que recibimos la mayoría de nuestra generación nos enseñó que un error era algo que lamentar. Probablemente creciste creyendo que un error, o un fallo, debes evitar a toda costa. Cuando en realidad, los errores son el principal catalizador del crecimiento — en todos los ámbitos.

    Fallar es parte de crecer. Es recibir feedback.

    Una idea que no se pone a prueba está segura. Porque no se puede robar, ni modificar, ni pervertir. Pero tampoco se puede criticar, mejorar ni usar en el mundo real.

    Puedes pasar toda tu carrera estudiando y aprendiendo nuevas cosas — tecnologías, metodologías, herramientas, etc. Pero no será hasta que salgas, intentes hacer algo y lastimes un poco tu ego en el proceso, que todo el conocimiento adquirido se sintetizará en aprendizajes.

    Atrévete a fallar. En público. Serás imparable.

  • Cómo tener más de 24 horas al día

    Todos tenemos las mismas 24 horas en el día. Tú, que programas en Java, cuentas exactamente con el mismo número de minutos de sol que tu compañera experta en React. Ambos trabajan en la misma compañía. En el mismo proyecto, incluso. Entonces, ¿por qué pareciera que ella puede hacer más, con más calidad, mientras tú batallas por cumplir con tus entregas a tiempo?

    La respuesta es que tu compañera sabe cómo sacarle más provecho a su día. No se distrae, y encontró la manera de tener más de 24 horas en el día — pareciera.

    La correcta gestión del tiempo es un Soft Skill esencial para cualquier desarrollador de software que valga su peso en sal.

    Si gestionas bien tu tiempo, creerás que tienes más de 24 horas disponibles cada día de lo mucho que puedes hacer. Es por eso que debes de priorizar crear espacios en los que tu creatividad pueda no solamente nacer, sino florecer. Libre de distracciones. Y es que muchas personas de la industria tienen la concepción errónea de que desarrollar software es una tarea meramente técnica. Cuando en realidad es un proceso 100% creativo.

    Irónicamente, tu trabajo sucederá la mayor parte del tiempo en frente de una computadora, donde las distracciones están a la orden del día.

    Por fortuna, existen estrategias que puedes implementar para que, efectivamente, puedas tener más de 24 horas efectivas en tu día.

    Reclama tu tiempo

    Lo primero que debes hacer es establecer reglas para que puedas ser eficiente. James Clear dice en su libro Atomic Habits: “no subes al nivel de tus metas, sino que caes al nivel de tus sistemas.”

    Lo primero que debes hacer para asegurarte de que no vas a perder tiempo efectivo de tu día es controlar tu ambiente.

    Apaga tus notificaciones. Tan simple como puede sonar, de verdad no necesitas estar al pendiente de todo lo que está pasando en tu compañía en todo momento. Y no, tampoco necesitas saber cuál es el último #lord en Twitter.

    Cierra Slack y tu cliente de correo. De verdad, está bien. No necesitas responder de manera inmediata.

    Agrega en tu calendario bloques de tiempo específicos en los que tu única tarea sea revisar tus mensajes pendientes.

    Bloquea distracciones. Estar en la zona es difícil. Tu cerebro buscará cualquier oportunidad para presionar ⌘T en Chrome y comenzar a escribir “faceb”. A menos que hayas desarrollado un nivel de conciencia bastante bueno como para poder cacharte a ti mismo y detenerte, la solución más sencilla es que simplemente no puedas acceder a distracciones.

    Modifica tu archivo para bloquear todos los dominios que sabes que son un agujero de conejo para ti. Aquí hay una lista de más de 2 mil dominios que Facebook usa – agrégalos y no solamente no podrás distraerte viendo memes, sino que tampoco te podrán seguir en internet. Aquí hay una de Twitter.

    Si quieres un poco más de flexibilidad, puedes usar una aplicación como SelfControl, que es en esencia lo mismo.

    Sé más celoso de tu tiempo. No quiere decir que tengas que decir que no automáticamente a todo, o que no te conectes a absolutamente ninguna llamada. Pero sí es bueno que te comenzaras a preguntar si realmente necesitas dedicarle tiempo a algo en medio de una sesión de debugging.

    Puedes comenzar con estos tips para que evites llamadas innecesarias.

    Otra técnica que me ha funcionado tremendamente es configurar mi iPhone para que las llamadas de números que no tengo registrados se vayan directamente a buzón. Puedes activar esto yendo a Ajustes > Teléfono > Silenciar desconocidos.

    Estos consejos te ayudarán a no perder tiempo. Ahora veamos como puedes dar el siguiente paso y ganar tiempo.

    Compra tiempo y automatiza

    Puede que esta parte sea la más atractiva porque tiene que ver más con herramientas y menos con disciplina. Pero es importante que sepas que si no arreglas primero tu problema de pérdida de tiempo, los consejos en esta sección no tendrán tanto efecto.

    Habiendo dicho esto…

    Compra el tiempo de otros. Haz una lista de cosas que no te gusta hacer en tu día a día. Puede ser cocinar, lavar la ropa, buscar estacionamiento, hacer el súper. Cuando tengas esta lista, analiza cuánto tiempo te toma hacerlas. Saca la cuenta de cuántas horas le inviertes a estas actividades, en conjunto, a la semana.

    Supón que tú ganas $50 USD por hora y surtir tu comida te toma 2 horas a la semana. Si le puedes pagar a alguien para que lo haga por ti pagando menos de $100 USD a la semana, hazlo.

    Paga por herramientas que te resuelvan problemas muy específicos. Hay cientos de miles de personas que comparten el mismo tipo de problemas. Y por más oscuro que sea lo que quieras resolver, seguramente hay un servicio que lo puede hacer por ti. Considera usarlo.

    Por ejemplo, en mi caso, gran parte de mi trabajo sucede en consultas con miembros de esta comunidad. Durante un tiempo intenté administrar mi agenda de manera manual, pero muy pronto me di cuenta de que mi tiempo podría estar mucho mejor empleado en otras tareas. Así que decidí dejar de preocuparme puntualmente por mi agenda, y ahora es un trabajo que hacen Calendly y Zapier por mí.

    Abstrae y simplifica las tareas más repetitivas de tu día. Busca que tu workflow no sea tan complicado — mantenlo simple.

    Utiliza un administrador de snippets para que no tengas que estar escribiendo lo mismo una y otra vez. En lo personal utilizo Alfred, pero podrías considerar también TextExpander, si es que buscas una herramienta más robusta.

    Alfred me gusta porque también tiene un administrador de portapapeles integrado, que también es una herramienta indispensable para mí. Un administrador de portapapeles te permite tener, básicamente, un historial de todo lo que has copiado durante un determinado periodo de tiempo. Ya no te tienes que preocupar por pegar antes de copiar otra cosa. Cambia el juego completamente.

    Conclusiones

    No tener una buena gestión del tiempo no solamente es un problema en tu cabeza. Tiene consecuencias reales en nuestra productividad y en nuestra propia percepción de qué tan bien estamos haciendo nuestro trabajo.

    El objetivo, a fin de cuentas, no es que tengas más horas al día, sino que le puedas sacar mucho más provecho a las mismas 24 horas que tengo yo y todas las demás personas en el mundo.

    Si aplicas estos puntos, sí es posible que sientas que tu día ahora tiene más de 24 horas como por arte de magia. Pero no, no es magia. Es disciplina.

  • La diferencia entre el calendario y un to-do list

    Cuando comienzas a preocuparte por organizar tu tiempo de una mejor manera, las primeras herramientas que te van a sugerir es usar un to-do list y un calendario. Un error que muchas personas cometen es asumir que estas herramientas son intercambiables, pero no es así. Ni de cerca.

    La configuración más común de este error es ver tu calendario como una lista de cosas que debes hacer.

    Pero tu calendario no es un to-do list.

    Cuando tengas espacios grandes en tu calendario, dedícalos a atacar múltiples tareas en tu to-do list. Estas tareas no necesariamente tienen que estar relacionados con tu trabajo. En mi to-do list yo tengo cosas como “cargar audífonos” o “agendar recolección de la lavandería”.

    La diferencia es sutil, pero poderosa.

    En tu calendario van eventos que están atados a un horario/lugar específico. “De 9 a 10 voy a hacer mi investigación para mi nuevo artículo”. Es algo que solamente puede suceder dentro de ese horario.

    En tu todo-list, agrega tu miscelánea de pendientes. “Revisar que se envió un correo” o “verificar que me hayan contestado X cosa”. No importa dónde lo haga, ni a qué hora.

    ¿Cómo sé si va en mi calendario o en mi to-do list?

    Agrégalo en tu calendario si…

    1. Más de una persona está involucrada.
    2. Requiere un bloque de tiempo para que puedas concentrarte.
    3. Requieres estar en cierto lugar para completarlo.

    Agrégalo a tu to-do list si…

    1. No importa a qué hora ni dónde lo hagas.
    2. Completar la tarea te llevará menos de 30 minutos.
    3. La entrega está sujeta a una fecha límite.

    Complementos

    Tanto un calendario como un to-do list son piezas integrales de un sistema de productividad. Como tales, no son exclusivas, y por el contrario, funcionan excelentemente cuando se usan en conjunto.

    Imagina que te asignan un proyecto que requiere que hagas una investigación exhaustiva sobre un tema en particular. Vamos a decir que quieres conocer el ciclo de vida del plancton. Organízate de la siguiente manera:

    1. En tu to-do list crea un ítem que se llame “Entregar reporte sobre el plancton.”
    2. Asígnale tu fecha límite pactada.
    3. En tu calendario, crearás eventos de 2 horas cada día de la semana llamados “Investigar sobre el ciclo de vida del plancton”.

    De este modo, tu to-do list y tu calendario se están complementando para aumentar tu productividad. Tu to-do list alimenta tu calendario, y tu calendario asegura que tengas el espacio necesario para cumplir con tu fecha de entrega.

  • Comunicación síncrona: ¿qué es, cuándo usarla y por qué?

    La comunicación síncrona usualmente sucede a través de medios que yo llamo “efímeros”. Este tipo de medios favorece la velocidad en la que los mensajes pueden ser transmitidos sobre cualquier otro factor.

    La comunicación síncrona se caracteriza porque requiere que todas las partes involucradas estén prestando atención a lo mismo durante el mismo periodo de tiempo. Como con HTTP 1.1, que la conexión entre el cliente y el servidor debe de mantenerse vigente para que el mensaje pueda llegar de un lugar a otro. Si uno de los dos componentes deja de poner atención, la conexión se termina y el mensaje no es comunicado.


    El protocolo HTTP 1.1 requiere que ambas partes se mantengan en sintonía para que el mensaje pueda ser comunicado correctamente.

    Los medios de comunicación síncrona son usualmente efímeros. Es decir, que solamente “existen” mientras están siendo usados. Una llamada telefónica, por ejemplo, se podría considerar un medio de comunicación síncrono:

    • Todas las partes necesitan poner atención a la llamada para que esta sea productiva.
    • Si uno de las dos partes cuelga el teléfono, la comunicación se termina.
    • Esa llamada en particular únicamente existe mientras está sucediendo. Al terminarse no es posible volver a tener esa misma llamada. (Se podría volver a tener la misma conversación, pero no la llamada.)

    Existen muchos medios de comunicación síncronos a tu disposición. Es importante que aprendas a identificarlos y a usarlos de manera adecuada. Aquí hay algunos otros ejemplos de medios de comunicación síncrona que te podrás encontrar en tu carrera:

    • Conversaciones de pasillo.
    • Mensajes instantáneos (Slack, Google Chat, Teams, WhatsApp, Telegram).
    • Videoconferencias (Google Meet, Whereby, Zoom).
    • Sesiones de pair programming.

    ¿Cuándo debes usar la comunicación síncrona?

    Por lo general se utilizan medios de comunicación síncrona cuando el mensaje es relevante únicamente durante un periodo de tiempo. Un ejemplo de esto es cuando se quiere notificar de algún evento, como que una tarea se terminó en tiempo y forma.

    Lo que debes de considerar al momento de comunicar algo a través de medios síncronos, es que el riesgo de que ese mensaje se pierda y no vuelva a ser encontrado es bastante alto. Por lo general, deberías de evitar utilizar medios de comunicación síncronos asumiendo que la información que compartas va a poder ser recuperada después.

    Aunque algunos medios de comunicación síncronos, como los mensajes directos, tienen la habilidad de buscar información pasada, la realidad es que no están diseñados para esto. La mayoría de estas herramientas están diseñadas con la conveniencia en mente, no con la consigna de que deberían de ser un acervo de información hacia el futuro.

    De manera más concisa, está bien usar medios de comunicación síncronos si…

    • El mensaje que quieres comunicar es relevante únicamente durante un marco de tiempo definido. Es decir, no importará si ese mensaje se pierde en el éter, porque de todos modos únicamente aportaba valor si se consumía al momento en que lo enviaste. Ejemplo: “ya va a comenzar la llamada”.
    • Existe un sentido de urgencia de tu parte. Por ejemplo, en caso de que tengas una emergencia porque el servicio está caído, es mucho más práctico llamar por teléfono a la persona de DevOps para que apoye que enviarle un correo (asíncrono) para notificarle.
    • No estás tomando decisiones que impacten de manera estructural el futuro del proyecto o del equipo. Por ejemplo, ¿tú y tu equipo están intentando decidir qué librería de linting van a utilizar en el proyecto? Discutirlo en un chat grupal está bien — es una conversación. Pero si estás intentando decidir qué topología de red se va a instalar en un edificio, esta conversación debería de ser llevada en medios que estén diseñados para preservar la información a largo plazo.

    Combinando la comunicación síncrona y la asíncrona

    Algo que debes de tomar en cuenta es que una conversación que inicia de manera síncrona tiene la capacidad de convertirse en asíncrona, si así se requiere. Y de hecho, siempre que estés comunicando algo a través de medios síncronos, deberías de poner mucha atención si algo de lo que se está compartiendo debería preservarse.

    Notificar que un proyecto se completó de manera exitosa es claramente información apta para ser comunicada síncronamente. Puedes hacerlo a través de Google Chat o Slack. Sin embargo, el historial y resumen de entrega del proyecto completado es información que se debe de preservar, y por lo tanto deberías de preservarlo en una carpeta compartida de Google Drive o Dropbox. 

    Lo anterior es un ejemplo de cómo, para el mismo propósito, combinarías la comunicación síncrona y la asíncrona.

    La comunicación siempre está en flujo

    No siempre será posible utilizar el medio correcto para compartir lo que quieres. Y está bien. Eres humano.

    Lo importante, más allá de que utilices tal o cual aplicación para comunicar algo, es que comiences a generar la conciencia de que no solamente importa qué dices, sino cómo lo dices y a través de qué medio. Sobre todo si estás en una posición de liderazgo, pues cómo tú comunicas pone la pauta para el resto del equipo. Y créeme, no hay nada más complejo que intentar ponerle orden a la comunicación de un equipo de un día para otro.

    Ejercitar tu músculo para saber si estás usando el medio adecuado para comunicarte con tu equipo es uno de los pasos que debes de tomar para mejorar tu carrera profesional. Hacerlo no solamente te abrirá los ojos a un mundo de empatía más allá del código, sino que te hará mucho más digno de confianza ante tu equipo. Sabrán que tú, más que un miembro más de la banda, serás una pieza catalizadora de organización y orden.

  • ¿Saber Inglés sigue siendo una ventaja competitiva?

    Un lector y miembro de la comunidad pregunta si solamente es necesario saber inglés para sobresalir en el mercado de desarrollo.

    Adjunto el correo completo:

    Desde el comienzo de la pandemia he seguido a personas que trabajan remoto y una de las cosas que veo que más se repite es “habla ingles” y con eso ya lo tienes resuelto. Llevo 7 años trabajando para consultorías y solo hasta ahora me di cuenta de este nuevo mundo pero no estoy seguro qué estoy haciendo mal o qué no estoy haciendo para entrar a esta zona (trabajo remoto internacional).

    He visto los sitios donde hay vacantes pero bueno como un menu de restaurant a veces uno no sabe qué es lo indicado por elegir o si esta decisión será la peor por tomar, ahora que te escribo puedo pensar que es miedo o inseguridad y que a nadie les dicen como hacerlo.

    Habiendo explicado un poco creo que mis preguntas son:

    • como empiezo?
    • debo comenzar diferente con base a mis años de experiencia?
    • como calculo cuanto pedir de lo que percibo actualmente a una vacante remota?
    • el mercado solo busca reactjs? (ajajaj es la mas popular pero como front end dev pareciera que ahorita es el unico camino, o solo ideas mias)
    • que recomiendas para perder el miedo de equivocarnos?
    • he pensado que tener contactos te da una entrada a estas vacantes mejor que en los sitios… alguna recomendación de como hacer amistades en linea?

     

    Mi respuesta:

    Tener el objetivo claro te permitirá seguir motivado ante todas estas preguntas que te estás haciendo.

    Saber inglés ya no es una ventaja competitiva. Es el mínimo requerimiento.

    Tener tantos años de experiencia sí es algo que puedes usar a tu favor. Dependiendo de los proyectos en los que hayas participado, podrías incluir en tu currículum ejemplos de tus contribuciones. Pero personalmente, lo que aprecio más en un currículum, es que me ayudes a entender más allá del código que escribiste, el impacto que causaste en las organizaciones donde has trabajado.

    ¿Identificaste problemas por tu cuenta e hiciste propuestas para solucionarlos? ¿Tuviste responsabilidades claves dentro de tu organización? ¿Apoyaste a implementar nuevos procesos que dieron como resultado mejoras para los clientes?

    Respecto al salario que debes de pedir al trabajar de manera remota, te recomiendo que leas estas respuestas. También, te incluyo uno de mis Tweets que representa muy bien mi filosofía:

    https://twitter.com/swanros/status/1331389389495218176?s=21

    No, el mercado no solamente busca ReactJS, pero debes de estar listo para balancear tus habilidades con la demanda que existe. Si estás enfocado en desarrollo web al 100%, probablemente ReactJS sea algo de lo que no podrás escapar. En ese momento es cuando debes de tomar una decisión, basada en tu objetivo final, sobre si aprender esa tecnología es lo que te pone en una mejor posición para llegar a tu meta. Si no, hay otras mil tecnologías de desarrollo en las que te podrías volver experto, y así diversificar tu propuesta de valor para cualquier empresa.

    Habiendo dicho esto, el miedo a equivocarse es natural. No lo pierdes, aprendes a lidiar con él. Te recomiendo que inicies buscando un ambiente laboral en el que los errores sean vistos como oportunidades de aprendizaje, y no como medios para castigar a las personas. Pero lo más importante, es que nunca pierdas las ganas de intentarlo. Tener tu objetivo claro te mantendrá en el camino correcto.

    Para finalizar, te dejo esto: deberías considerar tu CV como tu principal herramienta, pero únicamente en tu primera vez buscando empleo. Conforme vas avanzando en tu carrera, tu principal fuente de opciones y de oportunidades viene de la comunidad en la que estás envuelto. Gente con la que has trabajado, colaborado, o compartido. Personas que ya conocen la calidad de tu trabajo, lo inteligente de tus preguntas, y tu habilidad de recibir y dar retroalimentación objetiva.

    Así que sí, estás en lo correcto, te conviene comenzar a rodearte de personas y comunidad más que de páginas de internet. Mi recomendación acá es que te acerques a comunidades en línea y comiences a hacer ruido, compartir cosas, y ayudar a otros miembros. Twitter también es una herramienta bastante poderosa si la usas a conciencia.

    Algunas comunidades a las que te puedes unir:

    Espero que estas respuestas te den un norte para seguir adelante.

  • ¿Cuál es un buen salario para un desarrollador Sr. con 9+ años de experiencia?

    Un miembro de la comunidad pregunta por correo electrónico sobre lo que yo consideraría un buen salario para alguien:

    En tu experiencia ¿Cuál sería un buen salario para un desarrollador Sr. con 9+ años de experiencia?

     

    Mi respuesta:

    Esto depende completamente de ti y de cómo te vendas. Desafortunadamente, si bien hay un “estándar de la industria”, no es un indicador para determinar cuánto deberías de estar ganando en una posición. Los salarios varían con cada organización, así como los criterios de qué es lo que significa estar en determinado rango. Hemos hablado en El Podcast DEV en varias ocasiones de que el puesto (Jr., Mid., o Sr.) son solamente relevantes dentro de la compañía en la que estás actualmente.

    Lo que te sugiero acá, más que tener un número fijo en la mente, aprendas a negociar tu salario. Aprender técnicas de negociación es importante porque te permitirá identificar cuándo hay una oportunidad de mejorar cualquier oferta. Si solamente tienes un número fijo en mente, no estarás atento a muchas oportunidades que pueden salir en el camino.

    Hay diferentes técnicas que puedes usar para esto. Te puedo recomendar que leas lo siguiente:

  • Evitar llamadas de trabajo innecesarias: 3 consejos

    “Esta llamada pudo haber sido un correo” es algo que todos hemos pensado en alguna ocasión. Independientemente de si tu equipo Google Meet, Zoom o Microsoft Teams la herramienta no es el problema. Es cómo colaboramos. Gran parte de la población mundial descubrió hace un año, por primera vez, el mundo del trabajo remoto. Lo que antes se resolvía en charlas en los pasillos de la oficina, ahora se tiene que resolver a la distancia — probablemente coordinando 2 o más husos horarios diferentes.

    Desafortunadamente la transición al teletrabajo no ha sido tan suave para todos. Algunas personas y organizaciones han decidido que la única manera de sentirse productivos es (adivinaste) teniendo tantas llamadas como puedan caber en un día. De primera mano he visto amigos y familiares que vienen de industrias tradicionales que desde que comenzó la pandemia tienen llamadas constantes de 9 am a 6 pm, dejando muy poco espacio para realmente trabajar. Y lo peor, la mayoría de esas llamadas sí pudieron haber sido un simple correo.

    Después de más de una década trabajando de manera remota, te quiero compartir algunas técnicas que he aprendido para evitar tener reuniones innecesarias en Zoom o Google Meet.

    Bloquea tu calendario

    Tan sencillo como esto. Si usas Google Calendar, debes de saber que existe la capacidad de crear un tipo de evento especial para bloquear espacio en tu calendario. Automáticamente rechazará cualquier invitación a un evento que te hagan durante ese marco de tiempo.

    Personalmente bloqueo de lunes a viernes el espacio de 2 pm a 3 pm, mi hora de comida, y de 5 pm a 10 pm. Hace años que no tengo una llamada de trabajo después de las 5 pm, y mi hora de comida es sagrada.

    Es posible que no uses Google Calendar, o que no tengas activada la opción para crear ese tipo de evento. En ese caso, puedes simplemente crear un evento con un nombre opaco, como “FUERA” o “NO DISPONIBLE”.

    Esta solución es parcial, puesto que hay personas a las que simplemente no les importa la agenda de las demás y mandan invitaciones a eventos sin siquiera verificar si los invitados tienen disponibilidad. Pero, por lo menos, si utilizas la opción de fuera de la oficina, Google rechazará la invitación por ti.

    ¿Sabes qué quieres decir?

    Probablemente en más de una ocasión hayas recibido un mensaje como este:

    Hola, ¿cómo estás? ¿Me regalas 10 minutos para rebotar unas ideas?

    La respuesta por defecto a una proposición de este tipo debería de ser “no”.

    La cultura laboral latinoamericana es muy propensa a querer complacer a nuestros colegas, líderes o jefes. Se nos ha hecho creer que poner nuestro bienestar y productividad por delante es hacerle falta a la compañía. Se dice que no estamos jugando en equipo, y que no tenemos “puesta la camiseta”.

    Lo que muchas personas no saben es que al decir que no a una propuesta de este tipo no estás siendo egoísta. En realidad estás ayudando a evitar perder el doble del tiempo que la persona que quiere hablar contigo cree. 10 minutos tuyos, y 10 minutos de ellos.

    Dependiendo de tu situación, te invitaría a contestar la invitación a una llamada de 10 minutos con una versión de lo siguiente:

    Ahora estoy algo ocupado, lo siento. Si no te molesta, déjame tus preguntas o tu idea aquí en el chat y cuando tenga tiempo la reviso y te comparto mis comentarios.

    Así la otra persona se ve en la necesidad de estructurar sus ideas o preguntas para poder escribírtelas. Este proceso es primordial, pero muchas veces ignorado. ¿Sabes realmente lo que quieres decir o simplemente quieres escupir un montón de pensamientos? Este es un buen Litmus test.

    Cuando comiences a emplear esta técnica para rechazar “llamadas rápidas” tendrás una epifanía. Te darás cuenta de que la mayoría de las veces, al intentar escribir las preguntas o definir la idea, se responden ellos mismos y tu opinión ya no será necesaria.

    Ejerce tu derecho a rechazar invitaciones

    Me atrevería a apostar que todas las aplicaciones de calendario tienen la opción de rechazar una invitación a un evento. ¿Cuántas veces has presionado ese botón?

    Durante mi proceso de formación profesional creía que una invitación a un evento era algo que se tenía que tomar sí o sí. Conforme fui creciendo y agarrando experiencia me di cuenta de que, en virtud de hacer mejor mi trabajo, vale más la pena proteger mi tiempo y creatividad que tomar una llamada — en la mayoría de los casos.

    Así que fui desarrollando una serie de políticas personales en las que me baso para determinar si acepto o no una invitación a un evento en el calendario. Te las comparto a continuación.

    Política #1: Procuro no enviar o aceptar invitaciones para el mismo día. Soy introvertido por naturaleza, y “encender” el “modo llamada” me cuesta muchísima energía. Prefiero tener por lo menos un día de margen para poder llegar preparado y asegurarme de que puedo aportar el valor necesario a la llamada. ((Esto no siempre es posible, y hay veces en las que simplemente se tiene que entrar a la llamada — sobre todo en situaciones críticas. Ni modo.))

    Política #2: Si el nombre o la descripción del evento no te dicen exactamente de qué se va a tratar la llamada, no acepto la invitación. En algunas ocasiones selecciono “Posiblemente” y respondo la invitación pidiendo clarificación sobre el propósito de la llamada. Una vez que esté claro el por qué es importante reunirnos, puedo decidir si acepto o no.

    Política #3: Actualizaciones de estado se hacen por correo, no por llamadas. Las reuniones para actualizar al equipo sobre progreso son el ejemplo primordial de llamadas que pudieron ser un correo. Para estos casos, si sé que puedo hacer llegar la información que me van a pedir por correo así lo hago y rechazo la invitación. Y como manager te comparto: es liberador cuando un miembro de mi equipo me responde con un “aquí está lo que me necesitas saber” y rechaza la invitación a la llamada.

    Política #4: Los horarios personales son sagrados. La hora de la comida, vacaciones y cualquier hora después de las 4 pm son intocables.

    Conclusiones

    El trabajo remoto fluye con muchas menos complicaciones si aceptamos la idea de que estar ocupado no es lo mismo que ser productivo. Y, te anuncio, las llamadas te mantienen ocupado.

    Como con todas las herramientas, también debemos de asegurarnos que estamos usando la herramienta adecuada para resolver cada problema. Si bien tener una llamada puede sonar como un atajo para atender una situación de manera más rápida, lo cierto es que intentar resolver absolutamente todo en llamadas es contraproducente. Si pasas 8 horas en llamadas todos los días, ¿a qué hora trabajas?

    Puedes encontrar el hilo de esta publicación en Twitter.