Do feedback ao roteiro sem uma segunda ferramenta

Product

A maioria das equipes mantém isso em dois sistemas. Um quadro de feedback, onde os usuários publicam ideias e votam, e um roteiro público, onde a equipe mostra o que vem por aí. Duas ferramentas, dois bancos de dados e, no meio, um copiar e colar manual que para de acontecer lá pela sexta semana.

Aí o roteiro fica desatualizado, os usuários percebem, e ele some do menu sem alarde.

São os mesmos registros

Um item do roteiro é uma publicação de feedback que foi aceita. A relação é só essa, e quando você modela assim, o copiar e colar desaparece, porque não há nada para copiar.

No Kookee, as publicações de feedback ficam num quadro com colunas que a sua equipe define: Aberto, Planejado, Em andamento, Lançado, o que fizer sentido. O quadro de feedback mostra todas as colunas. O roteiro mostra as mesmas publicações, agrupadas pelas colunas que você decide tornar 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),
}));

Não existe uma API de roteiro, porque ela não é necessária. Mover um card é arrastá-lo para outra coluna, e quem faz isso é a mesma pessoa que já faz a triagem do feedback. Em React, o Roadmap de @kookee/react/roadmap renderiza o mesmo agrupamento como um quadro somente leitura; veja Mostrar um roteiro somente leitura com os componentes React.

Os votos ajudam a priorizar, mas não decidem

As publicações têm contagem de votos e de comentários, e sort: 'top' e sort: 'trending' trazem à tona o que importa para as pessoas agora:

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

Vale deixar claro o que esses dados são. A contagem de votos mostra o que querem os seus usuários mais engajados e que mais se fazem ouvir. É um sinal real, e não é a mesma coisa que aquilo de que toda a sua base de usuários precisa. Use os votos para descobrir o que você não sabia, não para terceirizar o roteiro. Uma coluna fechada “Recusado” existe justamente para você dizer não em público, com o motivo junto.

A coleta acontece onde fica a moderação

Publicar, votar e comentar acontecem no seu portal hospedado, onde os visitantes entram com a própria conta. Isso é proposital: uma pessoa, um voto, e a moderação da sua equipe num só lugar. Sem spam vindo de uma chave vazada, sem identidade que você precise garantir a partir do seu próprio backend.

A sua aplicação lê o quadro pela API e mostra como você quiser: uma página de roteiro, um widget de “mais pedidos” na página de preços, um link do estado vazio de um recurso para a discussão sobre ele. A escrita fica no portal; a leitura vai para qualquer lugar.

Feche o ciclo em público

Dois detalhes fazem a maior parte do trabalho para um quadro parecer vivo.

Os comentários de proprietários e administradores do projeto vêm marcados com isOfficial, então uma resposta da sua equipe aparece diferente da resposta de outro usuário. E getTopContributors() retorna as pessoas cujas publicações receberam mais votos: o punhado de gente que sempre diz a verdade sobre o seu produto. Vale ter essa lista por motivos que vão muito além de um ranking.

O ciclo que mantém um quadro saudável é curto: alguém publica, a equipe responde em público, o card muda de coluna e aparece no roteiro. Depois o recurso é lançado e vai para o registro de alterações, que é só mais uma entrada kookee.changelog, no mesmo projeto, com a mesma chave de API.