Currently, we have a problem in SourceCred: we measure the value of activity, but not the associated cost.
This means that SourceCred will always reward doing more–more pull requests, more comments, more notifications, more activity, even if the cost of that activity exceeds its value.
Here’s an example that @wchargin and I have discussed. Consider two pull requests suggesting equally valuable changes to the codebase. One pull request has been carefully prepared, and merges smoothly, with a single review saying “LGTM”. The other one is extremely messy, and it takes dozens of review comments before it is ready to merge. Currently, the second PR will earn much more cred, because it has much more activity, including many connections to high-cred nodes (the maintainers). Clearly, this is a very bad incentive, because we are rewarding people for doing sloppy work, and creating more work for others.
Another classic example is the bikeshed discussion: suppose that we have two Discourse posts, one of which is framed in a neutral/constructive way, and the other is needlessly inflammatory. The inflammatory one will likely attract more activity, which, in the current construction, means more cred. Again, a very bad incentive!
I think we can approach this by giving SourceCred a way to model how “expensive” a contribution was, which I’m currently calling “resistance”. As a start, we could give every piece of activity some default resistance (maybe proportional to its content length – reading a long PR is more expensive than reading a 1 line typo fix).
Then, we could flow resistance along the cred graph (if your issue attracts a lot of comments, it acquires resistance from its many children, etc), so that every user will wind up with an amount of cred and an amount of resistance.
Getting resistance isn’t bad; it just means that something was costly. (In this sense, it’s a very different meaning from downvotes.) Many parts of SourceCred that I like, like the Mirror module or the Graph, could be considered high resistance.
Some characteristic examples for {high/low} x {cred/resistance} in the context of GitHub:
- High Cred, High Resistance: The Massive Refactor
- High Cred, Low Resistance: The Neat Feature
- Low Cred, High Resistance: The Inflammatory Bikeshed
- Low Cred, Low Resistance: The Typo Fix
I think this idea still needs a fair bit of development (e.g. is flowing resistance like cred really the right semantic?) but if we can get it right, it will solve a lot of major incentive problems in SourceCred.