De los comentarios a la hoja de ruta sin una segunda herramienta

Product

La mayoría de los equipos los llevan como dos sistemas: un tablero de comentarios donde los usuarios publican ideas y votan, y una hoja de ruta pública donde el equipo muestra lo que viene. Dos herramientas, dos bases de datos y, entre ellas, un paso manual de copiar y pegar que deja de hacerse más o menos en la sexta semana.

Luego la hoja de ruta se queda desactualizada, los usuarios se dan cuenta y desaparece del menú de navegación sin hacer ruido.

Son los mismos registros

Un elemento de la hoja de ruta es una sugerencia que se aceptó. Esa es toda la relación, y si la modelas así, el paso de copiar y pegar desaparece, porque no hay nada que copiar.

En Kookee, las sugerencias viven en un tablero con columnas que define tu equipo: Abierto, Planificado, En progreso, Lanzado o las que te sirvan. El tablero de comentarios muestra todas las columnas. La hoja de ruta muestra las mismas sugerencias, agrupadas por las columnas que decidas hacer públicas:

TypeScript
const columns = (await kookee.feedback.getColumns()).filter((column) => column.isVisible);
const { data: posts } = await kookee.feedback.list({ sort: 'top', limit: 100 });

const roadmap = columns.map((column) => ({
  ...column,
  posts: posts.filter((post) => post.columnId === column.id),
}));

No hay una API para la hoja de ruta, porque no hace falta. Mover una tarjeta es arrastrarla a otra columna, y quien lo hace es la misma persona que ya revisa las sugerencias. En React, Roadmap de @kookee/react/roadmap muestra la misma agrupación como un tablero de solo lectura: consulta Mostrar una hoja de ruta de solo lectura con los componentes de React.

Los votos son un dato para priorizar, no la decisión

Las sugerencias tienen número de votos y de comentarios, y sort: 'top' y sort: 'trending' sacan a la luz lo que le importa a la gente ahora:

TypeScript
const top = await kookee.feedback.list({ sort: 'top', category: 'feature', limit: 20 });

Conviene tener claro qué son estos datos. Los votos te dicen lo que quieren tus usuarios más activos y que más se hacen oír: es una señal real, pero no es lo mismo que lo que necesita toda tu base de usuarios. Úsala para descubrir lo que no sabías, no para delegar la hoja de ruta. Una columna cerrada «Rechazado» existe precisamente para que puedas decir que no en público y con un motivo.

Las sugerencias se recogen donde está la moderación

Publicar, votar y comentar ocurre en tu portal alojado, donde los visitantes inician sesión. Es a propósito: una persona, un voto, y la moderación de tu equipo en un solo sitio. Nada de spam desde una clave filtrada ni identidades que tengas que avalar desde tu propio backend.

Tu aplicación lee el tablero a través de la API y lo muestra como quieras: una página de hoja de ruta, un widget de «lo más pedido» en tu página de precios, un enlace desde el estado vacío de una función a la conversación sobre ella. La escritura se queda en el portal; la lectura va a cualquier parte.

Cierra el ciclo a la vista de todos

Dos detalles son los que más hacen que un tablero parezca vivo.

Los comentarios de los propietarios y administradores del proyecto llevan la marca isOfficial, así que una respuesta de tu equipo se muestra distinta de la de otro usuario. Y getTopContributors() devuelve a las personas cuyas sugerencias recibieron más votos: ese puñado de gente que te dice la verdad sobre tu producto una y otra vez, una lista que vale la pena tener por razones que van mucho más allá de un ranking.

El ciclo que mantiene sano un tablero es corto: alguien publica, el equipo responde en público, la tarjeta se mueve y aparece en la hoja de ruta. Después se lanza y llega al registro de cambios, que no es más que otra entrada de kookee.changelog, en el mismo proyecto y con la misma clave de API.