El capítulo anterior cerró con una idea: el ownership casi siempre se nota en cómo te comunicas —cómo levantas un bloqueo, cómo dices que algo no cuadra, cómo dejas escrito por qué hiciste algo—. Esa capa es la de las soft skills: lo que ningún linter detecta y, sin embargo, lo que más decide si trabajas bien en equipo. Un desarrollador técnicamente brillante con quien nadie quiere trabajar rinde menos, en la práctica, que uno correcto que comunica de maravilla.
La palabra “soft skills” arrastra fama de charla motivacional, así que aquí no va a haber nada de eso. Cada habilidad viene con un par mal/bien concreto, porque “comunica mejor” no se aprende como consejo, se aprende viendo la diferencia.
Escribir para que te lean#
La habilidad base, de la que cuelgan casi todas las demás: escribir claro. En un equipo —y más en remoto— la mayor parte de tu comunicación es escrita: PRs, tickets, mensajes, documentos. Y la lee gente que no está contigo en ese momento.
MAL: "oye una cosa del filtro, ¿lo miramos?"
BIEN: "En TB-42 (filtro por rol), dudo si al desactivar el filtro debe
recordarse el último rol o resetear. ¿Cómo lo ves? Yo tiraría por
resetear, que es lo que espera el usuario."El primero obliga a una conversación entera para sacar lo que el segundo dice de una. ¿Y qué? Si escribes claro, el equipo actúa sin pararse a preguntarte; si escribes en clave, generas trabajo de ida y vuelta para todos. Escribir bien no es estilo: es engrasar el equipo.
Comunicación asíncrona#
Lo anterior se vuelve crítico en asíncrono, que es como funcionan los equipos modernos: te comunicas por escrito y el otro lo lee cuando puede, quizá en otra franja horaria. La regla de oro del mensaje asíncrono es que se pueda responder en un solo turno: incluye el contexto, lo que necesitas y, si aplica, qué harás mientras.
MAL: "¿el endpoint de héroes está listo?"
BIEN: "Para cerrar TB-42 necesito el endpoint de héroes. ¿Está en staging?
Si no, ¿una fecha aproximada? Mientras, sigo con la UI para no pararme."El mensaje malo parece más corto, pero arranca un ping-pong: “¿para qué?”, “¿staging o prod?”, “¿y mientras?”. ¿Y qué? En asíncrono, cada vuelta es una espera que puede ser de horas. El mensaje bueno cuesta treinta segundos más y ahorra medio día, porque trae todo lo necesario para una respuesta única. Y, como hábito por defecto, escribir asíncrono gana al “¿tienes un momento?”: no interrumpe a quien está concentrado y deja registro consultable para el siguiente con la misma duda.
La descripción de un Pull Request#
Un Pull Request no es solo código: es comunicación hacia tu revisor. La descripción es donde le explicas qué va a leer. Una buena descripción responde tres cosas: qué cambia, por qué, y cómo probarlo.
MAL
Título: cambios
Descripción: (vacía)
BIEN
Título: Filtrar el roster por rol
Qué: tres filtros (tanque, daño, soporte); al activar uno, la lista
muestra solo ese rol; al desactivarlo, vuelven todos.
Por qué: primera historia del epic de filtros (TB-42).
Cómo probar: abrir el roster, pulsar "Tanque", comprobar que solo
quedan tanques. Caso límite: un rol sin héroes muestra un aviso.¿Y qué pasa con un PR sin descripción? El revisor tiene que reconstruir tu intención leyendo el diff línea a línea. La revisión se eterniza o, peor, se aprueba a medias porque entenderlo cuesta demasiado, y los bugs se cuelan. Treinta segundos de descripción convierten una revisión penosa en una rápida.
Code review con respeto#
El code review —revisar el código de un compañero antes de integrarlo— es de los mejores sitios para repartir conocimiento… o para hacer daño. La regla de oro: se critica el código, no a la persona. Y los comentarios van concretos y accionables.
MAL: "esto está fatal, ¿en qué pensabas?"
BIEN: "nit: este map puede ser un find, que corta en cuanto encuentra;
en una lista grande importa. ¿Lo cambiamos?"El primero ataca a quien lo escribió y no dice qué hacer; el segundo señala el código, explica el porqué y propone una acción. Ese “nit:” del ejemplo es una convención útil (de las conventional comments): marca el comentario como menor (“nit” = nitpick, una nimiedad), para que el otro sepa qué es bloqueante y qué es opcional. ¿Y qué pasa con los reviews hostiles? La gente se pone a la defensiva, deja de pedir revisión y el review se vuelve un trámite que todos temen, en vez de la red de seguridad que debería ser.
Dar y recibir feedback#
Tarde o temprano tendrás que decirle a alguien algo que no hizo bien. La forma de hacerlo decide si mejora o si se cierra en banda. Un modelo sencillo y muy usado es SBI: Situación, Comportamiento, Impacto.
MAL: "eres un descuidado, siempre haces lo mismo"
BIEN: "En la demo (situación), enseñaste el filtro sin probarlo antes
(comportamiento), y falló delante del cliente, que perdió algo de
confianza (impacto). ¿Lo probamos juntos antes de la próxima?"El malo cuelga una etiqueta a la persona; el bueno describe un hecho observable y su efecto. ¿Y qué? Una etiqueta genera defensa y no da nada que cambiar; SBI es accionable (se sabe qué hacer distinto) y se puede escuchar sin sentirse agredido. Y callar “para no incomodar” tampoco es amabilidad: es negarle al otro la información que necesita para mejorar.
Recibir feedback es la otra mitad, y cuesta igual. La clave: separar tu ego de tu código. Un comentario sobre lo que escribiste no es un ataque a ti. Ante un comentario que te parece injusto, lo profesional es entenderlo primero, preguntar si no ves el porqué y, si de verdad discrepas, argumentarlo con datos —no ponerte a la defensiva ni, en el otro extremo, tragar con todo sin pensar—.
Pedir ayuda bien#
Estar atascado es normal; pedir ayuda mal hace perder el tiempo a dos personas. Una buena petición trae: qué intentabas, qué esperabas, qué pasó (el error concreto) y qué has probado.
MAL: "no funciona, ¿me ayudas?"
BIEN: "Al filtrar por rol, espero ver solo tanques pero sale la lista vacía.
El array de héroes llega bien (lo veo en consola), así que sospecho
de la comparación del rol. He probado a bajar todo a minúsculas sin
suerte. ¿Se te ocurre algo?"¿Y qué? “No funciona, ayuda” obliga a quien responde a sacarte el contexto a tirones; la petición buena se responde de una. Y hay un efecto extra: ordenar el problema para escribirlo bien (lo que llaman “explicárselo al patito de goma”) hace que muchas veces des tú con la solución a media frase. Preguntar bien no es molestar; es respetar el tiempo del otro y, de paso, el tuyo.
Discrepar y comprometerse#
Última pieza, porque trabajar en equipo es decidir juntos y no siempre gana tu opción. La actitud sana se resume en “discrepar y comprometerse”: defiendes tu postura con argumentos mientras se decide, y una vez tomada la decisión, te subes a ella y la apoyas de verdad, aunque no fuera la tuya.
¿Y qué pasa si no? El boicot pasivo —cumplir a regañadientes, recordar a cada rato que tú avisaste— envenena al equipo y frena el avance más que cualquier decisión técnica regular. Se discute antes; después, se rema todos a la vez.
Comprueba lo que sabes#
Pregunta 1 de 9
¿Por qué se dice que, en un equipo (sobre todo en remoto), la comunicación escrita es la habilidad blanda más importante?
Tu turno#
El ejercicio es puro oficio de equipo: escribir los tres artefactos de comunicación de una jornada normal —la descripción de tu PR, tu update de la daily y un feedback a un compañero con SBI—. Hazlos tú y compara con las soluciones, que suben de “plano” a “claro, accionable y respetuoso”.
Ejercicio · hazlo en local
Tres artefactos de comunicación
Sobre tu jornada en el Team Builder, escribe la descripción del PR de la feature de filtros, tu update de la daily (con un bloqueo) y un feedback escrito a un compañero usando SBI. Las soluciones muestran los tres en tres niveles de calidad. Hazlos tú primero y compara.
Paso 1: Los tres artefactos, aunque planos
- Escribes la descripción del PR, el update de la daily y el feedback.
- Se entiende, a grandes rasgos, de qué va cada uno.
Paso 2: Con contexto y acción
- El PR explica qué hace y cómo probarlo.
- La daily nombra el bloqueo concreto.
- El feedback es específico (qué falta y por qué), no un reproche genérico.
Paso 3: Claros, accionables y respetuosos
- El PR tiene qué, por qué y cómo probar (con los casos límite).
- La daily dice ayer/hoy/bloqueo, con a quién has pedido qué y qué haces mientras.
- El feedback sigue SBI (situación, comportamiento, impacto), propone una acción y cuida el tono.
Cómo hacerlo en local
Clona el repositorio del curso, entra en la carpeta del ejercicio y abre el
index.html en tu navegador. Toda tu solución va en
solucion.js.
git clone <repo>
cd exercises/nivel-12/soft-skills
# abre index.html en el navegador y edita solucion.js Ver soluciones
# PR
Título: Filtro
Arreglado el filtro de roles.
# Daily
Ayer con el filtro, hoy sigo. Todo bien.
# Feedback al compañero
Te faltan los tests, eso no se hace. Añádelos. Por qué este nivel
- Los tres están, que es más de lo que algunos entregan. Pero ninguno comunica: el PR ("arreglado el filtro") no dice qué ni cómo probar, la daily es un "todo bien" sin bloqueo, y el feedback ("eso no se hace") es un reproche que ataca sin explicar ni proponer nada.
- La consecuencia: el revisor del PR tiene que adivinar, el equipo no se entera de que estás bloqueado hasta que es tarde, y el compañero se pone a la defensiva en vez de arreglar los tests. Comunicar de menos cuesta caro, solo que el coste lo paga el de enfrente. El tier "mejor" añade el contexto que falta.
# PR
Título: Filtrar el roster por rol
Añade tres filtros (Tanque, Daño, Soporte) al roster. Al activar uno, la lista
muestra solo los héroes de ese rol; al desactivarlo, vuelven todos.
Cómo probar: abrir el roster, pulsar "Tanque" y comprobar que solo quedan tanques.
# Daily
Ayer cerré la UI del filtro. Hoy enchufo la lógica de filtrado. Estoy a la espera
de backend para saber cómo llega el rol.
# Feedback al compañero
La función de cálculo no tiene tests. Es lógica importante y conviene cubrirla
antes de mergear, sobre todo el caso de partidas a cero. ¿Los añades? Por qué es mejor que el anterior
- Ya comunica lo esencial: el PR explica qué hace y cómo probarlo, la daily nombra el bloqueo y el feedback es concreto (faltan tests, y dice cuál). El equipo puede actuar sin tener que sacarte la información.
- Lo que lo separa de excelente es el remate: la daily no dice a quién ha pedido el dato ni qué hace mientras tanto; el feedback es concreto pero no usa una estructura como SBI que separe el hecho de la persona. Pulir eso es lo que convierte "claro" en "da gusto trabajar con esta persona".
# PR — Filtrar el roster por rol
## Qué
Añade tres filtros (Tanque, Daño, Soporte) sobre el roster. Al activar un rol, la
lista muestra solo sus héroes e indica cuántos hay; al desactivarlo, vuelve el
roster completo. Solo un rol activo a la vez.
## Por qué
Cierra la primera historia del epic "Filtros y búsqueda del roster" (TB-42): los
jugadores piden poder ver solo la posición que les falta por cubrir.
## Cómo probar
1. Abrir el roster (carga los ~40 héroes).
2. Pulsar "Tanque": deben quedar solo los tanques y verse el contador.
3. Pulsarlo de nuevo: vuelven todos.
4. Caso límite: filtrar un rol sin héroes muestra "No hay héroes de este rol".
Cubierto con tests del filtrado y de los dos casos límite. Accesible por teclado.
# Daily
- **Ayer:** cerré la UI de los botones de filtro, con sus tests.
- **Hoy:** conecto la lógica de filtrado y abro el PR.
- **Bloqueo:** necesito de backend confirmar si el campo `rol` llega en mayúsculas
o minúsculas (afecta a la comparación). Se lo he preguntado a Luis por el canal
del equipo; mientras, sigo con lo demás para no quedarme parado.
# Feedback al compañero (SBI)
Hola, te dejo una nota sobre el PR del cálculo de winrate:
- **Situación:** en el PR de la función `calcularWinrate`.
- **Comportamiento:** se mergea lógica de cálculo sin tests, y vi que no contempla
el caso de un héroe con 0 partidas (división por cero).
- **Impacto:** si entra así, un héroe nuevo sin partidas puede romper el orden del
roster en producción, y sin tests no nos enteraríamos hasta que pase.
¿Podrías añadir un par de tests, incluido el de 0 partidas, antes de mergear?
Si quieres, lo miramos juntos cinco minutos. El resto del PR me parece claro. Por qué es mejor que el anterior
- Comunicación de la que ahorra tiempo a todos: el PR trae qué, por qué y cómo probar (con casos límite), la daily dice ayer/hoy/bloqueo con la petición concreta y qué hace mientras para no quedarse parado, y el feedback va en SBI limpio —situación, comportamiento, impacto—, propone una acción y cuida el tono ("el resto del PR me parece claro").
- El resultado: el revisor revisa rápido, el equipo sabe exactamente dónde estás y el compañero recibe el feedback sin sentirse atacado y sabe qué hacer. Nada de esto es ser simpático por serlo: es comunicar de forma que el trabajo de los demás sea más fácil, que es justo lo que hace a alguien fácil de tener en un equipo.