A governance timeline defines the sequence and duration of events for a proposal, from ideation to execution. The standard phases are: Pre-voting Discussion, Voting Period, Timelock Delay, and Execution. Each phase serves a distinct purpose. The discussion period allows for community feedback and proposal refinement. The voting period is when token holders cast their votes. A timelock delay provides a safety buffer between a vote passing and its execution, allowing users to react to malicious proposals. Finally, execution is when the approved code changes are enacted on-chain.
How to Design Governance Voting Timelines
How to Design Governance Voting Timelines
A well-structured voting timeline is critical for secure, inclusive, and effective decentralized governance. This guide outlines the key phases and practical considerations for designing one.
Determining the length of each phase requires balancing security, participation, and agility. A voting period that is too short (e.g., 24 hours) risks low voter turnout and centralization, favoring large, alert holders. One that is too long (e.g., 2 weeks) can stall protocol development. For many DAOs, a 3-7 day voting window is a common compromise. The timelock delay is a critical security parameter; Compound and Uniswap use 2-day delays, giving users time to exit if a malicious proposal passes. This delay should be proportional to the proposal's risk level.
Technical implementation varies by platform. On Compound Governor Alpha, you configure votingDelay, votingPeriod, and timelock.delay in the constructor. For example, votingDelay: 1 (1 block), votingPeriod: 17280 (~3 days in 13.2-second blocks), timelock.delay: 172800 (~2 days). OpenZeppelin's Governor contract provides similar modular parameters. Always use on-chain, immutable timers rather than relying on admin multisigs to enforce deadlines, as this ensures predictability and censorship resistance.
Advanced designs incorporate snapshot voting for gas-free sentiment checks before an on-chain proposal, creating a two-phase process. Some protocols also implement a challenge period or grace period after the timelock, where a guardian or a secondary vote can veto execution in emergencies. When designing your timeline, audit the entire user journey: can a community member realistically discover, understand, debate, and vote on a proposal within the allotted time? Test timelines with low-stakes proposals before locking them in for major protocol upgrades.
How to Design Governance Voting Timelines
Before designing a governance timeline, you need to understand the core components of a DAO's decision-making process and the trade-offs involved in structuring voting periods.
Effective governance timelines are a critical component of any decentralized autonomous organization (DAO). They define the sequence and duration of events from proposal submission to execution, directly impacting voter participation, security, and the speed of decision-making. A well-designed timeline balances the need for thorough deliberation with the operational agility required to respond to market conditions. Key phases typically include a pre-voting discussion period, an active voting window, a time-lock or delay period, and finally execution. Each phase serves a distinct purpose in the governance lifecycle.
The first phase, the pre-voting discussion period (or "temperature check"), is an informal stage where a proposal is shared with the community for initial feedback. This period, which can last 2-7 days on platforms like Snapshot, allows for debate, refinement of the proposal's specifics, and the building of social consensus before a formal, on-chain vote is initiated. It acts as a filter, preventing poorly conceived or unpopular ideas from consuming the DAO's resources and voter attention in a binding vote. Skipping this phase can lead to contentious votes and low participation.
The core of the process is the active voting window. This is the fixed period, often 3-7 days, during which token holders cast their binding votes. The length is a primary lever for manipulating voter turnout. A longer window (e.g., 7 days) increases the likelihood of participation from global communities across time zones but slows down governance. A shorter window (e.g., 72 hours) enables faster decisions but risks excluding less active voters. Major protocols like Uniswap and Aave use multi-day voting periods to ensure broad participation for significant treasury or parameter changes.
Following a successful vote, a time-lock or delay period is a crucial security feature. This is a mandatory waiting period, often 24-48 hours, between a vote passing and its execution on-chain. This "cooling-off" period provides a final safeguard, allowing users to review the executed code of the proposal and, if a critical vulnerability or malicious intent is discovered, to exit the system (e.g., withdraw funds) before the changes take effect. This design pattern is a best practice for mitigating governance attack vectors, such as a malicious proposal that transfers treasury assets.
When designing your timeline, you must also account for proposal queuing and execution. Some systems process proposals sequentially, where one must fully execute before the next can begin its voting period. Others allow for overlapping discussion periods but sequential voting. The choice affects governance throughput. Furthermore, consider integrating off-chain signaling via Snapshot for non-binding polls before costly on-chain votes. Your final timeline should be documented clearly in the DAO's governance framework or charter, specifying exact durations for each phase to set clear community expectations.
Core Phases of a Voting Timeline
A well-structured voting timeline is the backbone of effective on-chain governance, ensuring proposals are debated, executed, and archived systematically.
A standard on-chain governance timeline is segmented into distinct, sequential phases, each with a specific purpose and duration. The most common structure includes a pre-voting period, a voting period, a time-lock or grace period, and an execution phase. This phased approach prevents rushed decisions, allows for community deliberation, and provides a safety mechanism against malicious proposals. Protocols like Compound and Uniswap popularized this model, which has become a de facto standard for DAOs and DeFi projects.
The pre-voting period (or "temperature check") is the initial discussion phase. A proposal is posted on a forum like Discourse or Commonwealth, allowing token holders to debate its merits, suggest amendments, and gauge sentiment without committing on-chain resources. This phase filters out poorly conceived ideas and refines viable ones. For example, a proposal to adjust a protocol's fee structure would undergo technical and economic analysis here, with the proposer incorporating feedback before submitting a final version for a formal vote.
Following discussion, the formal voting period begins, typically lasting 3-7 days. During this phase, token holders cast their votes on-chain using their governance tokens, with weight often proportional to their stake. Voting mechanisms can include simple majority, quadratic voting, or conviction voting. The specific quorum (minimum participation) and supermajority (e.g., 66% or 75% for) thresholds are defined in the governance contract and must be met for a proposal to pass. This phase records the immutable, on-chain decision of the community.
After a successful vote, a time-lock or grace period is critical for security. This delay, often 2-3 days, prevents immediate execution of the proposal's code. It acts as a final safeguard, giving users time to react—such as exiting a protocol—if they disagree with the outcome or if a critical vulnerability is discovered in the proposal's implementation. The Compound Governor Bravo contract enforces a mandatory 2-day timelock on all passed proposals before they can be queued for execution.
The final phase is proposal execution. Once the timelock expires, any address (usually the proposer or a designated "executor") can call the execute function on the governance contract. This transaction triggers the encoded actions, such as upgrading a contract or transferring treasury funds. If execution fails or isn't called within a set deadline, the proposal expires. Successful execution concludes the timeline, and the changes are live on-chain. This entire lifecycle, from forum post to on-chain change, typically spans 1-2 weeks, balancing efficiency with thorough deliberation.
Phase Details and Implementation
A well-structured voting timeline is critical for secure, efficient, and inclusive governance. This section details the key phases and practical steps for implementation.
Proposal Creation & Drafting
The initial phase where a governance idea is formalized. This involves drafting a clear proposal document that includes:
- Technical specifications or smart contract code (e.g., for parameter changes).
- A comprehensive impact analysis on treasury, tokenomics, and protocol security.
- A formal submission template as required by the governance framework (e.g., Snapshot, Tally).
Best practice is to host draft proposals in a forum (like Commonwealth or Discourse) for community feedback before on-chain submission.
Temperature Check & Discussion
A low-stakes, off-chain voting period to gauge community sentiment before committing on-chain resources.
- Typically lasts 3-7 days on platforms like Snapshot.
- Uses a simple "For/Against/Abstain" format.
- The goal is to identify major objections, refine the proposal, and build consensus.
A failed temperature check often indicates the proposal needs significant revision before proceeding, saving gas fees and governance overhead.
On-Chain Voting & Execution
The binding, on-chain phase where token holders cast votes that directly trigger execution.
- Voting periods typically range from 3 to 7 days (e.g., Compound uses 3 days, Uniswap uses 7).
- Requires a quorum (minimum participation) and a passing threshold (e.g., 4% quorum, 50% majority).
- Votes are weighted by token balance, often with delegation (like in OpenZeppelin Governor).
After successful voting, proposals often enter a Timelock period (e.g., 2 days) before execution, allowing users to react to malicious proposals.
Timelock & Security Delay
A mandatory waiting period between a vote passing and its execution. This is a critical security mechanism.
- Duration: Ranges from 24 hours to 14 days, with 2-3 days being common (e.g., Uniswap uses 2 days).
- Purpose: Allows users to exit systems or prepare for changes if a malicious proposal passes.
- Implementation: Managed by a Timelock Controller contract (like OpenZeppelin's) that queues and executes proposals.
This phase is non-negotiable for protocols managing significant value, as it prevents instant governance attacks.
Implementation & Post-Mortem
The final phase where the approved change is executed and its effects are analyzed.
- Automated Execution: The Timelock contract automatically executes the calldata on the target contract.
- Monitoring: Teams track key metrics (TVL, volume, user count) to assess the change's impact.
- Retrospective: A public post-mortem report should be published, analyzing voter turnout, debate quality, and outcome effectiveness to improve future governance cycles.
This closes the feedback loop and is essential for iterative protocol improvement.
Governance Timeline Parameters: Protocol Comparison
Comparison of key voting and execution timing parameters across major DAO frameworks.
| Parameter | Compound Governance | Uniswap Governance | Aave Governance | Arbitrum DAO |
|---|---|---|---|---|
Proposal Submission Threshold | 65,000 COMP | 10,000,000 UNI | 80,000 AAVE | 1,000,000 ARB |
Voting Delay (Queue Time) | ~2 days | ~2 days | ~1 day | ~1 day |
Active Voting Period | 3 days | 7 days | 5 days | ~8 days |
Time Lock / Execution Delay | 2 days | ~2 days | ~1 day | ~3 days |
Quorum Requirement | 400,000 COMP | 40,000,000 UNI | Varies by type | ~2% of supply |
Proposal Execution Window | ~3 days | ~8 days | ~7 days | ~14 days |
Emergency Proposal Support | ||||
Delegated Voting |
How to Design Governance Voting Timelines in Solidity
A practical guide to implementing secure and effective voting periods, delays, and execution windows for on-chain governance.
Governance voting timelines are critical for protocol security and user participation. A well-designed system typically includes three core phases: a voting period where token holders cast votes, a timelock delay for community review, and an execution window for proposal enactment. These phases prevent rash decisions, mitigate governance attacks like flash loan voting, and ensure sufficient time for off-chain coordination. In Solidity, these are implemented as state variables—votingDelay, votingPeriod, and timelock—often defined in a constructor or via initialization functions.
The voting period must be long enough to ensure broad participation but short enough to enable agile governance. For major DAOs like Compound or Uniswap, this period typically ranges from 3 to 7 days. In your contract, you would track this using block numbers or timestamps. A common pattern is to store a Proposal struct with uint256 startBlock and uint256 endBlock. The core logic checks block.number >= proposal.startBlock && block.number <= proposal.endBlock to determine if voting is active. Using block numbers is more predictable than timestamps, as it's immune to miner manipulation of time.
After a vote succeeds, a timelock delay is essential. This is a mandatory waiting period before the proposal's actions can be executed. It acts as a safety circuit-breaker, allowing users to exit the system if they disagree with a passed proposal. Implement this by having an execute function that requires block.timestamp >= proposal.eta, where eta (estimated time of arrival) is set to block.timestamp + timelockDelay upon proposal creation. Prominent protocols like MakerDAO use delays of 24-72 hours. This delay should be adjustable via governance itself to allow for parameter optimization.
Finally, define an execution window. A proposal should not be executable indefinitely after it passes; it should expire. This prevents stale proposals from being executed much later when context has changed. Add an expiration timestamp to your Proposal struct, set to proposal.eta + executionWindow. The execute function must then also require block.timestamp <= proposal.expiration. A typical window is 2-4 weeks. This cleanup mechanism is crucial for maintaining a healthy state and preventing gas waste on checking old, invalid proposals.
Here is a simplified code snippet illustrating these concepts in a Governor contract:
soliditycontract Governor { uint256 public votingPeriod; // e.g., 45818 blocks (~7 days) uint256 public timelockDelay; // e.g., 172800 seconds (2 days) uint256 public executionWindow; // e.g., 2419200 seconds (4 weeks) struct Proposal { uint256 id; uint256 startBlock; uint256 endBlock; uint256 eta; uint256 expiration; bool executed; } mapping(uint256 => Proposal) public proposals; function propose() external returns (uint256) { uint256 proposalId = nextProposalId++; Proposal storage p = proposals[proposalId]; p.startBlock = block.number; p.endBlock = block.number + votingPeriod; // eta and expiration are set later if vote passes } function queue(uint256 proposalId) external { require(block.number > proposals[proposalId].endBlock, "vote active"); require(voteSucceeded(proposalId), "vote failed"); proposals[proposalId].eta = block.timestamp + timelockDelay; proposals[proposalId].expiration = proposals[proposalId].eta + executionWindow; } function execute(uint256 proposalId) external { Proposal storage p = proposals[proposalId]; require(block.timestamp >= p.eta, "timelock not met"); require(block.timestamp <= p.expiration, "proposal expired"); require(!p.executed, "already executed"); // ... execute logic ... p.executed = true; } }
When deploying, carefully calibrate these parameters based on your token distribution and security model. For a new protocol, consider starting with conservative values (e.g., a 7-day voting period and 3-day timelock) and gradually optimizing them through governance proposals. Always emit clear events for state changes like ProposalCreated, ProposalQueued, and ProposalExecuted. For production use, audit and fork existing, battle-tested implementations like OpenZeppelin's Governor contracts, which abstract these patterns and provide modular hooks for customization.
Security Considerations and Trade-offs
Designing secure and effective governance voting timelines requires balancing decentralization, security, and efficiency. This guide addresses common developer questions about the trade-offs involved.
Voting duration directly impacts a protocol's defense against short-term attacks and the quality of voter participation. A longer voting period (e.g., 5-7 days) increases security by:
- Mitigating flash loan attacks: Attackers cannot cheaply borrow capital to pass a malicious proposal within a single block.
- Enabling broader participation: Allows global token holders across time zones to review and vote, increasing decentralization.
- Facilitating thorough discussion: Gives the community time to audit proposal code and debate implications.
However, excessively long durations (e.g., 30 days) can lead to voter apathy and slow protocol evolution. The trade-off is between attack resistance and operational agility. Protocols like Compound use a 3-day voting period, while Uniswap employs a 7-day timeline for major upgrades.
Timeline Parameter Trade-offs
Comparison of common time windows for governance voting phases and their impact on participation, security, and efficiency.
| Parameter / Impact | Short (1-2 Days) | Standard (3-7 Days) | Extended (7+ Days) |
|---|---|---|---|
Voter Participation | Low | Medium | High |
Whale Influence Risk | High | Medium | Low |
Proposal Throughput | High | Medium | Low |
Time for Deliberation | Low | Medium | High |
Snapshot Front-Running Risk | High | Medium | Low |
Gas Cost for Voters | Low | Medium | High |
Emergency Response Capability | |||
Typical Quorum Requirement |
| 5-20% | < 5% |
Resources and Further Reading
These resources provide concrete frameworks, tooling references, and real-world examples for designing governance voting timelines. Each card focuses on a specific layer of the lifecycle from proposal creation to execution.
Frequently Asked Questions
Common technical questions and solutions for designing effective on-chain governance voting timelines and parameters.
Voting delay and voting period are distinct timelocks that serve different purposes in a governance lifecycle.
The voting delay is the time between when a proposal is submitted and when voting begins. This is a critical cooling-off period that allows token holders to review the proposal details before casting votes. A typical delay is 1-3 days, as seen in protocols like Compound and Uniswap.
The voting period is the duration for which votes can be cast once voting has started. This window must be long enough to ensure sufficient voter participation. Most major DAOs use a period of 3-7 days. For example, Uniswap's governance uses a 7-day voting period.
Setting these correctly balances security (via review time) with efficiency (avoiding unnecessary delays).
Conclusion and Next Steps
Designing effective governance timelines requires balancing security, participation, and execution speed. This guide has covered the core components. Here are the final considerations and resources to proceed.
A well-designed governance timeline is a security feature. The sequence of a discussion period, voting period, and timelock execution creates deliberate friction to prevent hasty or malicious proposals. Key metrics to monitor include voter participation rate, delegation activity, and the proposal success rate. Tools like Tally, Snapshot, and OpenZeppelin Defender provide analytics and automation to manage this lifecycle. Always reference the specific parameters of your chosen framework, such as Compound Governor Bravo's votingDelay and votingPeriod, or OpenZeppelin's TimelockController.
Your next step is to test the system end-to-end on a testnet. Deploy your governance contracts (e.g., using @openzeppelin/contracts) and simulate the full proposal flow. Use a script to: 1) create a proposal via propose(), 2) advance blockchain time to simulate the voting delay and period, 3) cast votes using different member addresses, 4) queue the successful proposal on the timelock, and 5) finally execute it. This reveals practical issues like gas costs and front-end integration points that aren't apparent in design.
For further learning, explore real-world implementations. Study the governance documentation and contract addresses for major DAOs like Uniswap, Aave, and Compound. The OpenZeppelin Governance Guide is an essential technical reference. To engage with the community, consider governance forums like the Uniswap Governance Forum or Aave Governance to observe live proposal dynamics. The goal is to move from theoretical design to a robust, battle-tested system that aligns your community's incentives with secure protocol evolution.