PM Co-Pilot: mi asistente personal


AI tokens are mana

“AI tokens are mana”

Proof of Concept

Un nuevo proyecto llegó. El proyecto era parecido a algo que ya había hecho antes, por lo que ya sabía que iba a haber mucho “context switching” entre varios workstreams. Aprender cosas nuevas, estructurar ideas que me iban llegando de a poco (y a cualquier hora), y no perder el hilo entre todo eso.

Vengo usando AI para trabajo hace rato y me dió tres superpoderes: más output, mejor calidad, y menos tiempo. En números concretos: 8x en throughput, 15x en calidad, y timelines a 1/3. Entonces, ¿cómo aprovecho esto para un proyecto donde voy a estar saltando entre contextos todo el tiempo? ¿Cómo hago para que las ideas sueltas que tiro en cualquier momento no se pierdan y se conviertan en algo útil?

La respuesta: un asistente que me ayude a hacer todo esto.

El asistente

Vengo usando Claude Code (Anthropic) y armé un thread dedicado a esto. Nada de código. Solo “proyecto”: tareas, prioridades, integraciones, seguimiento, aprendizajes, conocimiento, documentación, el ¿qué es qué? y ¿quién es quién?.

Lo primero fue “conectar las cosas de todos los días”: email, calendario, y el board (cada quien escoge su sabor pero hay desde linear, trello, github projects, clickup, etc). Desde ahí me ayudó a armar la estructura del board, categorizar pensando en milestones (desde qué milestones tenían sentido), y encontrar por dónde empezar a moverme. Esa primera semana fue de puro setup y ya estaba rindiendo. Lo mejor, cada día aprendia algo nuevo, y mover cosas de aquí a allá no era insufrible, mi asistente lo hacía, y tenía contexto de donde estaban las cosas y porque las habíamos puesto donde las habíamos puesto.

Dos cosas pasaron: 1) me di cuenta de que esto era demasiado útil como para no compartirlo y 2) logré identificar el framework que estaba usando. Un proceso que define como trabajar desde un PoC hasta experimentación de GTM, con pasos claros en el medio. Ya es parte del template.

La cosa se puso mejor

Después del setup inicial empecé a agregar más integraciones. Resulta que podía hacer review de PRs y dejar comentarios inline directamente en GitHub. Conecté un MCP local de Excalidraw y empecé a dibujar cosas para explicarle a un agente qué quería y cómo. Y el agente las podía “ver”. Es otra cosa.

Cada integración nueva que agregás le da más contexto, y más contexto significa mejores respuestas, mejores sugerencias, mejor memoria de proyecto.

“What’s on my plate?”

Todos los días abro el thread y pregunto “what’s on my plate?” En segundos tengo un resumen consolidado: calendario (hoy y mañana), inbox, estado del board, PRs abiertos en GitHub, recordatorios pendientes. Todo en un solo lugar, sin abrir seis pestañas, sin perder veinte minutos armando el contexto del día en mi cabeza.

Pero lo que más me sirve no es eso. Es que puedo tirarle ideas desordenadas a cualquier hora (“recuerdame luego de esto”, “recuerdame de esto otro”, o “para esa idea que te dí, esto tmb viene bien”) y el asistente las toma, las “consolida”, las organiza donde van con lo que ya sabe del proyecto, y me da algo estructurado. Sin perder nada. Puedo pensar sin preocuparme por organizar mientras pienso. Puedo dejar mis ideas fluir, sin tener que organizarlas para documentarlas - alto win para cualqueir persona que multi-taskea naturalmente.

El template

Tengo varios de estos asistentes para distintos proyectos. Después de iterar el patrón, lo extraje en un template público: pm-co-pilot-template.

Es un repo de Git con archivos markdown que le dan contexto al asistente. El mismo template le da instrucciones al agente para hacer el setup inicial. Instrucciones para integraciones, estructura del board, convenciones, skills reutilizables (como hacer code review o postear comments en PRs), y el framework para ir de PoC a producción. Dos pasos (porque al hacerle la pregunta al agente va a leer las instrucciones y hacer setup):

  1. Clone
  2. What’s on my plate?

Saludos,
Gorka


Maze: a random labyrinth every day


A new labyrinth every day

Hace mucho tiempo que tengo ganas de jugar con r3f, es una librería (o colección de librerías) para crear ambientes virtuales 2D y/o 3D en el browser con React. También hace mucho que quiero hacer más software de entretenimiento (aka video juegos). Ahora que tengo un poco de tiempo en mis manos, decidí empezar a ver qué podría hacer.

Empecé por ver si podía simular un ambiente 3D con colisiones y una vista aerea que casi, casi hiciera ver el ambiente como 2D. Una vez que logré esto, quise ver si podía “escuchar” eventos del ambiente virtual y enseñar modales con HTML - esto es para lograr de manera efectiva unir el componente canvas que dibuja el ambiente, con controles en HTML y así “unir los dos mundos”. Lo logré de manera exitosa.

Tenía muchas ideas, muchas ganas de hacer cosas muy grandes, pero para empezar bien decidí hacer algo “corto, y al pie”: un laberinto.

Para esto tuve que buscar la manera de 1) definir una salida y definir un camino hacía la salida, 2) al azar posicionar paredes para hacer efectivamente un laberinto pero que las paredes no cerraran el camino hacía la salida. Una vez que logré estos dos, se me ocurrió “tapar” la vista, de tal manera que solo al moverse por el laberinto se puede “ver” las paredes y el camino recorrido.

Ya con esto, le sume una dinámica social al estilo wordle, donde se hace un “dibujo” de la solución, con el número de pasos que se tomaron para encontrar la salida. Esto para ayudar a hacer un tipo de competencia por ser quien llega a la salida en el menor número de pasos.

De aquí salió Maze, un juego que crea un laberinto diferente todos los días, donde al encontrar la salida puedes compartir tu solución en X.

Saludos,
Gorka


Snippets: The Hawthorne Effect


Pretending to look busy is hard work

Jefe: Sanchez, ¿por qué no está trabajando?
Sanchez: porque no lo vi venir, patrón.

Del artículo en wikipedia de Hawthorne Effect:

The Hawthorne effect is a type of human behavior reactivity in which individuals modify an aspect of their behavior in response to their awareness of being observed. The effect was discovered in the context of research conducted at the Hawthorne Western Electric plant; however, some scholars think the descriptions are fictitious

Me encantó, es una pequeña sutileza, pero muy poderosa para usar en negociaciones, hablando con personas que están siendo difíciles (ex. un colega o subordinado con el cual no puedes conectar), entre otras - es más, ustedes los millones de lectores, déjenme sus potenciales ideas de situaciones para usar en los comentarios, y no dejen de suscibirse al canal 🤦.

En resumen corto: las personas modifican de manera reactiva inconscientemente su comportamiento cuando se dan cuenta que están siendo observados en tal comportamiento/acción. En uno de los estudios que encontré, decían que las personas que normalmente eran “over-achivers” al decirles que les estaban observando modificaban su comportamiento para asegurar entregar en lo esperado (es decir, bajaban su rendimiento) y por el contrario, las personas que normalmente eran “under-achivers” subían su rendimiento si sabían que los estaban observando.

Saludos,
Gorka


Como cambiar audio source con el teclado


Select source

El cuento corto es que cada tanto uso los speakers de la compu pero a veces necesito cambiar a los auriculares y viceversa. Antes, lo hacía con los system settings de audio escogiendo el output deseado. Para esto tenía que traer spotlight/alfred CMD + Spacebar y escribir sound (cuantas veces me equivoqué por escribir rápido con soud sólo para tener que borrar la d y escribir la n) y con el mouse escoger la salida que quería.

No más.

Ahora hago CMD + Shift + H para los auriculares y CMD + Shift + M para los speakers.

¿Cómo?

Con un par de goodies:

SwitchAudioSource es el programa que deja cambiar la salida de sonido desde la terminal y con Script kit puse los shortcuts para las dos acciones que contaba arriba.

Igual, como me gusta mucho de hacer alias tengo unos cuantos alias para usar SwitchAudioSource (porque quien va a escribir todo eso!):

alias shead="SwitchAudioSource -s \"External Headphones\""
alias smac="SwitchAudioSource -s \"MacBook Pro Speakers\""
alias sall="SwitchAudioSource -a"
alias scur="SwitchAudioSource -c"

Y con eso, los scripts finales para Script kit quedaron en:

// Name: Shortcut to Headphones
// Shortcut: cmd shift h

import "@johnlindquist/kit"

await $`/bin/zsh -lic shead`

y

// Name: Shortcut to Speakers
// Shortcut: cmd shift m

import "@johnlindquist/kit"

await $`/bin/zsh -lic smac`

Saludos,
Gorka


Hábitos para perseguir y hábitos para evitar


Traits

**If you could invest in a friend and get 10% of their income for life -- who would you pick?**

• Why would you invest in that person?
• What character traits do they have?

Now you have a list of character traits to adopt.

**If you could short a friend's earnings, who would you pick and why?**

Now you have a list of character traits to avoid.

Me encantó. La idea es que los humanos somos buenos para analizar los hábitos y errores de los demás pero no tanto para los propios. La manera que se propone incluso hace uso de un análisis objetivo pensando en conseguir un retorno al invertir en una persona para luego “girar” el pensamiento hacía darte cuenta que siempre pudiste ver lo que hacen bien y por eso invertirías - en lugar de invertir, adopta los buenos hábitos y en lugar de “shortear”, evita los malos hábitos.

Fuente

Saludos,
Gorka


Snippets: input & paste


Don't tread on me

const dontTreadOnMe = (e) => e.stopImmediatePropagation();
document.addEventListener('paste', dontTreadOnMe, true);

A mi me pasa en un par de websites que cuando quiero pegar la contraseña parece ser que lo deshabilitaron, este snippet permite deshabilitar la deshabilitación - ja!

Fuente

Saludos,
Gorka


Snippets: WET y DRY


Wet vs Dry

When you find yourself adding if statements to a piece of code in order to get it to behave differently under different scenarios, you’re creating a confusion. Don’t try to make one thing act like two things. Instead, separate it into two things.

No sé si estoy de acuerdo con este blog post: Why I don’t buy “duplication is cheaper than the wrong abstraction”. Tiene una opinión interesante y racional acerca de la situación código repetido vs la abstracción incorrecta, pero la frase me gustó mucho, creo que está bueno diferenciar “la abstracción incorrecta” de una “confusión” y creo que de ahora en adelante voy a usar el término.

Y definitivamente, voy a usar la frase de evitar hacer que una cosa funcione como dos cosas, en lugar implementa las dos cosas por separado.

Saludos,
Gorka


Pagination