---
# System prepended metadata

title: Architecture Course

---

# Architecture Course 

## Voting in a small informal group
**Use case:** A local community group (e.g. neighborhood association, local cooperative, etc.) needs to pass a couple resolutions and have a clear tally of votes by the end of the week. All members of the app are all able to vote so you'll want to restrict membership to community members.

 Scale: less than 500 people
 Time: Deadline vote by end of week
 Secrecy: Vote content does not need to be hidden
 
 - How will you keep external people from voting
 - How will you count all the votes to get final tallies in an eventually consistent system?

**Note:** The focus here is on voting, not identity. We'll get to identity management later.
 
## #2: Voting in a National Election?
A nation wants its election to achieve new levels of transparency and accountability for people to have confidence in the integrity of the election process.
Functional requirements:
 - Only approved voters can vote
 - People can check that their vote was cast/counted
 - External parties can audit the election
 - You cannot see who voted for what

 Scale: many millions of people
 Time: Deadline votes cast on election day
 Secrecy: Votes are anonymous (you cannot see who voted for what). 
 
 - How can you make sure only valid voters can vote?
 - How do ensure each person can only vote once?
 - How do you tally all the results on an eventually consistent system?

