Skip to content

Create unified Bitcoin design principles page #144

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 100 commits into from
Mar 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
c0a5081
Create new principles folder and page
danielnordh Feb 12, 2021
18a7cbd
Update nav order of other top level pages
danielnordh Feb 12, 2021
c0b32c9
Internal page links, styling
danielnordh Feb 12, 2021
4744f22
Links, tweaks.
danielnordh Feb 12, 2021
e740e97
Delete principles page in PK chapter, clean up in PK chapter
danielnordh Feb 12, 2021
3ad7884
Remove Principles from PK chapter in Readme content list
danielnordh Feb 12, 2021
2a6caba
Add link to page from Readme content list
danielnordh Feb 12, 2021
60adf0b
Clean up use of principles word in Foundations description
danielnordh Feb 12, 2021
75387b3
Tweak sentence after feedback.
danielnordh Feb 12, 2021
9d4f8a9
Remove Principles section from Onboarding chapter intro page cc: @Con…
danielnordh Feb 12, 2021
17d7b45
Update page name to 'Bitcoin design principles'
danielnordh Feb 12, 2021
136f927
Styling
danielnordh Feb 12, 2021
c2ffe73
Link tweaks
danielnordh Feb 12, 2021
3b98813
Better sentences about decentralization and why an open financial sys…
danielnordh Feb 19, 2021
fdc0b4a
Update permalink
danielnordh Feb 19, 2021
7a7d5c2
Expand to mention other external services
danielnordh Feb 19, 2021
6fbc9ac
Add decentralization 'don't' for products that stop working if projec…
danielnordh Feb 19, 2021
57eaa26
Better wording
danielnordh Feb 19, 2021
6157b9f
Better wording
danielnordh Feb 19, 2021
c3c3910
Spelling
danielnordh Feb 19, 2021
264f896
Better wording
danielnordh Feb 19, 2021
f229e29
Better wording
danielnordh Feb 19, 2021
f29f2d7
Better wording
danielnordh Feb 19, 2021
6d5b928
Add link to glossary
danielnordh Feb 19, 2021
e2f8a80
Add link
danielnordh Feb 19, 2021
304bc12
Only link from [private keys]
danielnordh Feb 19, 2021
5e3906d
Tone down prediction.
danielnordh Feb 19, 2021
20d9515
Better wording
danielnordh Feb 19, 2021
256e0ae
Better wording
danielnordh Feb 19, 2021
0f557c7
Change back to 'Principles' in nav bar.
danielnordh Feb 19, 2021
6bf33a0
Add to Transparency 'Do's'
danielnordh Feb 19, 2021
7b8e2f3
Add sentence about the feeling of security.
danielnordh Feb 19, 2021
62d7a7a
Explain that the principles have ben identified by the Bitcoin design…
danielnordh Feb 19, 2021
df4d515
Reorganize 'one sentence' explainer for each principle. (Previously i…
danielnordh Feb 19, 2021
981f57c
Spelling
danielnordh Feb 19, 2021
8935f89
Tweaks to blockquotes
danielnordh Feb 19, 2021
f9bb124
Fix broken links.
danielnordh Feb 19, 2021
56488e0
Fix links, again
danielnordh Feb 19, 2021
9f2633e
Capital B
danielnordh Feb 19, 2021
8195bd2
Add Do about minimizing external code dependency
danielnordh Feb 19, 2021
38f21a8
Fix link
danielnordh Mar 5, 2021
032576d
Formatting
danielnordh Mar 5, 2021
9cefa33
Language
danielnordh Mar 5, 2021
0a90236
Cut duplicate
danielnordh Mar 5, 2021
edfcdda
Wording
danielnordh Mar 5, 2021
17035b9
Update guide/principles/principles.md
danielnordh Mar 12, 2021
fd349e1
Fix conflict with master in guide.md
danielnordh Mar 12, 2021
2817605
Fix conflicts with master in glossary.md
danielnordh Mar 12, 2021
012ecf3
Address maker, soften wording around running a node
danielnordh Mar 12, 2021
7e73385
Add Do around 'path to self custody'
danielnordh Mar 12, 2021
47bbe4c
Tweak Transparency pull-quote
danielnordh Mar 12, 2021
bbd6299
Shorten Security section
danielnordh Mar 12, 2021
ad37011
Update order or principles
danielnordh Mar 12, 2021
f885b19
Simplified wording
danielnordh Mar 12, 2021
661e72f
Simplify wording
danielnordh Mar 12, 2021
082816b
Simplify wording
danielnordh Mar 12, 2021
7cfbcba
Link to Onboarding
danielnordh Mar 12, 2021
7d0ef6e
Tweak privacy example.
danielnordh Mar 12, 2021
99a16a0
Remove political
danielnordh Mar 12, 2021
dce37ff
Move Principles page into Foundation
danielnordh Mar 12, 2021
0382cdb
Include blurb and link to Principles from Foundations/introduction page
danielnordh Mar 12, 2021
4463094
Move principle images to foundation folder
danielnordh Mar 12, 2021
c6355c9
Add header image to Principles page, move remaining images
danielnordh Mar 12, 2021
50c8752
Fix URL typo
danielnordh Mar 12, 2021
9186aaa
Format, line break
danielnordh Mar 12, 2021
09a0992
Update introduction.md
pavlenex Mar 15, 2021
3d421ac
Create principles.md
pavlenex Mar 15, 2021
aab900e
Merge remote-tracking branch 'upstream/master' into feature/principles
pavlenex Mar 15, 2021
952ee7d
Revert "Create principles.md"
pavlenex Mar 15, 2021
1dea556
Revert "Update introduction.md"
pavlenex Mar 15, 2021
d6f8b53
Move principles.md into foundations folder
danielnordh Mar 19, 2021
25315aa
Grammar
danielnordh Mar 19, 2021
f4bd573
Better alt text
danielnordh Mar 19, 2021
2b53904
Expand explanation.
danielnordh Mar 19, 2021
0b078aa
Extraneous word
danielnordh Mar 19, 2021
9f9b35a
Merge branch 'feature/principles' of https://github.com/BitcoinDesign…
danielnordh Mar 19, 2021
58b4940
Wording
danielnordh Mar 19, 2021
1a2ca12
Spelling
danielnordh Mar 19, 2021
672f50b
Spelling
danielnordh Mar 19, 2021
26f3ff9
Grammar
danielnordh Mar 19, 2021
7328c47
Grammar
danielnordh Mar 19, 2021
0a4abc2
Wording
danielnordh Mar 19, 2021
9c1f1a9
Missing word
danielnordh Mar 19, 2021
c5e0a14
Add divider line
danielnordh Mar 19, 2021
3851ffd
Merge branch 'feature/principles' of https://github.com/BitcoinDesign…
danielnordh Mar 19, 2021
a1fff44
Clarify self custody wording
danielnordh Mar 19, 2021
6634e7b
Further clarification to self custody
danielnordh Mar 19, 2021
e3c74d9
Improve Security text
danielnordh Mar 19, 2021
58b8268
Improve transparency text
danielnordh Mar 19, 2021
e5a8fae
grammar
danielnordh Mar 19, 2021
e74baba
Accept wording change
danielnordh Mar 24, 2021
1e9a95e
Accept suggested wording
danielnordh Mar 24, 2021
e963a06
Accept suggested wording
danielnordh Mar 24, 2021
0a81aa1
Accept suggest wording
danielnordh Mar 24, 2021
faa0b95
Accept suggested wording
danielnordh Mar 24, 2021
8eb2634
Accept suggested wording
danielnordh Mar 24, 2021
ab9cfbe
Accept suggested wording
danielnordh Mar 24, 2021
c632a21
Accept suggested wording
danielnordh Mar 24, 2021
9ee560b
Accept suggested wording
danielnordh Mar 24, 2021
971df46
Accept suggested wording
danielnordh Mar 24, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Here is an initial outline that will be updated as needed, content that is live
* Technology primer
* Software overview
* Hardware overview
* Bitcoin design principles (to be discussed)
* [Bitcoin design principles](https://bitcoin.design/guide/principles/principles/)
* Decentralization
* Self-sovereignty
* Security
Expand All @@ -51,7 +51,6 @@ Here is an initial outline that will be updated as needed, content that is live
* Private key schemes
* Personal schemes
* Shared schemes
* Principles
* Case studies
* Payments and transactions - [Discussion about WIP](https://github.com/BitcoinDesign/Guide/discussions/98)
* Transactions overview
Expand Down
2 changes: 1 addition & 1 deletion guide/contribute/contribute.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
layout: guide
title: Contribute to guide
description: Additional material for both readers and writers of the guide.
nav_order: 9
nav_order: 8
has_children: true
permalink: /guide/contribute/
image: /assets/images/guide/contribute/contribute-preview.jpg
Expand Down
8 changes: 7 additions & 1 deletion guide/foundations/foundations.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,13 @@ image: /assets/images/guide/foundations/foundations-preview.jpg

# Foundations

Learn about some of the basic principles to keep in mind when designing Bitcoin applications.
Learn about some of the basics to keep in mind when designing Bitcoin applications.

---

**[Bitcoin design principles]({{ '/guide/foundations/principles/' | relative_url }})**

Principles that the Bitcoin Design Community have identified and stand behind. Although every use case and product is different, applications should strive to follow these principles.

---

Expand Down
182 changes: 182 additions & 0 deletions guide/foundations/principles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
---
layout: guide
title: Principles
description: The key principles to follow when designing Bitcoin products.
nav_order: 9
parent: Foundations
permalink: /guide/foundations/principles/
main_classes: -no-top-padding
image: /assets/images/guide/foundations/principles/page-principles.jpg
---

<!--

Editor's notes

The key principles of designing for Bitcoin

-->

{% include picture.html
image = "/assets/images/guide/foundations/principles/principles.jpg"
retina = "/assets/images/guide/foundations/principles/principles@2x.jpg"
mobile = "/assets/images/guide/foundations/principles/principles-mobile.jpg"
mobileRetina = "/assets/images/foundations/principles/principles-mobile@2x.jpg"
alt-text = "Principles header illustration, five white circles in a horizontal line on black background"
width = 1600
height = 600
layout = "full-width"
%}

# Bitcoin design principles

As a new technology, Bitcoin offers the opportunity of a decentralized open financial system, where participants share the role of securing the network. This is important to give everyone equal and direct access to economic opportunities without fearing seizure or needing intermediaries. To make this a reality, we encourage everyone working on products to deliberately support the core principles of designing for Bitcoin.

These are principles we in the Bitcoin Design Community identified and stand behind. Some of these come from the technology itself and others from the community's behavior and ethos. Although every use case and product is different, applications should strive to follow these principles. Diverging from them should only be done with very good reason.


- [Self-custody](#self-custody)
- [Security](#security)
- [Inclusion](#inclusion)
- [Interoperability](#interoperability)
- [Transparency](#transparency)
- [Privacy](#privacy)
- [Decentralization](#decentralization)

---

## Self-custody

> Let users control their private keys, with no risk for seizure or freezing of funds

Our existing mental models of access to digital services are usernames and passwords controlled by a company with custody of your funds and data. With everyone having direct access to the Bitcoin network, we no longer need to design products that require people to delegate control of their funds to middlemen. While it comes with greater responsibility, self-custody enables the open financial system of peer-to-peer transactions.

**Do**
- Let users control their bitcoin and private keys directly
- Create an easy path to self-custody for Bitcoin beginners

**Don't**
- Custody funds for your users
- Build products where the users' funds can be seized, or frozen

---

## Security

> Provide appropriate and progressive security for all types of users

Self-custody often leaves the end-user responsible for the security of their private keys. They can only do a good job of that if we provide them with appropriate tools and awareness of best practices.

Security is especially important when onboarding people new to Bitcoin. For example, new users are likely to start by only storing small amounts. After a while, however, they may get more comfortable with the idea of self-custody. The concept of progressive security is a good idea here, starting with automatic cloud backups. This would let a user upgrade their security and private key management scheme as their savings grow. Although common, recovery phrases that require manual backup might backfire for new users not yet familiar with safe backup practices.

Education and awareness are a big part of security, as they can protect users from bad actors and potentially their own security mistakes. It is unrealistic to expect beginners to take in all the knowledge acquired by advanced users in one go, for example, while [onboarding]({{ '/guide/onboarding/introduction/' | relative_url }}) to a Bitcoin product. We should therefore consider how to continuously educate and level up user awareness of best practices and risks.

Security can also be a feeling. A polished, good-looking, easy-to-use product that transparently communicates how it works can help users feel more secure– especially when compared to another product with the same security measures - but lacks these qualities.


**Do**
- Take safeguarding of users' funds seriously
- Strive for no loss of funds, whether by negligence or theft
- Provide suitable private key management schemes for beginners
- Offer progressive security and upgrade paths
- Build with bad actors in mind
- Minimize risk of self-inflicted loss from user negligence
- Continuously educate users on best practice and risks
- Reduce attack surfaces by minimizing use of external code dependencies

**Don't**
- Blame the user for losing funds
- Expect beginners to implement best practice backup strategies
- Underestimate the added *feeling* of security that can come from well polished products
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Underestimate the added *feeling* of security that can come from well polished products
- Underestimate the added *feeling* of security that can come from well-polished products


---

## Inclusion

> Build borderless products without location, language or social barriers

There are no background checks, credit checks, or gatekeepers to Bitcoin. A Kenyan farmer has the same access to Bitcoin as a Wall Street trader.

While Bitcoin is already used by a large number of people, it pales in comparison with the many more that are likely to use it in the future. We need to design products that are prepared for people unfamiliar with Bitcoin. This means using plain and familiar language, explaining things in the context where they are needed, not overwhelming people with technical detail, and more.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personal preference makes content a bit more active in terms of tense.

Suggested change
While Bitcoin is already used by a large number of people, it pales in comparison with the many more that are likely to use it in the future. We need to design products that are prepared for people unfamiliar with Bitcoin. This means using plain and familiar language, explaining things in the context where they are needed, not overwhelming people with technical detail, and more.
While many people already use Bitcoin, it pales in comparison with the many more that are likely to use it in the future. We need to design products that are prepared for people unfamiliar with Bitcoin. This means using plain and familiar language, explaining things in the context where they are required, not overwhelming people with technical detail, and more.


**Do**
- Provide equal and direct access to the Bitcoin network
- Design Bitcoin products that are usable by the widest range of people possible
- Use plain language that people new to Bitcoin can understand regardless of prior knowledge
- Localize your product and make it multilingual
- Educate in place, when people are presented with a new concept
- Treat users who rely on assistive technologies as first-class citizens

**Don't**
- Exclude people by building features that only work in certain countries
- Add technical detail that is not required knowledge, or technical terms like seed phrase, XPUBs, mnemonics etc.
- Put all education up front and expect people to read and remember it

---

## Interoperability

> Enable import and export of wallets, maximise backwards compatibility and use of open standards

Bitcoin is an open-source protocol, operating in a decentralized manner. This has led to a number of standards being developed to ensure compatibility between products. It should be easy to switch and move your Bitcoin wallet to a different application, should you wish. Ensuring that your product supports as many of these standards as possible is best practice and builds trust. More on [wallet interoperability]({{ '/guide/foundations/wallet-interoperability/' | relative_url }}).

**Do**
- Support import and export of wallets
- Support as many relevant BIPs as possible
- Be transparent with which ones you do and don’t support
- Maximize backwards compatibility

**Don't**
- Lock your users in
- Implement proprietary solutions when open standards exist

---

## Transparency

> Be open and transparent with how your product works, open-source your code when possible

While an open and decentralized financial system that users can connect with directly is great, it puts a burden on them to choose a product that they trust and like to use. We can make this easier by freely sharing information about how our products work and what technologies they use/rely on. By open-sourcing your code, you can let people verify that your claims are true, ultimately building more trust with your users. It is important to be transparent with users about the risks that come with self-custodying funds. Be sure to educate about scenarios where they may risk losing access to their funds along with best practices for avoiding this.

**Do**
- Be open and transparent with how your product works
- Let people verify your claims by open-sourcing your code when possible
- Explain what risks the user is taking on, and how best to mitigate them

**Don't**
- Make claims that are not explained or verifiable

---

## Privacy

> Minimize collection of personal information, and maximize financial transaction privacy

A common misconception of Bitcoin is that it provides complete anonymity and privacy of transactions. Since the blockchain is an unchangeable ledger of all transactions ever made, it is very hard not to have your complete transaction history visible once even a single one of your addresses is connected to you. If Bitcoin is to become viable for a wider audience and daily use, we should take privacy seriously. This is certainly not to enable or encourage illicit activity but to protect individual financial privacy. We would not accept our bank to publish our financial transactions to our Twitter or Facebook feeds, so we should avoid that scenario with Bitcoin.

The Bitcoin network doesn’t need to know your name for you to use it. Strive to collect as little personal information as possible about your users. When absolutely required to provide the product services, collect only the bare minimum and consider if and when this can be discarded when no longer necessary. If you collect personal information, be transparent about why and how you will use and store it.

**Do**
- Minimize the personal information you collect
- Avoid address reuse
- Embrace privacy-preserving options when relevant (running a full node, compact block filters, Tor, Lightning Network, coin selection, schnorr signatures, payjoin, coinswap, etc.)

**Don't**
- Collect and store personal information not required for the functionality of your product

---

## Decentralization

> Design products that encourage people to run a full Bitcoin node

Unlike traditional banking systems, the Bitcoin economy does not require new users to seek permission from anyone. Bitcoin has no central point of control. No one person or entity is in charge. Connecting to any [node]({{ '/guide/glossary/#node' | relative_url }}) on the network gives you the same rights and responsibilities, ensuring no single point of failure.

**Do**
- Design products that encourage people to run a full Bitcoin node
- Alternatively, use a light client with the [p2p network]({{ 'https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki'}}) using [compact block filters]({{ 'https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki'}})
- Offer the user choice of what node and other external services to connect to

**Don't**
- Introduce a single point of failure between the user and the Bitcoin network
- Build products that stop working if the project shuts down
6 changes: 0 additions & 6 deletions guide/onboarding/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,6 @@ Remember: Onboarding should not be a crutch for bad design. Avoid trying to expl

---

**Principles (coming soon)**

Onboarding experiences can look very different depending on your target audience, however, some things should be consistent across Bitcoin products.

---

**Getting to know your users (coming soon)**

This section will give you some tips on how best to understand and develop knowledge about your users.
Expand Down
12 changes: 9 additions & 3 deletions guide/private-key-management/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,17 @@ This chapter is meant to give an overview of private key management schemes, inc

An overview of the most common private key management schemes for bitcoin products, and thoughts on picking a suitable scheme for your target audience and their use case.

---
**[Personal schemes]({{ '/guide/private-key-management/single-user-schemes/' | relative_url }})**

The schemes that are most common for the personal use of one individual.

**[Shared schemes]({{ '/guide/private-key-management/single-user-schemes/' | relative_url }})**

When more than one person wants to share a Bitcoin wallet, multi-key schemes become essential.

**[Principles]({{ '/guide/private-key-management/principles/' | relative_url }})**
**[Case studies]({{ '/guide/private-key-management/case-studies/' | relative_url }})**

Every use case and product is different but there are things that all wallet applications should strive for, and only diverge from with very good reasons.
A look at some hypothetical use case categories and what might be suitable approaches for private key management schemes for each of them.

---

Expand Down
2 changes: 1 addition & 1 deletion guide/private-key-management/multi-user-schemes.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,4 @@ Few tailor-made products exist for shared wallets, but any wallet application th

---

Next up, common [principles]({{ '/guide/private-key-management/principles/' | relative_url }}) we should strive to follow.
OK, let's have a look at some [case studies]({{ '/guide/private-key-management/case-studies/' | relative_url }}).
61 changes: 0 additions & 61 deletions guide/private-key-management/principles.md

This file was deleted.