---
# System prepended metadata

title: hApp Design Guide
tags: [documentation, comms, hApp, usability]

---

# hApp Design Guide
###### tags: `hApp` `documentation` `usability` `comms`

## Why Am I Working On This?
- [ ] Write user stories
- [ ] Sketch UI 
- [ ] Is Holochain the right tool?
    - [ ] Do I want to give my users data autonomy?
    - [ ] Can I live without central data control?
## What Do I Need to Store?
- [ ] What data do I need to store
    - [ ] Private/public entries
    - [ ] Indexing needed?
- [ ] Which anchors/links are needed to find entries?
- [ ] How will I deal with rivolrous data/avoid data collisions?
- [ ] Is a reputation system required?
- [ ] Are we using outside data (via API)?
    - [ ] Does it need to be replicated or can be pulled in real time?
- [ ] Tune performance: Build efficiently/reduce latency
- [ ] Remember data is stored locally (local states)
## Who Can Access Data?
- [ ] Membranes (initial joining of group)
- [ ] Validation rules (any node has to be able to run at any time)
    - [ ] Must be deterministic (anyone doing the validation must get the same result)
- [ ] Rely on native Holochain validation
    - [ ] Structure of entries are valid
    - [ ] Entries are in sequential order
- [ ] Who can perform an action?
    - [ ] CRUD
- [ ] Specific business logic
    - [ ] Consider validation based on timestamps (what was true at a certain point)
    - [ ] Avoid using GETLinks in validation rules
- [ ] How to avoid attack?
    - [ ] What attacks could exist?
- [ ] Capability tokens for local control/private data/function calls
    - [ ] Direct messages (sharing personal chain) needed for privacy
    - [ ] Trusted third parties for validation of private entries?
- [ ] How to deal with bad actors, can they be kicked out?
## How Do I Implement Efficiently?
- [ ] Which DNA's already exist that can help with my project?
    - [ ] e.g. DPKI, Personas
    - [ ] What can I adapt? 
- [ ] What has to be built from scratch?
    - [ ] DNA vs Zome (minimise requirement to upgrade DNA's)
    - [ ] Bridging
- [ ] Define Redundancy factor
    - [ ] Between 5 and 50
- [ ] Putting it all together in a Conductor
## When Can People Use The Service?
- [ ] Alpha test with friendly users
- [ ] Beta release
- [ ] Production release