---
# System prepended metadata

title: "\U0001F3DB️ Firefly Governance - Product Design Specification"
tags: [firefly, governance, document, iota]

---

# 🏛️ Firefly Governance - Product Design Specification
###### date: 10/24/2022
###### tags: `iota` `firefly` `governance` `document`

## Definitions

- Cast - To vote with one's funds for a particular event
- Event - A participation event where users can vote (or stake) their funds
- Register - To add an event or proposal to the Governance dashboard in Firefly

## Overview

An interesting capability afforded by the IOTA protocol and Hornet node plugin is the ability to participate in Governance votes for the ecosystem. 

Originally, this feature supported only official votes which had a number of negative outcomes, namely requiring manual app updates for new votes, only supporting a single vote at a time, and not supporting custom events. This time, the feature will be a dynamic system that registers proposals (read: adds them to your dashboard) and lets the user vote with their funds for particular answers of any given proposal.

## Requirements

### Business

As a business, we want to...

| **ID** | **Requirement** | **MoSCoW** |
|:-:|-|:-:|
PR1 | Support voting for community Governance proposals | M |
PR2 | Provide users with a space to view proposals and manage votes | M |

### User

As a user, I want to...

| **ID** | **Requirement** | **MoSCoW** |
|:-:|-|:-:|
UR01 | Vote with my funds for **official** proposals | M |
UR02 | Vote with my funds for **non-official** proposals | M |
UR03 | Re-vote for proposals with differing answers | M |
UR04 | View my answer history for a proposal | C |
UR05 | Vote / unvote at any time so long as it makes sense given the state of a voting event | M |
UR06 | Modify my voting power (i.e. add / remove funds) | M |
UR07 | View all proposals on the dashboard | M |
UR08 | Search proposals on the dashboard by name | M |
UR09 | Search proposals on the dashboard by event ID | M |
UR10 | Search proposals on the dashboard by proposal ID | M |
UR11 | Filter proposals on the dashboard by event state (e.g. pre-voting, counting) | M |
UR12 | Filter proposals on the dashboard by account state | M |
UR13 | Filter proposals on the dashboard by node URL | M |
UR14 | Filter proposals on the dashboard by group (user-made and managed) | C |
UR15 | View my voting weight | M |
UR16 | View my counted votes for a proposal | M |
UR17 | View my voting weight history for a proposal | C |
UR18 | View which events are official vs non-official | C |
UR19 | View the node that a proposal is associated with | M |
UR20 | Edit the node that a proposal is associated with | S |
UR21 | View events for any node we are connected to | S |
UR22 | Register proposals from external sources (e.g. website) | M |
UR23 | Only have to register voting events **once per profile** | M |
UR24 | Remove specific proposals from the dashboard | M |
UR25 | Manually add a proposal by providing an event ID and node URL | M |
UR26 | View the timeline of the event and its different states | M |
UR27 | View the realtime (or poll every 30 seconds?) results for the different answers of a ballot's questions | S |
UR28 | View my Governance activities | M | 
UR29 | Find more info about a proposal (likely from URL) | M |
UR30 | Know when a proposal becomes available or changes status | S |
UR31 | Restore a profile that contains potentially upcoming, active, or ended votes | M |
UR32 | Vote with the same seed / account on different devices, profiles, applications, etc. | S |

### Functional

...

### Non-Functional

:::warning
The values below are somewhat arbitrary.
:::

- The vote should be updated every 30 seconds
- The app should support up to 256 events 
- The load time of a proposal should be < 5 seconds

## Design

Please see the [Figma design](https://www.figma.com/file/8KNJoaiiNIy1tunvQZ2auW/Governance-tab-%5BWIP%5D?node-id=641%3A18830).

## Questions

- **Do we want to display voting power or voting balance?** What makes more sense for the user?
