Doppelte Feature-Requests: Ohne die Stimme zu verlieren
5 Min. Lesezeit
Drei Kundinnen bitten in drei verschiedenen Wochen um dieselbe Fähigkeit, auf drei verschiedene Arten formuliert, und ein Triage-Prozess, gebaut um Duplikate abzufangen, macht seinen Job: er gruppiert sie, zählt sie als eine Anfrage mit drei Stimmen, und das Backlog bleibt aufgeräumt. Das ist der leichte Teil. Welche Labels lohnen sich behandelt das Gruppieren nach zugrunde liegender Fähigkeit vor dem Triagieren nach Formulierung als mechanische Lösung für Duplikate; was es nicht behandelt, ist, was mit den Worten selbst passiert, sobald drei Anfragen zu einer Zeile werden, und dieser Verlust ist meist größer als das Duplikat-Zählungsproblem, das er löste.
Was geht tatsächlich verloren, wenn Duplikate zusammengeführt werden?
Die spezifische Formulierung jeder Anfragerin, die oft informativer ist als die Stimmenzahl, in die sie kollabiert. Eine Kundin könnte um „eine Möglichkeit, gefilterte Ergebnisse zu exportieren” bitten, eine andere um „CSV-Export, der meine gespeicherten Filter respektiert”, und eine dritte um „Export, der versteckte Spalten nicht einschließt”. Alle drei sind dieselbe zugrunde liegende Anfrage, korrekt gruppiert, aber jede Formulierung trägt eine leicht andere Betonung dessen, was dieser Person wichtig ist, und ein Merge, der nur die Formulierung der ersten Einreichung behält, wirft die anderen zwei komplett weg. Die Zählung überlebt; die Textur, die jemandem helfen würde, die richtige Version der Funktion zu bauen, nicht.
Warum zählt die Textur, wenn die Stimmenzahl schon sagt, dass Nachfrage existiert?
Weil Nachfrage und Design unterschiedliche Fragen sind, und nur die konkrete Formulierung beantwortet die zweite. Zehn Stimmen für „Export” sagt einem Team, dass sich die Funktion zu bauen lohnt; sie sagt nichts darüber, ob „Export” CSV, PDF, eine geplante E-Mail oder einen API-Endpunkt bedeutet, und ein Merge, der neun der zehn ursprünglichen Einreichungen zugunsten der Formulierung der ersten verwirft, kann die Spezifikation still auf das verengen, worum die erste Anfragerin zufällig gebeten hat, selbst wenn die anderen neun etwas subtil anderes wollten. Was ein Feature-Request-Eintrag festhalten sollte behandelt genau diese Lücke von der Aufnahmeseite; das Zusammenführen von Duplikaten ist, wo sie nach der Aufnahme wieder auftaucht, genau an dem Punkt, an dem ein Team die Bandbreite dessen, worum tatsächlich gebeten wurde, am meisten braucht.
Wie sieht ein Merge-Prozess aus, der die Formulierung behält statt sie zu verwerfen?
Anhängen statt ersetzen. Das kanonische Element behält einen einzelnen Titel für die Backlog-Ansicht, aber die ursprüngliche Formulierung jeder zusammengeführten Einreichung bleibt daran hängen, entweder als Liste von Zitaten oder als verlinkte Quell-Tickets, sodass jede, die das Element später prüft, die tatsächliche Bandbreite dessen sehen kann, worum Leute gebeten haben, statt der Zusammenfassung eines Teammitglieds davon. Das kostet fast nichts zu bauen, ein Feld auf dem Ticket statt eines neuen Systems, und es ist der Unterschied zwischen einem Merge, der Information komprimiert, und einem, der nur ihre Anzeige komprimiert.
Feature: Gefilterter CSV-Export
Stimmen: 12
Zusammengeführte Anfragen:
- "eine Möglichkeit, gefilterte Ergebnisse zu exportieren" (acct_4421)
- "CSV-Export, der meine gespeicherten Filter respektiert" (acct_8832)
- "Export, der versteckte Spalten nicht einschließt" (acct_1097)
...
Verdient jedes Duplikat einen Merge, oder gibt es falsche Treffer?
Manche sind falsche Treffer, und „klingt ähnlich” als „ist dieselbe Anfrage” zu behandeln ist ein eigener Fehlermodus. „Lass mich meine Daten exportieren” und „lass mich nur die gefilterte Ansicht exportieren” können durch einen Stichwort-Treffer auf „exportieren” gruppiert werden, obwohl sie tatsächlich zwei verschiedene Umfänge derselben allgemeinen Fähigkeit beschreiben; sie zusammenzuführen bläht entweder die Stimmenzahl für die falsche Sache auf oder liefert, schlimmer, die engere Version, weil sie zufällig zuerst ankam. Ein menschlicher Durchgang durch die Gruppierung, selbst ein schneller, fängt das ab, bevor es sich potenziert; ein automatischer Ähnlichkeitsabgleich allein wird bei Vokabular übermergen und bei Absicht untermergen.
Wann sollte die Duplikatsprüfung eigentlich laufen, bei der Aufnahme oder später?
Beides, aus unterschiedlichen Gründen. Die Prüfung bei der Aufnahme fängt den offensichtlichen Fall ab, eine neue Anfrage, die etwas bereits Offenes wiederholt, bevor sie je zu einem eigenen, nicht erfassten Eintrag wird; eine Ähnlichkeitssuche gegen offene Anfragen zum Zeitpunkt der Einreichung erledigt die meisten davon ohne Beteiligung eines Menschen. Ein zweiter Durchgang später, in langsamerem Takt, fängt den Fall ab, den die Aufnahme verpasst: zwei Anfragen, die zum Zeitpunkt der Einreichung sprachlich unterschiedlich genug formuliert waren, um an einem Stichwort- oder Embedding-Abgleich vorbeizurutschen, sich aber herausstellen, sobald ein Team ein Dutzend Varianten gesehen hat, dieselbe zugrunde liegende Fähigkeit zu beschreiben. Den zweiten Durchgang zu überspringen lässt Near-Duplicates auf unbestimmte Zeit unter getrennten Titeln verstreut, jeder mit seiner eigenen kleinen Stimmenzahl, die sich nie zu der Zahl aufsummiert, die die Umsetzung ausgelöst hätte.
Sollte die Anfragerin erfahren, dass ihre Einreichung in ein bestehendes Element gemerged wurde?
Ja, und das ist dieselbe Disziplin wie das Schließen des Kundenfeedback-Loops, nur einen Schritt früher als üblich angewendet: Eine Anfragerin, die etwas eingereicht hat und nie etwas hört, schließt daraus, dass ihre Anfrage ins Leere lief, selbst wenn sie korrekt in ein Element mit elf anderen Stimmen gemerged wurde, das schließlich ausgeliefert wurde. Eine kurze Bestätigung, „wir haben das mit einer bestehenden Anfrage kombiniert, die auch andere gestellt haben”, kostet eine Nachricht und verhindert, dass eine Kundin dieselbe Anfrage alle paar Monate neu einreicht, weil sie keine Sichtbarkeit hat, ob sie je tatsächlich verfolgt wurde.
Ändert das Zusammenführen, wem Anerkennung zukommt, wenn die Funktion ausgeliefert wird?
Es sollte alle einschließen, nicht nur, wer zuerst eingereicht hat. Das Schließen des Feedback-Loops
behandelt, Anfragerinnen zu informieren, wenn ihre Bitte ausgeliefert wird; für ein
zusammengeführtes Element heißt das jeder Account, der am Merge hängt, nicht nur der, dessen
Formulierung zum kanonischen Titel wurde, weil aus Sicht jeder Anfragerin sie darum gebeten hat
und es ausgeliefert wurde, unabhängig davon, wessen Formulierung ein Triage-Prozess zufällig
behalten hat. Mit changeloop heißt das, dass der Pull Request jedes verknüpfte Issue nennt
(Fixes #142, fixes #187); ein Issue, das er nicht nennt, bekommt keinen Kommentar.
FAQ
Wie viel Formulierung lohnt sich pro zusammengeführter Anfrage zu behalten, ein Zitat oder ein voller Ticket-Link? Ein kurzes Zitat reicht meist für den Normalfall, da sein Zweck ist, einer Reviewerin die Bandbreite der Formulierungen auf einen Blick zu zeigen; behaltet auch den vollen Ticket-Link, wenn das Original bedeutenden zusätzlichen Kontext hatte, wie einen Screenshot oder eine detaillierte Workflow-Beschreibung, die ein einzeiliges Zitat abflachen würde.
Macht das Behalten der Formulierung jedes Duplikats das Backlog schwerer zu überblicken? Nicht, wenn es standardmäßig eingeklappt ist. Der kanonische Titel ist, was eine überfliegende Reviewerin sieht; die zusammengeführte Formulierung ist einen Klick oder ein Ausklappen entfernt, präsent für die Person, die tiefere Recherche macht, aber ohne die Ansicht für jemanden zu überladen, der nur Stimmen zählt.
Was, wenn zwei Anfragen identisch aussehen, sich aber beim Bauen als unterschiedlich herausstellen? Trennt sie wieder auf, sobald das klar wird, und behandelt den ursprünglichen Merge als vernünftige Entscheidung, getroffen mit der damals verfügbaren Information, nicht als Fehler, den man vermeiden muss zu wiederholen. Ein Gruppierungssystem, das nie etwas auftrennt, wird irgendwann ein paar falsche Merges dauerhaft eingebacken haben.
Gibt es eine Stimmenschwelle, ab der eine zusammengeführte Anfrage eine menschliche Prüfung der zugrunde liegenden Formulierung bekommen sollte? Keine feste Zahl, aber jede Anfrage, die sich einer Bauentscheidung nähert, verdient das, unabhängig von der Stimmenzahl, weil das der Punkt ist, an dem der Unterschied zwischen „Export” und „Export als CSV mit gespeicherten Filtern” aufhört, eine Nuance zu sein, und anfängt, die Spezifikation zu sein.
Die technischen Aussagen in diesem Artikel wurden nicht unabhängig geprüft. Wenn etwas nicht stimmt, sagen Sie es uns, und wir korrigieren es.