1. Waarom bounties beter zijn dan “wie wil helpen?”
Oproepen voor vrijwilligers krijgen eenmalige reacties. Een lid helpt één keer, voelt zich goed en gaat terug naar de achtergrond — omdat er geen registratie, geen beloning en geen opvolging was. Een bounty verandert hetzelfde verzoek in een openbaar, geprijsd, stateful contract: titel, beloning, eigenaar, status en geschiedenis die iedereen op de server kan zien.
De prijsstelling is het punt. Een bounty van 20 euro voor een documentatietaak geeft aan dat het werk echte waarde heeft. Leden die nooit vrijwillig zouden helpen, reageren op geprijsd werk, omdat geprijsd werk de onduidelijkheid wegneemt over de erkenning van hun inspanningen.
2. De levenscyclus: vier commando's, vijf statussen
Sovereign implementeert bounties als een strikte state machine: OPEN → IN_PROGRESS → REVIEW → PAID, met een expliciet CLOSED pad voor verlaten posts. Iedereen met een gekoppelde Identity kan een bounty aanmaken met /bounty create <Titel> | <Bedrag> (minimaal 5 EUR, opgeslagen in centen), openstaande bounties bekijken met /bounty list, er een claimen met /bounty claim <ID>, en voltooid werk indienen met /bounty done <ID>.
De state machine doet het moderatiewerk voor u. Een bounty kan niet twee keer geclaimd worden, de maker kan zijn eigen post niet claimen, en alleen de toegewezen werker kan indienen. Elke overgang informeert de juiste persoon: de maker ontvangt een DM wanneer hun bounty is geclaimd en opnieuw wanneer werk is ingediend, en de indiening komt terecht in de Dashboard Exchange voor goedkeuring.
Gelden worden pas vrijgegeven na expliciete goedkeuring in het Dashboard. Dat houdt de cyclus menselijk waar het telt — vertrouwen — en overal elders geautomatiseerd.
// Command routing and the guard clauses that make the state machine safe
switch (action) {
case 'create': return await createBounty(tenantId, member.id, args); // -> OPEN
case 'list': return { reply: await listBounties(tenantId) }; // 5 latest OPEN
case 'claim': return await claimBounty(tenantId, member.id, args); // OPEN -> IN_PROGRESS
case 'done': return await completeBounty(tenantId, member.id, args); // IN_PROGRESS -> REVIEW
}
// Guards enforced inside the transition functions:
// - status must match the expected state or the command is rejected
// - creatorId !== workerId (no self-claims)
// - only the assigned workerId may call /bounty done
// Funds are released after owner approval: Dashboard > Exchange (REVIEW -> PAID)3. Bounties afstemmen zodat ze retentie opbouwen, niet alleen output
Bounties die werken zijn klein, specifiek en in één avond te winnen. Een community die drie of meer nieuwe bounties per week plaatst, geeft leden een constante reden om de server te controleren: openstaand werk is een regelmatig vernieuwde reden om terug te komen, wat precies het gedrag is dat retentie-engineers proberen te creëren.
De cumulatieve strategie is om bounties te plaatsen voor zaken die de community beter laten functioneren: onboarding scripts, documentatie, clip-making, moderatie dekking, evenementenlogistiek. Elke voltooide bounty is een permanent bezit, geen eenmalige oplevering.
Het minimum filtert ruis weg. Een bounty onder de 5 EUR is de overhead van de state machine of de aandacht die het van echt werk steelt niet waard. De prijsvloer, net als de REVIEW-poort, is fraude- en spambestrijding vermomd als een productregel.