Giter Club home page Giter Club logo

mind's Introduction

PeerMind

The goal of this application is to improve how we do group decision making in our communities. Instead of just digitizing current voting practices and moving them online, without much added value, this project aims to explore and improve technologies we use for decision making. Some current ideas:

  • support for communities which meet offline, but want to use online tools to augment their decision making
  • tools for better facilitation of discussions
  • score voting for better multiple-choices decision making
  • dynamic statistical quorum
  • vote delegation
  • visual feedback on decision making process and progress

The project is in early stages. Consider it a beta/prototype. Any feedback is welcome.

You can use it but keep in mind that it has not yet been security audited so you should probably not use it for sensitive or critical decisions and where privacy of data and votes is important.

Development

The application uses Meteor web framework. Install it:

curl https://install.meteor.com/ | sh

Clone the repository:

git clone --recursive https://github.com/peer/mind.git

Run it:

meteor

And open http://localhost:3000/.

Currently you will have to manually create accounts using meteor shell:

var userId = Package['accounts-base'].Accounts.createUser({username: 'admin', password: 'password'});
Package['alanning:roles'].Roles.addUsersToRoles(userId, ['admin', 'moderator', 'manager', 'member']);

Furthermore, currently the app has hard-coded four user roles with hard-coded permissions for them:

  • members can add discussion items, add comments to them, propose motions, upvote content, and vote on motions
  • moderators can make points, and edit content of others
  • managers can add discussion items, comment, and propose motions
  • admins can manage user accounts
  • guests can comment

After you have created an admin account, you can invite new users into the app. They will get an e-mail with instructions how to setup their password. To invite a user, run the following function in your browser's web console:

Meteor.call('User.invite', '[email protected]', 'name', console.log.bind(console));

Invited users initially do not belong to any role. Currently this means that effectively they cannot do anything in the app without being added to at least one role. To add them to a role, you can use an admin interface at http://localhost:3000/admin/accounts.

Used technologies

The application is built on top of many other technologies and Meteor packages:

Running

To run the application in production you can use Docker.

The application is provided as peermind/peermind Docker image. It is based on tozd/meteor image for Meteor applications. tozd/meteor-mongodb image is recommended for MongoDB because it creates necessary Meteor MongoDB database configuration automatically.

You can see run.sh file for an example how to run it. You have to adapt the script for your installation. It contains hard-coded values for another installation.

The application is a regular Meteor application, so you can consider also other ways to deploy and run Meteor applications.

Related projects

mind's People

Contributors

chilldude avatar mitar avatar neynah avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mind's Issues

Drafts

It would be nice if there were a drafts function so anything happens you don't lose your progress on the motion.

Document statistical quorum

It would be great to create documentation for statistical quorum. So, explanation with diagrams. Showing what exactly are the intervals we are computing for credibility and confidence (also that it is clearer why they can be different), what is the hypothesis we are solving.

@mkanwal, can you make this into the document? LaTeX or something?

No HTTPS

Some managers are very likely to use their manager account password for everything and if they sign into coucil site their manager accout could be compromised

Vote Tracker

Vote tracker for each user that tells them the % of motions they have voted on.

We will eventually make a bylaw change to automatically issue uncooperative fines to people who do not vote in 25+% of all motions.

For/Against Points Formatting

Could we have it so that these points could also be formatted?

(At the very least, I would like to be able to put line breaks by pressing 'Enter' and have that formatting retained after submitting the point)

Make better graph

Lots of improvements to be made to the graph:

  • confidence interval
  • axes labels
  • presentation of stats
  • better visibility (boldness)
    ...

User Page

Shows all votes that user has participated in (their vote + motion result)

Comments Scrolling

Comments just endlessly go down the page. Make the comments scrolling instead so that they don't extend the page by 5x the length.

Support users to report satisfaction with a decision

I was thinking about bias people have for remembering negative cases. For example, remembering situations when a majority decision was made which is very against their position. But maybe still this is a very rare case and it should not be taken as very important. On the other hand, somebody could be constantly silenced and that might be unseen.

For voting based decision making, one thing could be just displaying stats how often was user on which side of the decision, in majority or minority. Moreover, stats could be made for the whole community. To show if some people are always in minority. Does somebody always gets their decision? This might not be necessary bad, but publicly exposing data might help guide conversations and help participants self-moderate themselves.

One thing would be also to ask participants some time (month, two) after a decision was made to evaluate it again and see if it was really so bad or good as the initially thought. This could also be displayed back to them (and community) visually.

One more thing could also be that instead of asking users to vote with one number based on their position, they would vote with an interval. So for example, where would they stand ideally (so they move slider to there) and until where they would compromise (and they create an interval to there). For example, somebody could prefer that something does not pass, but could also survive if it passes, so the interval could be from -1 to 0. This could give more information to the decision making process in how much more work is needed to get to somewhere where people would agree upon. It could be a nice way also to move between voting and consensus based decision making. So one is where you want to be, and another point of the interval is where you are willing to be. One thing to think about is if those willingness should be public or not. But just internal to the system it might be harder to game. On the other hand, "gaming" is maybe exactly what is needed: somebody observing that a slight change in some text or something would get people to agree (although just barely) on the decision.

In consensus based decision making, we seek that participants are willing to accept the decision (not necessary that they are happy with it). We could measure how much they had to stretch. This could be a good metric both for them and for the group as a whole. Is one person stretching all the time. Maybe then community is not really suitable for that particular person. How much do people have to stretch on average. Is maybe a community too divergent? Is maybe mission/goals unclear and not everyone share a same vision? It could help guide the conversations and communities to understand if somebody is stretching less than average or more than average.

Vote delegation

When a user does not vote themselves, their vote can be computed based on their delegates.

Voting on issues impacting minority groups

Democracy in general has an issue dealing with issues impacting minority groups. Tyranny of majority can often occur. Because of this often such issues are delegated to courts.

But maybe we could do something about this. So that if discussion is labeled/marked as something impacting minority group we would use some other statistics to compute the result and not simply average. Maybe by using some Bayes inference where prior is different because of the low probability that a voting member is a member of a minority group.

Show previews/embeds of links

Maybe automatically expand a link with a preview/embed of it, like it happens on Facebook? Maybe just in the discussion, if somebody shares just a link?

Autolink URLs

Related to #32, but if somebody just copies an URL into the text edit area, it should be converted to a link automatically.

Support for grouping discussions โ€“ meetings

The best word I found was "meetings". So time-related groups. One discussion can be in multiple meetings. But only if the discussion has not yet been closed (#14).

A meeting can also be closed (#105) and no discussion can be added to the meeting afterwards. At the same time also all discussions under the meeting can be closed (only closed if the same discussion is not also under some other open meeting).

Visualize for the whole community how spread is winning in votes through time

Are the same people all the time among groups who win in decisions? Or is this fairly distributed, that everyone wins and loses sometimes approximately equally?

This is part of ideas what to visualize to the the community as a whole to show them where might be potential issues.

Related: #45

Not sure if fair distribution of "wins" is what is good, though.

Automatically show graph/results + usernames

I know we initially wanted to create discussion independent of names, and just based on content.
And I know we wanted to have voting based on your opinion only, not to be biased based on current vote.

But it's killing me... I just keep opening the graph/username anyway to see. We should just have these auto-displayed.

Sandstorm: dynamic roles

Currently it is possible to define only predefined roles for users to select in Sandstorm. See: sandstorm-io/sandstorm#1851

As we currently do not have that feature anyway in the app, this is not such big problem, but in the future it would mean that Sandstorm users would be limited in creating their own roles.

Use statistical quorum which takes diversity into the account

Now that we are using statistical quorum we can also do more complicated statistics. For example, we could ask people to self-identify in various groups (for example, people of color) and then we could require that each of those groups reach quorum as well. In this way we could be assured that not only one group of people had their way.

Maybe this would not be a default but an option when opening a vote. Or something which would be triggered/linked to a tag on the discussion.

Phases of development

I think you should add phases to each of the decision making process. In particular, to represent an efficient version of what happens at city councils. The other decision making tools allow voting on decisions and discussion about it, but they don't build into further collaboration on those decisions.

Such that, you can do the following:

-Vote on an idea (initial)
-Vote on components of the idea to be implemented by specialized committees (implementation)
-Vote on the legal wording of the implementation (legalizing)
-Allowing the final legal wording to be budgeted in terms of costs and benefits
-Vote by everybody on final version

Measure how polarized votes are

Could be introduce some measure of how polarized is community on a motion? So we could with that require not just quorum, but also that result should not be too polarizing? I can imagine that for some decisions, votes would be distributed normally, but for some other they would be like two spikes, for and against.

The normal distribution is one which is maybe OK, and then the question is only that the average support is over 0. But if distribution is with two spikes, even if average is over 0, it might not be good for community to make such a decision.

I have no idea if this is a good thing to require, but maybe it is. Maybe it would require authors of motions to try to frame them in a way to include even minorities, not just satisfy the majority.

@mkanwal, I am correct to assume that in current quorum we look only at average votes and not really how votes are distributed? So that votes which are only -1 and 1 and have the same average than same number of votes of only 0, would have the same quorum requirement by our current formula?

Better name

discuss!

ideas:

  • groupthink
  • granola
  • decide-together
  • work-together
  • good-faith-collaboration
  • decision procedure
  • decision process
  • decision-maker
  • decision-hacker

Display distribution of votes

We could be also display a histogram of votes next to each decision, so that community can see that maybe the is a small (minority) group of people are very against the idea.

This could allow community to better understand type of support or opposition for the motion and decide better how to proceed.

Branched discussion threads

It would be way more clear for lengthy discussions if we could directly reply to individual comments instead of contributing to a single thread.

Filterning by date

Maybe week / month / semester. otherwise I feel like it will get crouded and confusing

threads

what's the approach to comment-based discussions? will threads be implemented or no?

Discussion Dashboard

The main dashboard (list of discussions) should have stats for items that are still open, results for items that are closed, dates, labels (e.g. mural, use of space, House Acct, etc.), and a way to show whether or not you voted for all motions in that discussion (that way people can see what new stuff they should look at, or if a new motion comes up in an old discussion they will be able to tell).

add "reopen motion" button

makes the process for a motion a bit more like a loop, and allows for correcting mistakes that might have been made. otherwise, the user has to make a new motion.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.