Official Ranked Choice Vote: https://snapshot.org/#/metafactory.eth/proposal/QmTu3kkkPWqif1W6iPeg1xa9jLnuMCFxpMHypEi97q4awA
In the recent Proposal #8: 2021 Ops Distribution, we experimented with the use of SourceCred as a tool for us to measure and reward value creation in MetaFactory. However, we didn’t officially agree on if and how SourceCred should be used in MetaFactory.
This proposal is basically breaking out that decision on adopting SourceCred and agreeing on the “framework / process” that we use to distribute tokens instead of trying to come to consensus on the resulting token numbers. This allows it to be much more scalable with less governance friction / overhead.
WTF is SourceCred?
If you want to learn the details on how SC works, check out the docs here: https://sourcecred.io/docs
ELI5: SC takes an input of “things that happened” + “what things to incentivize” and spits out a score of the people who were responsible for making things happen that we want to incentivize.
More technical explanation
SC scrapes data from Discord / Forums to generate a graph of interactions (messages, reactions, people, roles, channels, posts, etc). Communities can then configure “weights” for certain nodes in the graph based on how valuable certain actions are (e.g. getting an emoji reaction in the “did-a-thing” channel should have a higher weight than getting an emoji reaction in “random”). SC also takes an input of manually added “initiatives” which are the major contributions for the project that act as the high signal source of value creation that flows throughout the rest of the graph based on the interactions between people.
Don’t miss the forest for the leaves
Imagine that everyones contributions in MF are a forest full of trees, branches and leaves. The trees represent the major different things that MetaFactory has done, and the branches and leaves represent all the little actions that people took to achieve that outcome. People’s contributions = the light that gives energy to the tree so it can grow.
Distributing value to this interconnected mesh of outcomes and contributions is like giving water to the forest: the biggest trees need the most water.
A naive approach would be to try to compare the branches and leaves to see which ones are getting the most light and water them individually, hoping that it results in the best trees getting the most water. The problem with this approach is that its extremely inefficient and prone to user bias since you’re trying to measure the cause and not the effect. You’ll end up misallocating a lot of the water since there’s no way for you to see the whole forest at once.
A much better approach would be to measure the trunk size and distribute water proportional to it, allowing the tree to flow the water to its individual branches and leaves. Measuring the trunk size is something thats much more repeatable, easier to reason about, and easier to reach consensus on if multiple people were to decide how to distribute the water.
This is the same thing as trying to allocate tokens in a DAO. The naive approach is to try to allocate resources to people based on our rough mental math of summing together all the things they did and how valuable they were relative to others contributions. Instead of measuring people, we should measure contributions and back-propagate resources to the people that made those contributions happen.
SourceCred is the tool that lets us measure the tree trunks and flow water through them to the branches and leaves.
Measuring the trees
So how exactly do we define and measure these trees? This is done in SC by defining the “initiatives” that the DAO executed on and assigning a relative weight to each one (1, 2, 3, 5, 8, 13, 21, etc). E.g:
Initiative | Weight |
---|---|
Expanding production partner network for better quality products | 21 |
Handling customer support for shop | 8 |
Taking meeting notes | 5 |
Attending weekly community call | 2 |
Managing Instagram + making social media graphics | 13 |
Software Dev for ROBOT Distributions / NFTs / Auctions | 21 |
The exact number is not as important as the relative weightings, but we still need a way to collectively determine what these “initiatives” are and decide on the weights. I built this tool specifically for this purpose.
It allows contributors to add the major things they or others have accomplished and for the rest of the contributors to rate their awesomeness / impact. The entire list of contributions can then have their weights set based on their relative ratings.
It’s easier and more direct / fair to assess the impact of each contribution instead each contributor. It’s also less impacted by social dynamics and human bias where the loudest / most visible / most charismatic contributors get the highest allocations instead of the most impactful / valuable contributors.
Lastly, it incentivizes people to think long term and how to make the most impact. Otherwise, people would just optimize for doing the work that makes them look as busy as possible rather than seeking out the best use of their time and energy.
“Show me the incentives and I will show you the outcome”
The MF Covenant
The following is a list of guidelines that I’m proposing we adopt when thinking about how we coordinate and govern ourselves now and in the future.
- We should measure the value of contributions, not contributors.
- Contributors should be rewarded proportional to the impact they have, not how many hours they work.
- We should minimize how much time and effort we spend on governance and decision making since they just a means to an end, our mission is to create / build dope stuff and realize our collective vision of a web3 cultural economy / metaverse, not play governance games.
- We shouldn’t incentivize behaviour that is self-optimizing at the expense of our larger goal / community.
- Our rewards should be outcome based. Distribute tokens for actual work done, not the promise of future work.
- We move forward at rough consensus (all objections within reason are fully addressed, not necessarily solved. Coherence around long term vision is reestablished, so that we can improve, iteratively, without stalling). This is the framework: https://andytudhope.africa/essays/running-code
- We establish a building / collective dreaming multiplier: i.e. we spend 10-20x time on building & collective dreaming to 1x governance.
If we don’t rely on an agreed-upon process / framework, we will be very inaccurate / inefficient / biased / game-able when it comes to token allocation and delivering it in the most sound / incentive aligned way.
Process / Structure / Rules
- Active contributors are allowed to add new contributions in the contribution dashboard
- Active contributors, Headbots and Alphabots are allowed to rate contributions (could apply weighting multiplier based on role)
- Any contributions that have been “flagged” will not make it into SourceCred until any concerns raised have been addressed.
- The weight of each contribution will be set in proportion to the ratings given. Higher rating = higher weight.
Weight of a single vote:
Rating | Weight |
---|---|
legendary | 18 |
epic | 9 |
rare | 3 |
common | 1 |
Weight of a contribution = (MEAN(voteWeights) + SUM(voteWeights) / 10) * 2
- Any exploitative behaviour will not be accepted (e.g. collusion / quid-pro-quo, rating only your own contributions high, sybil attacks). This can only be enforced at a cultural / social level. We should all be aligned that the process works best when everyone is playing honestly.
- Every 6-8 weeks the contributions will be added to SourceCred and we will distribute ROBOT proportional to the $ sales milestones.
- Any issues with the distribution should be dealt with at the contribution / rating level. The resulting numbers from SourceCred should not get changed through any other means besides changing the input to SourceCred.
UPDATE
Now that enough people have voted and added their contributions into the contribution tracker, I’ve setup the weight calculation to be derived from the votes. The calculation works as follows:
Weight of a single vote:
Rating | Weight |
---|---|
legendary | 18 |
epic | 9 |
rare | 3 |
common | 1 |
Weight of a contribution = (MEAN(voteWeights) + SUM(voteWeights) / 10) * 2
The sum / 10 is added so that if contribution A has 3 legendary votes and contribution B has 4 legendary votes, contribution B will have a slightly higher weight because more people signalled it was valuable. The 2x multiplier is there to normalize the weight to the appropriate range.
You can see the resulting weights of the contributions in the dashboard: https://metafactory.retool.com/embedded/public/3cdd1037-d8f5-4b16-b42f-064f9f78be4e
Updating the weights in SourceCred to use these new voted weights results in the following changes to the ROBOT distribution compared to the weights originally set by me.