├── .github ├── funding.yml ├── ISSUE_TEMPLATE │ ├── config.yml │ └── new-link.yaml ├── workflows │ ├── lint.yaml │ ├── labels.yaml │ ├── autolock.yaml │ ├── label-sponsors.yaml │ ├── docs.yaml │ └── autofix.yaml ├── dependabot.yaml ├── pull_request_template.md ├── gitleaks.toml ├── code-of-conduct.md ├── contributing.zh.md └── contributing.md ├── assets ├── billing-cropped.png ├── awesome-billing-header.jpg ├── awesome-billing-header.png ├── awesome-billing-header.xcf └── cloud-software-stack-billing.jpg ├── .lycheeignore ├── license └── readme.md /.github/funding.yml: -------------------------------------------------------------------------------- 1 | --- 2 | github: kdeldycke 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true -------------------------------------------------------------------------------- /assets/billing-cropped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kdeldycke/awesome-billing/HEAD/assets/billing-cropped.png -------------------------------------------------------------------------------- /assets/awesome-billing-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kdeldycke/awesome-billing/HEAD/assets/awesome-billing-header.jpg -------------------------------------------------------------------------------- /assets/awesome-billing-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kdeldycke/awesome-billing/HEAD/assets/awesome-billing-header.png -------------------------------------------------------------------------------- /assets/awesome-billing-header.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kdeldycke/awesome-billing/HEAD/assets/awesome-billing-header.xcf -------------------------------------------------------------------------------- /assets/cloud-software-stack-billing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kdeldycke/awesome-billing/HEAD/assets/cloud-software-stack-billing.jpg -------------------------------------------------------------------------------- /.github/workflows/lint.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Lint 3 | "on": 4 | push: 5 | 6 | jobs: 7 | 8 | lint: 9 | uses: kdeldycke/workflows/.github/workflows/lint.yaml@v4.19.1 -------------------------------------------------------------------------------- /.github/workflows/labels.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Labels 3 | "on": 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | 10 | labels: 11 | uses: kdeldycke/workflows/.github/workflows/labels.yaml@v4.19.1 -------------------------------------------------------------------------------- /.github/workflows/autolock.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Autolock 3 | "on": 4 | schedule: 5 | # Run weekly, every Monday at 8:43. 6 | - cron: "43 8 * * 1" 7 | 8 | jobs: 9 | 10 | autolock: 11 | uses: kdeldycke/workflows/.github/workflows/autolock.yaml@v4.19.1 12 | -------------------------------------------------------------------------------- /.github/workflows/label-sponsors.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Label sponsors 3 | "on": 4 | pull_request: 5 | types: 6 | - opened 7 | issues: 8 | types: 9 | - opened 10 | 11 | jobs: 12 | 13 | label-sponsors: 14 | uses: kdeldycke/workflows/.github/workflows/label-sponsors.yaml@v4.19.1 -------------------------------------------------------------------------------- /.lycheeignore: -------------------------------------------------------------------------------- 1 | # XXX Skip archive.ph and Sci-Hub because they restricts access to crawlers. 2 | archive.ph 3 | sci-hub.st 4 | # XXX Skip HN because of rate-limiting. 5 | # See: https://github.com/lycheeverse/lychee/issues/989#issuecomment-1587208730 6 | # https://github.com/lycheeverse/lychee/pull/1147 7 | ycombinator.com 8 | x.com -------------------------------------------------------------------------------- /.github/workflows/docs.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Docs 3 | "on": 4 | push: 5 | # Only targets main branch to avoid amplification effects of auto-fixing 6 | # the exact same stuff in multiple non-rebased branches. 7 | branches: 8 | - main 9 | 10 | jobs: 11 | 12 | docs: 13 | uses: kdeldycke/workflows/.github/workflows/docs.yaml@v4.19.1 -------------------------------------------------------------------------------- /.github/workflows/autofix.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Autofix 3 | "on": 4 | push: 5 | # Only targets main branch to avoid amplification effects of auto-fixing 6 | # the exact same stuff in multiple non-rebased branches. 7 | branches: 8 | - main 9 | 10 | jobs: 11 | 12 | autofix: 13 | uses: kdeldycke/workflows/.github/workflows/autofix.yaml@v4.19.1 -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/en/github/administering-a-repository 2 | # /configuration-options-for-dependency-updates 3 | --- 4 | version: 2 5 | updates: 6 | 7 | - package-ecosystem: "github-actions" 8 | directory: "/" 9 | schedule: 10 | interval: "daily" 11 | labels: 12 | - "📦 dependencies" 13 | assignees: 14 | - "kdeldycke" 15 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ### Motivation 2 | 3 | 10 | 11 | This new link is special because... 12 | 13 | ### Affiliation 14 | 15 | 16 | 17 | - [ ] I am the author of the article or project 18 | - [ ] I am working for/with the company publishing the article or project 19 | - [ ] I'm just a rando who stumbled upon this via social networks 20 | 21 | ### Self checks 22 | 23 | - [ ] I have [read the Code of Conduct](https://github.com/kdeldycke/awesome-billing/blob/main/.github/code-of-conduct.md) 24 | - [ ] I applied all rules from the [Contributing guide](https://github.com/kdeldycke/awesome-billing/blob/main/.github/contributing.md) 25 | - [ ] I checked there is no other [Issues](https://github.com/kdeldycke/awesome-billing/issues) or [Pull Requests](https://github.com/kdeldycke/awesome-billing/pulls) covering the same topic 26 | - [ ] I applied the changes to all translatations in `readme.*.md` files 27 | -------------------------------------------------------------------------------- /.github/gitleaks.toml: -------------------------------------------------------------------------------- 1 | [allowlist] 2 | description = "False positives" 3 | commits = [ 4 | ### kdeldycke/awesome-billing 5 | # Twitter status IDs. 6 | "5b54ac1befb7a768a18b2abd4a7b091766ee7609", 7 | "4607e5923f1889ce5136b1a6bdfbddd769cd7fc3", 8 | "1cfd0513359a5ce20b538b6a637d40c4cc50a37f", 9 | 10 | ### kdeldycke/awesome-engineering-team-management 11 | # Twitter status IDs. 12 | "044ccf813c180d1b52fa550549f1e3ffe7ad3176", 13 | "4ee04962090c60f9d2bd26e507584c95b2f039cb", 14 | "e945e90fbcd4b610d71cbe766b1c909b51c674a5", 15 | "bdae66b4dbc54fcf66aa2c5bf61598c894a6172d", 16 | "6462b4a4b0335823f2a9e8412a1c10a38561900e", 17 | "ac1dd92507ed071da3ac5270484a152bfef93aa2", 18 | "e9eb3864157f504cb29fab33d4f63748302c963d", 19 | "a43eef1b55fff47879fe671abbebc7e279d59999", 20 | "1a5e33dd31d129a1335ae2418ec43bf1d43c3760", 21 | "0e05ffafc90dd4ea337aca7372c983e143ba48a8", 22 | "0e93d0ced146e4a32a1838b1aa4dbf2d20703964", 23 | "df0e49b612e68b9389c671463640e5d17b479231", 24 | "b743e4aecc5822c51aa088312b20d4965720aa7e", 25 | "94c532529b78b20e9363bded9e2788dd03a59832", 26 | "f0fe92563a14f93dbe07579ff735b844cfb69a7d", 27 | "a804606fb0794615df5c078ab220b615796e1ba9", 28 | "14d523e38ebe8f2859646c4cb9736b1843802476", 29 | "36c488d8b52f66120d51b0fbb7b93667453461fe", 30 | "1da97b40558cd6c5941edd2db9f9a58407d5a3bf", 31 | "56f8e6771c88625ed82e6663961fc2874c53f874", 32 | ] 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/new-link.yaml: -------------------------------------------------------------------------------- 1 | name: Add new link 2 | description: You would like to add a new link to the collection 3 | labels: ["🆕 new link"] 4 | body: 5 | 6 | - type: input 7 | id: link 8 | attributes: 9 | label: URL of the article or project 10 | validations: 11 | required: true 12 | 13 | - type: textarea 14 | id: motivation 15 | attributes: 16 | label: Motivation 17 | description: > 18 | Explain the motivation for adding this link to the current collection. What's special about it? 19 | placeholder: | 20 | This new link is special because... 21 | validations: 22 | required: true 23 | 24 | - type: checkboxes 25 | id: affiliation 26 | attributes: 27 | label: Affiliation 28 | description: > 29 | Please indicate how you are associated with the new proposed content. 30 | options: 31 | - label: "I am the author of the article or project" 32 | - label: "I am working for/with the company which is publishing the article or project" 33 | - label: "I'm just a rando who stumbled upon this via social networks" 34 | validations: 35 | required: true 36 | 37 | - type: checkboxes 38 | id: self-checks 39 | attributes: 40 | label: Self checks 41 | options: 42 | - label: > 43 | I have [read the Code of Conduct 44 | ](https://github.com/kdeldycke/awesome-billing/blob/main/.github/code-of-conduct.md) 45 | - label: > 46 | I applied all rules from the [Contributing guide 47 | ](https://github.com/kdeldycke/awesome-billing/blob/main/.github/contributing.md) 48 | - label: > 49 | I have checked there is no other 50 | [Issues](https://github.com/kdeldycke/awesome-billing/issues) or [Pull 51 | Requests](https://github.com/kdeldycke/awesome-billing/pulls) covering the same topic 52 | to open 53 | validations: 54 | required: true -------------------------------------------------------------------------------- /.github/code-of-conduct.md: -------------------------------------------------------------------------------- 1 | # Contributor covenant code of conduct 2 | 3 | ## Our pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, 8 | body size, disability, ethnicity, gender identity and expression, level of 9 | experience, nationality, personal appearance, race, religion, or sexual 10 | identity and orientation. 11 | 12 | ## Our standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | - Using welcoming and inclusive language 18 | - Being respectful of differing viewpoints and experiences 19 | - Gracefully accepting constructive criticism 20 | - Focusing on what is best for the community 21 | - Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | - The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | - Trolling, insulting/derogatory comments, and personal or political attacks 28 | - Public or private harassment 29 | - Publishing others’ private information, such as a physical or electronic 30 | address, without explicit permission 31 | - Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an 52 | appointed representative at an online or offline event. Representation of a 53 | project may be further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at kevin_AT_deldycke_DOT_com. All complaints 59 | will be reviewed and investigated and will result in a response that is deemed 60 | necessary and appropriate to the circumstances. The project team is obligated 61 | to maintain confidentiality with regard to the reporter of an incident. Further 62 | details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project’s leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the 71 | [Contributor Covenant](https://contributor-covenant.org), version 1.4, 72 | available at 73 | [https://contributor-covenant.org/version/1/4](https://contributor-covenant.org/version/1/4/) 74 | -------------------------------------------------------------------------------- /.github/contributing.zh.md: -------------------------------------------------------------------------------- 1 | # 贡献指南 2 | 3 | 欢迎您的贡献!以下是一些指导原则。 4 | 5 | ## 状态 6 | 7 | 这个仓库已经达到了平衡状态。我们已经过了积累阶段,正处于策展过程中。这意味着我们更注重完善概念、平滑进展以及仔细评估新内容的添加。 8 | 9 | ## 拉取请求和问题 10 | 11 | - 在提出新建议之前,搜索过去和当前的问题和拉取请求。您的建议可能是重复的或正在进行中的工作。 12 | 13 | - 每次提交只包含一个列表项。 14 | 15 | - 每个拉取请求只包含一次提交。应用更改后始终压缩提交。 16 | 17 | - 检查您的拼写和语法。 18 | 19 | - 添加链接资源很棒的原因。以及它为现有内容增加了什么。 20 | 21 | - 保持翻译内容与您的提议同步。将更改传播到所有 `readme.*.md` 文件。依赖自动翻译工具。双语贡献者稍后会完善结果。 22 | 23 | ## 代码检查 24 | 25 | 您的拉取请求应该通过 [官方 Awesome List 的检查器](https://github.com/sindresorhus/awesome-lint)。 26 | 27 | 这里不需要额外的工作,因为它已经 [通过 GitHub actions 集成](https://github.com/kdeldycke/awesome-billing/tree/main/.github/workflows)。 28 | 29 | 您仍然可以通过本地运行检查器来预测问题: 30 | 31 | ```shell-session 32 | $ npx awesome-lint 33 | ``` 34 | 35 | ## 格式化 36 | 37 | 以下是 `awesome-lint` CLI 未涵盖的其他规则。 38 | 39 | 如果这些规则中的任何一个与检查器冲突,检查器的规则应该优先。应用它们。 40 | 41 | ### 一般内容 42 | 43 | - 删除任何尾随空格。 44 | 45 | - 使用空格,不要使用制表符进行缩进。 46 | 47 | - 撇号应使用单个 ASCII 标记:`'`。 48 | 49 | - 对于描述,尝试从原始内容中识别最好的引用。 50 | 51 | - 如果找不到引用作为摘要,请随意改写项目的标题和描述。记住,这是策展:我们通过聚合和分类来增加原始内容的价值。还通过智能编辑。您只需要尊重原始内容的精神。 52 | 53 | ### 章节 54 | 55 | - 章节 **不是故意按字母顺序排序的**。这是为了提供从一般到特定主题的进展。 56 | 57 | > [!IMPORTANT] 58 | > 例外情况是在 `awesome-falsehood` 中,章节 **按字母顺序排列**,因为所有主题彼此独立。 59 | 60 | - 章节可能包含一段介绍和一个图形(图表、绘图、照片)。 61 | 62 | ### URL 63 | 64 | - 如果可用,使用 HTTPS 协议。 65 | 66 | - 必须可被 CI/CD 作业访问。如果域名因速率限制或内容保护而返回 `40x` 错误,请用稳定链接替换: 67 | 68 | - [`sci-hub.st`](https://sci-hub.st) 用于研究论文 69 | - [`archive.ph`](https://archive.ph) 用于新闻文章 70 | - [`archive.org`](https://archive.org) 用于其他任何内容 71 | 72 | ### 项目标题 73 | 74 | - 不使用 `"` 和 `"` 弯引号。这些保留用于描述中的原始内容引用。 75 | 76 | - 要引用,使用单引号或双引号变体:`'` 和 `"`。保持它们适当平衡。 77 | 78 | > [!IMPORTANT] 79 | > 在 `awesome-falsehood` 中,链接标题必须删除 "*程序员认为*" 部分以保持紧凑。 80 | 81 | ### 项目描述 82 | 83 | - 尝试提供可操作的 TL;DR 作为描述,如果原文能够独立存在,则引用原文。 84 | 85 | - [删除描述中的 `TL;DR:` 前缀](https://github.com/kdeldycke/awesome-engineering-team-management/commit/da298ec1c39fe62fd4553e1a6de0ad4494602c57)。每个描述都是简短摘要。 86 | 87 | - 引用应该用 `"` 和 `"` 弯引号正确分隔。 88 | 89 | - 您可以使用括号中的省略号 `(…)` 来缩减原文。 90 | 91 | - 对于引用内的引用,使用单引号或双引号 `'` 和 `"` ASCII 标记。保持它们适当平衡。 92 | 93 | - 要将列表序列化为描述,使用以下格式: 94 | 95 | > 总结项目的描述文本。这里是来自原始内容的列表,关于 **"三个重要主题:1. 某某某;2. 某某某?3. 某某某。"** 以及更多文本来总结。 96 | 97 | 这种格式提供了视觉锚点,有助于可读性和快速内容扫描。 98 | 99 | - 您可以跳过原始列表中的一些项目并重新编号。 100 | 101 | - 但是您不应该重新排序它们。 102 | 103 | - 描述中允许额外的链接。这必须限制在一些罕见情况下。比如指向更大的概念、首字母缩略词定义或参考资料(书籍、传记等)。 104 | 105 | ## 编辑方针 106 | 107 | 每个列表的一般编辑方针在 [它们的介绍中有提示](https://github.com/kdeldycke/awesome-template#readme)。 108 | 109 | 还有一些根据列表的具体规则: 110 | 111 | ### [`awesome-engineering-team-management`](https://github.com/kdeldycke/awesome-engineering-team-management):项目顺序 112 | 113 | 项目大致按以下顺序排列: 114 | 115 | 1. 首先我们会找到对软件开发人员或新经理有吸引力的内容。我们追求可访问性,针对更广泛的受众并提供温和的介绍。 116 | 1. 然后我们可以有几个真实的用例或轶事,这使主题更加实用和相关。 117 | 1. 第三,我们可能会添加几个参考资料来概括概念,提供系统化的解决方案并展示更广泛的思维框架。 118 | 1. 最后是最愤世嫉俗或最悲观的内容,这些内容作为警示故事或恶化条件的警告信号具有一定的效用。 119 | 120 | ### [`awesome-falsehood`](https://github.com/kdeldycke/awesome-falsehood):候选项 121 | 122 | 在贡献之前,确保您想要添加的新链接是一个好的候选项。 123 | 124 | 这是一个非限制性的适合包含在 `awesome-falsehood` 列表中的项目列表。 125 | 126 | #### 谬误文章 127 | 128 | 遵循 *谬误* 模式的文章是包含在这个精彩列表中的主要候选者。 129 | 130 | 这些文章从开发人员对领域有天真和简单看法的假设开始。然后继续列出程序员可能持有的一系列坦率假设。每一个都是故意错误的,在最佳形式下用反例说明。 131 | 132 | 谬误列表被精心设计为旨在完善概念的进展。阅读完整个谬误列表后,读者应该对领域有更好的概述,同时消除其神话,指出常见陷阱并展示其微妙之处。 133 | 134 | *谬误* 文章在某种意义上是一套冗长的单元测试,涵盖了现实世界使用提供的广泛边缘情况。世界是混乱的。发现一个领域比预期复杂得多会导致挫折感。并导致掀桌子 `(╯°□°)╯︵ ┻━┻`。这是该列表的绝佳候选者的标志! 135 | 136 | 仅适用于一个产品(或服务)的文章不能被认为足够通用,应该避免。 137 | 138 | #### 库 139 | 140 | 编程库或模块也是好的候选者,如果它们解决或减少了上述 *谬误* 文章指出的复杂性。 141 | 142 | 这样我们就可以把桌子放回原位。`┬─┬ ノ( ゜-゜ノ)` 143 | 144 | #### 数据结构 145 | 146 | 足够通用以涵盖和解决大多数谬误的数据模型和结构也欢迎在此页面中出现。 147 | 148 | ## 常见问题 149 | 150 | 一些案例来说明策展过程。 151 | 152 | ### 我可以重写您的句子和段落吗? 153 | 154 | 可以。我不是母语使用者,所以我的一些写作可能有点花哨。如果您可以提出我初始文本的更短、更直接、更准确的版本,请继续!这些改进 [为两种读者都增加了很多可读性](https://github.com/kdeldycke/awesome-falsehood/pull/105)。 155 | 156 | ### 我可以为列表提议 YouTube 视频吗? 157 | 158 | 可以,但尝试将视频的开始精确定位到相关时间。比如在 YouTube URL 中使用 `&t=13m30s` 参数。 159 | 160 | 比视频更好的是:有其书面转录的链接。或者演示幻灯片,如果它没有稀释要表达的观点。 161 | 162 | ### 我可以链接到 X 帖子吗? 163 | 164 | 可以,但首先尝试在作者制作的内容中搜索:有时该作者将其咆哮编辑成其他地方更易于消化的文章。我们会更喜欢链接到那个。 165 | 166 | ### 如何防止链接腐烂? 167 | 168 | [正如贡献者指出的](https://github.com/kdeldycke/awesome-engineering-team-management/issues/52): 169 | 170 | > 这里的链接有下线的趋势。为了使这成为长期价值的资源,可以通过存档页面来避免链接腐烂。 171 | 172 | 这是真的。 173 | 174 | 如果原始 URL 不再可访问,我不介意用替代的存档/缓存链接替换原始 URL。 175 | 176 | 损坏的链接令人沮丧。我们会逐一修复它们。有些链接已被移动到新域名,有些则完全消失了,我们将用[存档链接](#url)来替代它们。 177 | 178 | 如果您发现损坏的链接,请提出 PR 来修复它。或者只是将其报告为问题,我会完成这项工作。 179 | 180 | ### 您将如何存档下线的文章? 181 | 182 | 这个问题指出了我们需要在它们下线 *之前* 存档它们的悖论。 183 | 184 | 没有必要抢先存档内容。存在其他人这样做的激励: 185 | 186 | - 这个列表足够受欢迎,其内容被常规存档爬虫收集。 187 | - 这个列表中的热门内容自然被重视它们的用户存档。 188 | - 关心自己内容或从这个列表提供的 SEO 价值中受益的作者有动机保持它们在原始 URL 可用。 189 | 190 | 尽管有这些激励措施,内容仍有可能完全从网络上消失,且没有[存档副本](#url)。这也不是世界末日。也许这些内容本来就不值得保留,原本就不适合被收录。可以把这种极端情况看作是内容的自然选择过程,有助于实现自然的内容筛选和整理。 191 | 192 | ### 为什么删除不活跃的 GitHub 项目? 193 | 194 | 未维护的 GitHub 仓库通常 [被其所有者存档](https://docs.github.com/en/repositories/archiving-a-github-repository/archiving-repositories)。但有些是事实上未维护的,或者被其作者原样遗弃,没有明确存档。 195 | 196 | 无论哪种方式,如果它们所处理的空间很拥挤,并且列表中引用了其他仓库,则该链接是删除以减少噪音的好候选者。 197 | 198 | 另一方面,如果项目已经在其他地方被分叉或重启,我们现在可以指出新位置。 199 | 200 | ### 为什么我的商业项目不在列表中? 201 | 202 | 可能是因为核心内容在付费墙后面。特别是如果有更好的在线资源,它们更广泛,可以免费访问。 203 | 204 | 这对 SaaS 和其他许可软件尤其如此。如果有开源项目可用,我们宁愿指向那个而不是商业解决方案。 205 | 206 | 这些替代方案不需要更好。如果它们足够好以从中获得灵感或开始没有进入障碍的事情,它们就符合条件。 207 | 208 | 因此,对于一组多个重叠的项目,我们会将商业项目视为重复项并删除它们,以保持列表精简。 209 | 210 | ### 为什么我的链接被拒绝了? 211 | 212 | 如果您的链接被拒绝,必须有动机并作为对您 PR 的评论向贡献者解释。 213 | 214 | 拒绝的一些原因,通常重叠,包括: 215 | 216 | - 内容重复 217 | - 缺乏原创性 218 | - 现有内容的简单重复 219 | - 没有说明新链接对现有资料库有什么新增价值 220 | - 所在部分内容过于拥挤,[需要的是更好的整理而非添加更多内容](https://github.com/kdeldycke/awesome-iam/pull/76) 221 | - [不够通用,或过于特定于某一产品或公司](https://github.com/kdeldycke/awesome-falsehood/pull/31#issuecomment-407667679) 222 | - 带有营销性质的内容,仅为提升 SEO 而添加 223 | - [已经有太多链接指向同一个商业域名](https://github.com/kdeldycke/awesome-iam/pull/179#issuecomment-3023031941) (两个链接就足够了) 224 | - 对提出的问题缺乏反馈 225 | - 偏离了本贡献指南的要求 226 | - 违反了[行为准则](code-of-conduct.md) 227 | 228 | ### 我如何强制将链接加入列表? 229 | 230 | 如果您的贡献被拒绝,有一种方法可以绕过策展规则。您可以 [购买赞助](https://github.com/sponsors/kdeldycke) 并在此仓库的顶部拥有您的产品、徽标和链接!🤗 就像 [Descope 在 awesome IAM 列表上做了一年](https://twitter.com/kdeldycke/status/1676963147104784386)。 231 | 232 | ## [`awesome-falsehood`](https://github.com/kdeldycke/awesome-falsehood) 的常见问题 233 | 234 | 这些问题专门针对 [Awesome Falsehood](https://github.com/kdeldycke/awesome-falsehood) 项目。 235 | 236 | ### 为什么不在列表中复制谬误? 237 | 238 | 在仓库中编译所有谬误可能是个好主意。它将允许社区维护和丰富它们。它还可以提高整体质量,因为大多数外部文章不努力说明或解释为什么谬误是谬误。 239 | 240 | 但这是一个很大的努力,为了保持简单,我们只是在这个列表中收集外部文章。与此同时,如果您想添加谬误,我会要求潜在贡献者 [在其他地方托管它们](https://github.com/kdeldycke/awesome-falsehood/issues/46)。 241 | 242 | 此外,如果我们必须在此仓库中托管原始谬误,我们可能必须 [检查许可证并寻求原作者的许可](https://github.com/kdeldycke/awesome-falsehood/issues/24)。 243 | -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /.github/contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Your contributions are always welcome! Here are some guidelines. 4 | 5 | ## Status 6 | 7 | This repository has reached an equilibrium state. We are past its accumulation phase, and in the middle of the curation process. Meaning we're more into refining its concepts, smooth the progression and carefully evaluating the addition of new content. 8 | 9 | ## Pull-requests and issues 10 | 11 | - Search past and current issues and pull-requests for previous suggestions before making a new one. Yours may be a duplicate or a work in progress. 12 | 13 | - Only one list item per commit. 14 | 15 | - Only one commit per pull-request. Always squash commits after applying changes. 16 | 17 | - Check your spelling and grammar. 18 | 19 | - Add the reason why the linked resource is awesome. And what it adds to the existing corpus. 20 | 21 | - Keep the translated content up-to-date with your proposal. Propagate changes to all `readme.*.md` files. Rely on automatic translation tools. Bilingual contributors will refine the result later. 22 | 23 | ## Linting 24 | 25 | Your pull-request should pass the [official Awesome List's linter](https://github.com/sindresorhus/awesome-lint). 26 | 27 | No extra work is required here as it is [already integrated by the way of GitHub actions](https://github.com/kdeldycke/awesome-billing/tree/main/.github/workflows). 28 | 29 | You can still anticipate issues by running the linter locally with: 30 | 31 | ```shell-session 32 | $ npx awesome-lint 33 | ``` 34 | 35 | ## Formatting 36 | 37 | Here are additional rules not covered by the `awesome-lint` CLI. 38 | 39 | If one of these rule conflict with the linter, the linter's rule should takes precedence. Apply it. 40 | 41 | ### General content 42 | 43 | - Remove any trailing whitespaces. 44 | 45 | - Use spaces, no tabs, for indention. 46 | 47 | - Apostrophes should be using the single ASCII mark: `'`. 48 | 49 | - For description, try to identify the single best quote form the original content. 50 | 51 | - If a quote couldn't be found to serve as a summary, feel free to paraphrase both the item's title and description. Remember, this is curation: we are increasing the value of the original content by aggregation and categorization. And also by smart editorializing. You just need to respect the spirit of the original content. 52 | 53 | ### Sections 54 | 55 | - Sections **are not intentionally sorted in the alphabetical order**. That is to provide a progression, from general to specific topics. 56 | 57 | > [!IMPORTANT] 58 | > Exceptionally in `awesome-falsehood`, sections **are in alphabetical order**, as all topics are independent from each others. 59 | 60 | - Section might feature one paragraph introduction and a figure (graph, drawing, photo). 61 | 62 | ### URL 63 | 64 | - Use HTTPs protocol, if available. 65 | 66 | - Must be reachable by CI/CD jobs. If the domain return `40x` errors for rate-limiting or content protection, replace it with a stable link: 67 | 68 | - [`sci-hub.st`](https://sci-hub.st) for research papers 69 | - [`archive.ph`](https://archive.ph) for news articles 70 | - [`archive.org`](https://archive.org) for anything else 71 | 72 | ### Item title 73 | 74 | - No `“` and `”` curved quotation marks. This is reserved for original content quotation in descriptions. 75 | 76 | - To quote, use either the single or double variations: `'` and `"`. Keep them properly balanced. 77 | 78 | > [!IMPORTANT] 79 | > In `awesome-falsehood`, link titles must be stripped out of the "*Programmers believe*" part to keep it compact. 80 | 81 | ### Item description 82 | 83 | - Try to provide an actionable TL;DR as a description, quoting the original text if it stands by itself. 84 | 85 | - [Removes `TL;DR:` prefix in description](https://github.com/kdeldycke/awesome-engineering-team-management/commit/da298ec1c39fe62fd4553e1a6de0ad4494602c57). Every description is a short summary anyway. 86 | 87 | - Quotes should be properly delimited with the `“` and `”` curved quotation marks. 88 | 89 | - You can reduce the original text by using an ellipsis in parenthesis `(…)`. 90 | 91 | - For quoting inside a quote, use single or double `'` and `"` ASCII marks. Keep them properly balanced. 92 | 93 | - To serialize a list into a description, use the following format: 94 | 95 | > Text of a description summarizing the item. And here is a list coming from the original content about **“three important topics: 1. Blah blah blah; 2. Blah blah blah? 3. Blah blah blah.”** And a bit more text to conclude. 96 | 97 | This format provides visual anchor points that help readability and quick content scanning. 98 | 99 | - You can skip some items from the original list and renumber it. 100 | 101 | - You shouldn't have to re-order it though. 102 | 103 | - An additional link in the description is allowed. This must be limited to some rare cases. Like pointing to a bigger concept, an acronym definition, or reference material (book, biography, …). 104 | 105 | ## Editorial line 106 | 107 | The general editorial line for each list is [hinted in their introduction](https://github.com/kdeldycke/awesome-template#readme). 108 | 109 | There's also some specific rules depending on the list: 110 | 111 | ### [`awesome-engineering-team-management`](https://github.com/kdeldycke/awesome-engineering-team-management): items order 112 | 113 | Items are roughly ordered like so: 114 | 115 | 1. At first we'll find content appealing to software developers or new managers. We're reaching for accessibility and targets the wider audience and provide a gentle introduction. 116 | 1. Then we can have a couple of real use-cases or anecdotes, which makes the subject more hands-on and relatable. 117 | 1. Third we might add a couple of reference material to generalize concepts, provide methodical solutions and expose broader thinking frameworks. 118 | 1. At the end comes the most cynical or bleak content, which have some utility as cautionary tales, or as warning signals of deteriorating conditions. 119 | 120 | ### [`awesome-falsehood`](https://github.com/kdeldycke/awesome-falsehood): candidates 121 | 122 | Before contributing, make sure the new link you'd like to add is a good candidate. 123 | 124 | Here is a non-restrictive list of items which are good candidates for inclusion in the `awesome-falsehood` list. 125 | 126 | #### Falsehood articles 127 | 128 | Articles following the *falsehood* schema are prime candidates for inclusion in this awesome list. 129 | 130 | These articles starts with the hypothesis that developers have a naive and simple view of a domain. Then proceed to list a set of candid assumptions that might be held by programmers. Each one is intentionally false, and in their best form are illustrated with a counter-example. 131 | 132 | A list of falsehood is crafted as a progression that is designed to refine concepts. Having read the whole list of falsehood, the reader should possess a better overview of a domain while dispelling its myths, point out common pitfalls and demonstrate its subtleties. 133 | 134 | *falsehood* articles are, in a sense, a suite of wordy unit-tests covering extensive edge-cases provided by real-world usage. The world is messy. Discovering a domain to be much more complex than anticipated will lead to frustrations. And cause flipping tables `(╯°□°)╯︵ ┻━┻`. This is the sign of a great candidate for that list! 135 | 136 | Articles featuring items that are applicable to one product (or a service) and one only can't be considered as generic enough and should be avoided. 137 | 138 | #### Libraries 139 | 140 | Programming libraries or modules are good candidates too, if they solve or reduce the complexities pointed to by *falsehood* articles above. 141 | 142 | That way we can put back tables in place. `┬─┬ ノ( ゜-゜ノ)` 143 | 144 | #### Data structures 145 | 146 | Data models and structures generic enough to cover and address most of the falsehoods are also welcome in this page. 147 | 148 | ## FAQ 149 | 150 | Some cases to illustrate the curation process. 151 | 152 | ### Can I rewrite your sentences and paragraphs? 153 | 154 | Yes. I'm a non-native speaker, so some of my writings might be a little bit fancy. If you can propose a shorter, to the point, and accurate version of my initial text, go for it! These improvements [adds a lot of readability for both kind of readers](https://github.com/kdeldycke/awesome-falsehood/pull/105). 155 | 156 | ### Can I propose YouTube videos for the list? 157 | 158 | Yes, but try to pin-point the start of the video to a relevant time. Like with the `&t=13m30s` parameter in YouTube URLs. 159 | 160 | Better than a video: have a link to its written transcript. Or presentation slides if it doesn't dillute the point being made. 161 | 162 | ### Can I link to an X thread? 163 | 164 | Yes, but try to search first in the content produced by the author: sometimes the said author edited its rant into a more digestible article elsewhere. We'll prefer to link to that. 165 | 166 | ### How to prevent link-rot? 167 | 168 | [As pointed by a contributor](https://github.com/kdeldycke/awesome-engineering-team-management/issues/52): 169 | 170 | > The links here have a tendency to go offline. For this to be a resource of long term value, link-rot can be avoided by archiving the pages. 171 | 172 | Which is true. 173 | 174 | I have no issue replacing the original URL with an alternative archived/cached link if the original is no longer reachable. 175 | 176 | Broken URLs are frustrating. We will fix them one by one. Some have been moved to a new domain. Some have completely disappear, so we'll replace them with an [archived link](#url). 177 | 178 | If you find a broken one, please propose a PR to fix it. Or just report it as an issue and I'll do the work. 179 | 180 | ### How are you going to archive articles that went offline? 181 | 182 | This question points to the paradox that we need to archive them *before* they go offline. 183 | 184 | There is no rush to pre-emptively archive content. Incentives exists for others to do it: 185 | 186 | - This list is popular enough for its content to be picked up by regular archival crawlers. 187 | - Popular content in this list are naturally archived by users who value them. 188 | - Authors who cares about their content, or benefits from the SEO juice this list provides, have an incentive to keep them available at their original URL. 189 | 190 | Despites these incentives, there is still a non-zero chance for content to disappear entirely from the web, with no [archived copy](#url). That's not the end of the world. Maybe the content wasn't worth it, and not good for inclusion in the first place. Think of this edge-case as a natural selection process on content, which helps natural curation. 191 | 192 | ### Why removes inactive GitHub projects? 193 | 194 | Unmaintained GitHub repositories are usually [archived by their owners](https://docs.github.com/en/repositories/archiving-a-github-repository/archiving-repositories). But some are de-facto unmaintained, or abandoned as-is by their author, without being explicitly archived. 195 | 196 | Either way, if the space they addresses is crowded, and there are other repositories referenced in the list, the link is a good candidate for deletion to reduce noise. 197 | 198 | On the other hand, if the project has been forked or rebooted elsewhere, we can now point out to the new location. 199 | 200 | ### Why my commercial project is not in the list? 201 | 202 | Probably because the core content is behind a paywall. Especially if there are better resources online, which are more extensive, and freely accessible. 203 | 204 | This is especially true for SaaS and other licensed software. If there is an open-source project available, we'd rather point to that instead of commercial solutions. 205 | 206 | These alternatives don't need to be better. They qualify if they're good enough to derives inspiration from, or starts something without barriers to entry. 207 | 208 | So for as set of multiple overlapping projects, we will consider commercial ones as duplicates and remove them, to keep the list lean. 209 | 210 | ### Why my link was rejected? 211 | 212 | If your link was rejected, it must have been motivated and explained to the contributor as a comment to your PR. 213 | 214 | Some reasons for rejection, which often overlaps, includes: 215 | 216 | - duplicate content 217 | - lack of originality 218 | - rehash of existing content 219 | - no motivation to explain what the new link adds to the existing corpus 220 | - overcrowded section that [does not need more content, but more curation](https://github.com/kdeldycke/awesome-iam/pull/76) 221 | - [not generic enough, or too specific to a single product or company](https://github.com/kdeldycke/awesome-falsehood/pull/31#issuecomment-407667679) 222 | - marketing copy made to juice the list for SEO 223 | - [too much URLs already pointing out to the same commercial domain name](https://github.com/kdeldycke/awesome-iam/pull/179#issuecomment-3023031941) (2 links are enough) 224 | - lack of feedback from the contributor on raised questions 225 | - deviance from these contribution guidelines 226 | - violation of the [code of conduct](code-of-conduct.md) 227 | 228 | ### How can I force a link into the list? 229 | 230 | If your contribution has been declined, there is a way to bypass the curation rules. You can [purchase a sponsorship](https://github.com/sponsors/kdeldycke) and have your product, logo and link at the top of this repository! 🤗 Like [Descope did for a year](https://twitter.com/kdeldycke/status/1676963147104784386) on the [awesome IAM list](https://twitter.com/kdeldycke/status/1676963147104784386). 231 | 232 | ## FAQ for [`awesome-falsehood`](https://github.com/kdeldycke/awesome-falsehood) 233 | 234 | This questions are specifics to the [Awesome Falsehood](https://github.com/kdeldycke/awesome-falsehood) project. 235 | 236 | ### Why don't you copy the falsehoods in the list? 237 | 238 | This might be a good idea to compile all falsehoods in the repository. It would allow the community to maintain them, and enrich them. It could also improve the overall quality as most external articles don't make the effort to illustrate or explain why a falsehood is a falsehood. 239 | 240 | But that is a big endeavor, so to keep things simple, we just make a collection of external articles in this list. In the mean time, if you'd like to add falsehoods, I will ask potential contributors to [host them elsewhere](https://github.com/kdeldycke/awesome-falsehood/issues/46). 241 | 242 | Also, if we had to host the raw falsehoods in this repository, we might have to [check on the licence and seek permission from the original author](https://github.com/kdeldycke/awesome-falsehood/issues/24). 243 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 |
6 |
7 |
20 | Money is the most universal and most efficient system of mutual trust ever devised.
21 | — Yuval Noah Harari[1]
22 |
87 |
88 | In a Stanford class providing an [overview of cloud computing](https://web.stanford.edu/class/cs349d/docs/L01_overview.pdf), the software architecture of the platform is described as in the right diagram →
89 |
90 |
91 |
92 | Billing is one of the transversal pillar of the ecosystem, where customers, products and business meets. The [other pillar being Identity and Access Management (IAM) 👤](https://github.com/kdeldycke/awesome-iam/).
93 |
94 |
95 |
96 | This highlight the strategic importance of the domain, not only for cloud providers but virtually any business, especially those who are software-centric.
97 |
98 | - [5 things I learned while developing a billing system](https://arnon.dk/5-things-i-learned-developing-billing-system/) - A great introduction on all the various aspects of a billing system, from currency to invoices, including great illustrations on the logic of changing plans. All these topics are detailed in dedicated sections below.
99 |
100 | - [Open guide to AWS](https://github.com/open-guides/og-aws#billing-and-cost-management) - Links to the *Billing and Cost Management* section which details the broad characteristics of billing for a cloud provider.
101 |
102 | - [Billed for ¥21,120, invoiced at ¥2,112,000 and paid ¥2,112,000](https://xunroll.com/thread/1668082843728367616) - [Get rid of integers and floats for monetary values](https://xunroll.com/thread/1599113889093890049). Use decimals. Or face the risks of anomalous x100 charges.
103 |
104 | - How to recruit software engineers in this domain? “The trick is to make the accounting/billing/payment department the antechamber of data engineering.” ([source](https://x.com/kdeldycke/status/1422564355799924736))
105 |
106 | ## Pricing
107 |
108 | From monthly subscription to commodity-like on-the-go consumption, there's plenty of scheme out there to structure your product's pricing. Including the good old shopping-cart funnel.
109 |
110 | - [Don't just roll the dice – Software pricing guide](https://neildavidson.com/downloads/dont-just-roll-the-dice-2.0.0.pdf) - Huge and complete collection of pricing scheme, with their psychological effect and impact on revenue model.
111 |
112 | - [Business Model Patterns](https://reasonstreet.co/business-model-library/) - A list of 15 different ways to sell products and services.
113 |
114 | - [Axial - Business models](https://archive.ph/BFsZ1) - 38 models for inspiration.
115 |
116 | - [The Network Monetization Map: Aligning Incentives with Revenue](https://medium.com/breadcrumb/the-network-monetization-map-aligning-incentives-with-revenue-b73c362d1ad5) - 6 models of monetization relying on network effect.
117 |
118 | - [The 5 Pillars of PriceOps](https://priceops.org) - A manifesto inspired by the DevOps movement in which pricing is no longer ossified, but is practiced as a responsive iteration process, and implemented as a flexible property of the system.
119 |
120 | - [SaaS pricing explorer](https://saaspricingexplorer.hyperline.co) - A collection of 1000+ pricing pages for inspiration.
121 |
122 | ### Usage-based Pricing
123 |
124 | The dynamic scheme for elastic resources.
125 |
126 | - [Why I Love Usage-Based Pricing](https://www.rdegges.com/2020/the-only-type-of-api-services-ill-use/) - “The most important reason I like this pricing model is that it heavily incentivizes both the customer and the service provider to act in everyone's best interest.” Also details issues with other pricing models.
127 |
128 | - [Use-cases for cloud services](https://news.ycombinator.com/item?id=19830022) - The reason usage-based pricing makes even more sense for cloud services: to optimize ROI, keep all regular workload in traditional architecture and reserve cloud computing for elastic and experimental projects.
129 |
130 | - [Socially Optimal Pricing of Cloud Computing Resources](https://webee.technion.ac.il/people/shimkin/PAPERS/Menache-CloudPricing-Conf2011.pdf) - “The socially optimal operating point is unique, and can be sustained by a linear, usage-based tariff, which charges a fixed price per unit resource and unit time.” This paper justify usage-based pricing for cloud resources.
131 |
132 | - [A Survey of Profit Optimization Techniques for Cloud Providers](http://www.cs.newpaltz.edu/~lik/publications/Peijin-Cong-ACM-CS-a-2020.pdf) - “The strategy of improving user service quality is discussed first, followed by the pricing strategy for cloud resources to maximize revenue.”
133 |
134 | - “Billing is not complex on purpose: it's the price to pay for elasticity.” ([source](https://x.com/kdeldycke/status/1214160678363246592)) - Or why you're likely to get an endless stream of complaining users if choosing utility pricing scheme: while accurate to the (milli-)cent, this model is frustrating for customers not ready to invest time grasping the underlying concepts.
135 |
136 | - [Riemann sum](https://en.wikipedia.org/wiki/Riemann_sum) - The starting point about quantization of usage.
137 |
138 | - [Allen's interval algebra](https://en.wikipedia.org/wiki/Allen%27s_interval_algebra) - Implementing usage-based pricing is tricky, and this algebra will help you organize temporal reasoning. Also see this [Stack Overflow question with clean schema](https://web.archive.org/web/20240413010618/https://stackoverflow.com/questions/12069082/allens-interval-algebra-operations-in-sql?rq=1).
139 |
140 | - [Reconcile Your Monthly GCP Invoice with BigQuery Billing Export](https://medium.com/@lukwam/reconcile-your-monthly-gcp-invoice-with-bigquery-billing-export-b36ae0c961e) - Behind the quest of this developer to track its expenses, you get a glimpse on cloud billing difficulties. While not explicitly pointed out, pricing cloud resources is hard and the result of quantization, granularity and rounding, between space, time and currencies.
141 |
142 | - [AWS EC2 T2 Instances Demystified: Don't Learn The Hard Way](https://roberttisdale.com/aws-ec2-t2-instances-demystified-dont-learn-hard-way/) - An example of really tricky burstable instances which accrues and limits its own amount of CPU usage credits.
143 |
144 | - [“Designing billing for a service can be really challenging”](https://news.ycombinator.com/item?id=23536919) - Personal anecdote on the design of the pricing plan for AWS Simple Email Service.
145 |
146 | - [Subscription-based pricing is dead: Smart SaaS companies are shifting to usage-based models](https://techcrunch.com/2021/01/29/subscription-based-pricing-is-dead-smart-saas-companies-are-shifting-to-usage-based-models/) - Usage-based pricing is more optimal and more fair: it “allows a customer to start at a low cost, minimizing friction to getting started while still preserving the ability to monetize a customer over time”.
147 |
148 | - [Electropedia: Tariffs for electricity](https://www.electropedia.org/iev/iev.nsf/index?openform&part=691) - Before the cloud, there was another metered resource priced by its usage: electricity. Here is a detailed (and multi-lingual) taxonomy of its vocabulary from the International Electrotechnical Commission.
149 |
150 | - [Lago](https://github.com/getlago/lago) - Open-source metering & usage-based billing in Ruby.
151 |
152 | - [CGRateS](https://github.com/cgrates/cgrates) - An open-source, fast (50k+ CPS) and scalable (load-balancer + replication included) real-time billing for ISPs and Telecom Operators, written in Go.
153 |
154 | ### Subscription Plans
155 |
156 | Highly popular for SaaS businesses, subscription plans are easy to comprehend.
157 |
158 | - [Pricing low-touch SaaS](https://stripe.com/en-in/atlas/guides/saas-pricing) - “In low-touch SaaS, the most common way packages are presented are as different columns in a pricing grid, with each column corresponding to a plan, offered at a different price, with differential access to features or maximum allowable usage along some axis interesting to the business.”
159 |
160 | - [Lotus](https://github.com/uselotus/lotus) - Open-source project to manage pricing & packaging infrastructure.
161 |
162 | - [`f-license`](https://github.com/furkansenharputlu/f-license) - Open-source license key generation and verification tool in Go.
163 |
164 | ### Hybrid
165 |
166 | Uncommon pricing schemes.
167 |
168 | - [The Three Part Tariff](https://tomtunguz.com/three-part-tariffs/) - Beyond linear pricing, there is a place for additional platform fees and free-tiers in the pricing structure.
169 |
170 | ### Strategy
171 |
172 | Theory and practical insight to help you choose the right pricing tactics.
173 |
174 | - "There are two ways to make money. You can bundle, or you can unbundle." - [Jim Barksdale](https://hbr.org/podcast/2014/07/marc-andreessen-and-jim-barksdale-on-how-to-make-money.html#:~:text=in%20business%2C%20there%20are%20two%20ways%20to%20make%20money.%20You%20can%20bundle%2C%20or%20you%20can%20unbundle.).
175 |
176 | - [Pricing Psychology](https://www.nickkolenda.com/psychological-pricing-strategies/) - Which numbers should you use? How high should it be? Should it be rounded? This guide has 42 tricks to help you choose the best price.
177 |
178 | - [The 7 factors to consider when pricing your startup product](https://tomtunguz.com/how-to-price-your-startups-product/) - Pricing is an offensive tool to reinforce your product value and underscore the company core marketing message.
179 |
180 | - [The Anatomy of SaaS Pricing Strategy](https://sbigrowth.com/hubfs/SBI_PI_AnatomyofSaaSPricingStrategy_Handbook.pdf) - Explain how to articulate the pricing of SaaS businesses around the product strategy.
181 |
182 | - [The cup-of-coffee pricing fallacy](https://blog.gingerlime.com/2020/the-cup-of-coffee-pricing-fallacy/) - Explains why it is a sloppy analogy.
183 |
184 | - [Changing the Pricing Model](https://monkeynoodle.org/2024/02/10/changing-the-pricing-model/) - A couple of ways to re-license your product.
185 |
186 | ### Market Research
187 |
188 | Survey methods and price discovery techniques to find the right price point.
189 |
190 | - [Jeremy Howard - From Predictive Modelling to Optimization](https://youtu.be/vYrWTDxoeGg?t=542) - “In insurance, the price is the product. (…) How do I change price to make shitload of money?” Or how to deliver results (optimal price for a customer) instead of delivering data (calculating a customer's risk, which had been the standard approach used by actuaries previously).
191 |
192 | - [Gabor–Granger method](https://en.wikipedia.org/wiki/Gabor%E2%80%93Granger_method) - Used in surveys to determine the price for a new product or service. The results can be used to produce a demand chart and a revenue curve.
193 |
194 | - [Van Westendorp's Price Sensitivity Meter](https://en.wikipedia.org/wiki/Van_Westendorp%27s_Price_Sensitivity_Meter) - PSM is a market technique for determining consumer price preferences. Allows for drawing a revenue curve to estimate the price point delivering the maximum revenue.
195 |
196 | - [Pricing niche products](https://kevinlynagh.com/notes/pricing-niche-products/) - “The most compelling argument against simply picking a price, though, is that it limits how much you can learn about your market.” Then the author setup vickrey auctions to discover price.
197 |
198 | - [Finding the max revenue price mark for digital products](https://medium.com/@hovm/finding-the-max-revenue-price-mark-for-digital-products-24cef24f746d) - “To find the optimal price that provides maximum revenue for your product you will need to field-test several price points; you then reconstruct the revenue curve and find the peak.”
199 |
200 | - [Personalised pricing and EU law](https://www.econstor.eu/bitstream/10419/205221/1/de-Streel-Jacques.pdf) - Some cases of price personalisation are prohibited in EU due to consumer protection and data protection rules.
201 |
202 | ## Product Catalog
203 |
204 | The central repository of all available services, products, variants, options and pricing available to the customer to purchase. Catalogs for cloud services are most of the time tailor-made, but there is some classic PDM solutions ([Product Data Management](https://en.wikipedia.org/wiki/Product_information_management), a.k.a. PIM for Product Information Management) out there that might fit the bill.
205 |
206 | - [GCP Product Catalog](https://cloud.google.com/blog/products/gcp/introducing-cloud-billing-catalog-api-gcp-pricing-in-real-time) - All GCP SKUs available as an API.
207 |
208 | - [Akeneo PIM](https://github.com/akeneo/pim-community-dev) - The open-source variant of the commercial Akeneo products.
209 |
210 | - [Pimcore](https://github.com/pimcore/pimcore) - An open-source UI and database to manage product metadata, written in PHP Symfony.
211 |
212 | - [OpenPIM](https://github.com/openpim) - A streamlined open-source project, focusing on PIM-only features.
213 |
214 | - [Comparing 3 open source PIM solutions](https://medium.com/@slavapedak/comparing-3-free-and-open-source-product-information-management-pim-solutions-e83a1898f91e) - Comparative study of the 3 projects above.
215 |
216 | ## Calculator
217 |
218 | Simulate a virtual invoice depending on the resource you plan to use.
219 |
220 | - [Cloudorado](https://www.cloudorado.com) - A comparison matrix which use ECU (Amazon's vCPU) as a CPU power measure unit.
221 |
222 | - [EC2Instances.info](https://ec2instances.info) - Easy Amazon EC2 Instance Comparison.
223 |
224 | ## Cost Forecast
225 |
226 | Help your customers predict their upcoming and future consumption based on their past usage.
227 |
228 | - [Forecasting: Principles and Practice](https://otexts.com/fpp2/) - “Comprehensive introduction to forecasting methods and to present enough information about each method for readers to be able to use them sensibly.”
229 |
230 | - [Transforming Financial Forecasting with Data Science and Machine Learning at Uber](https://web.archive.org/web/20221203184815/https://www.uber.com/blog/transforming-financial-forecasting-machine-learning/) - Discusses how Uber apply data science and machine learning in their financial planning platforms.
231 |
232 | - [Time Series Prediction - A short introduction for pragmatists](https://www.liip.ch/en/blog/time-series-prediction-a-short-comparison-of-best-practices) - Great introduction on how time series can be used to evaluate business problems.
233 |
234 | - [Forecasting with sktime](https://github.com/alan-turing-institute/sktime/blob/master/examples/01_forecasting.ipynb) - A more detailed tutorial on how to use past data to make temporal forward predictions. And be aware of the [differences between sktime and the Prophet project](https://news.ycombinator.com/item?id=24543861) mentioned in the article above.
235 |
236 | - [Darts](https://github.com/unit8co/darts) - Python library for user-friendly forecasting and anomaly detection on time series. It wraps a huge number of models, including [Prophet](https://facebook.github.io/prophet/). Great for experiments, but bear in mind that all the [models in Darts expects](https://news.ycombinator.com/item?id=37665435) that your data comes at a very regular interval, and make a lot of assumptions about their shape.
237 |
238 | - [Komiser](https://github.com/mlabouardy/komiser) - Open-source tool to stay under budget by uncovering hidden costs, monitoring increases in spend, and making impactful changes based on custom recommendations.
239 |
240 | - [GCP Cost Forecast](https://cloud.google.com//billing/docs/how-to/reports#cost-forecast) - An example of consumption trend line for resource consumption.
241 |
242 | - [AWS Forecast](https://aws.amazon.com/forecast/) - A full-featured hosted product to perform forecasting on any time-series.
243 |
244 | - [How to save money on your AWS bill](https://threadreaderapp.com/thread/1091041507342086144.html) - “The biggest cost savings there are: 1. Turning things off that you're not using; 2. Then spot instances; 3. Then reserved instances.”
245 |
246 | ## Marketplace
247 |
248 | A marketplace connect supply with demand that lead to a financial transaction. If there is no payment involved, then it is an aggregator, or a hub. Not a marketplace.
249 |
250 | - [Customized Regression Model for Airbnb Dynamic Pricing](https://www.kdd.org/kdd2018/accepted-papers/view/customized-regression-model-for-airbnb-dynamic-pricing) - This paper describes the pricing strategy model deployed at Airbnb.
251 |
252 | - [Papers we love: Auctions and Bidding](https://github.com/papers-we-love/papers-we-love/tree/master/economics#auctions-and-bidding) - A collection of papers on bidding and auctions.
253 |
254 | - [Vickrey auction](https://en.wikipedia.org/wiki/Vickrey_auction) - Hinted by an [HN comment](https://news.ycombinator.com/item?id=19145391), in which yes, “‘Asking people what they'd pay for and how much rarely works.’ (…) Using a Vickrey auction, similar to Google's ad auction mechanism, can elicit a person's maximum willingness-to-pay.”
255 |
256 | - [19 Tactics to Solve the Chicken-or-Egg Problem and Grow Your Marketplace](https://www.nfx.com/post/19-marketplace-tactics-for-overcoming-the-chicken-or-egg-problem) - “Which comes first, the supply or the demand? Chicken or egg?”
257 |
258 | - How to Kickstart and Scale a Marketplace Business: [Constrain the marketplace](https://www.lennysnewsletter.com/p/how-to-kickstart-and-scale-a-marketplace); Decide which side of the marketplace to concentrate on; Drive initial supply; Drive initial demand. A 4-parts series with dozen of interviews of people with direct experience building and scaling marketplaces.
259 |
260 | - [A Rake Too Far: Optimal Platform Pricing Strategy](https://abovethecrowd.com/2013/04/18/a-rake-too-far-optimal-platformpricing-strategy/) - A bit of vocabulary: “In a casino, the term *rake* refers to the commission that the house earns for operating a poker game. (…) While casinos use the term *rake*, a plethora of interesting word choices exist which all describe the same thing – keeping a little bit of the revenue for the company that is running the service.”
261 |
262 | ### Cloud Resources
263 |
264 | This sub-section focus on bid/ask mechanism matching resource producer with consumers. Most of the time these are one-sided markets with the big platform trying to amortized under-utilized inventory.
265 |
266 | - [Incentive Engineering for Computational Resource Management](https://papers.agoric.com/assets/pdf/papers/incentive-engineering-for-computational-resource-management.pdf) - Paper exploring the “mechanisms for the allocation of processor time and storage that are compatible both with programming practice and with market mechanisms.”
267 |
268 | - [Pricing of Service in Clouds: Optimal Response and Strategic Interactions](http://www.sigmetrics.org/mama/2013/abstracts2013/UrgaonkarEtAl.pdf) - “How should the consumer modulate its demand to optimize its profits? (…) How should the provider and consumer negotiate the specific pricing structure they will employ?” Covers non-linear models, tiered pricing, elastic demand, consumer et provider strategies.
269 |
270 | - [Dynamic Cloud Pricing for Revenue Maximization](https://henryhxu.github.io/share/hxu-tcc2013.pdf) - “Amazon's spot price is unlikely to be set according to market supply and demand. Rather, price oscillates within a very narrow band most of the time, which is more likely to be an artifact of some pricing algorithm with predetermined reserve price.”
271 |
272 | - [Usage Patterns and the Economics of the Public Cloud](https://mc4f.ee/Papers/PDF/EconPublicCloud.pdf) - “We examine the economics of demand and supply in cloud computing. (…) These results explain why fixed prices currently prevail despite the seeming need for time-varying dynamics. Examining the actual CPU utilization provides a lens into the future. (…) demand fluctuations would be on par with the three classic industries where dynamic pricing is important (hotels, electricity, airlines) and dynamic prices would be essential for efficiency.”
273 |
274 | - [Maximizing Profit of Cloud Brokers under Quantized Billing Cycles: a Dynamic Pricing Strategy based on Ski-Rental Problem](https://arxiv.org/pdf/1507.02545.pdf) - “The key idea of our algorithms is to use pricing signal to regulate user demand. One may argue that such an algorithm gives poor service to the user as it pushes tasks out of the queue in order to maximize cloud broker's profit.”
275 |
276 | - [Present or Future: Optimal Pricing for Spot Instances](https://web.archive.org/web/20150708151037/http://www.temple.edu/cis/icdcs2013/data/5000a410.pdf) - “Pricing policy of spot resources should be carefully designed and the impact on both present and future should be considered.”
277 |
278 | - “You always pay the spot market price, not your bid.” ([source](https://news.ycombinator.com/item?id=20347716)) - Simple explanation of the bidding mechanism.
279 |
280 | - [Deconstructing Amazon EC2 Spot Instance Pricing](https://dants.github.io/papers/Spotprice11CloudCom.pdf) - “Cloud providers possessing large quantities of spare capacity must either incentivize clients to purchase it or suffer losses. Amazon is the first cloud provider to address this challenge, by allowing clients to bid on spare capacity and by granting resources to bidders while their bids exceed a periodically changing spot price.”
281 |
282 | - [GCP Preemptible VMs vs AWS Spot Instances](https://news.ycombinator.com/item?id=9564287) - “Google's prices are fixed, whereas AWS uses a market model”.
283 |
284 | - “Look at the 3-month spot price history to estimate cost and to discover combinations of availability zone and instance type with extra capacity.” ([source](https://news.ycombinator.com/item?id=16071684)) - Users are seeking more transparency on the spot market.
285 |
286 | - [The Eternal Cost Savings Of Netflix's Internal Spot Market](http://highscalability.com/blog/2017/12/4/the-eternal-cost-savings-of-netflixs-internal-spot-market.html) - When you're big enough that [creating an internal secondary market](https://medium.com/netflix-techblog/creating-your-own-ec2-spot-market-6dd001875f5) for instances makes economic sense.
287 |
288 | - [AutoSpotting](https://github.com/AutoSpotting/AutoSpotting) - Tool that easily and reliably converts (all) your existing AutoScaling groups to cheaper spot instances.
289 |
290 | ### Online Ads
291 |
292 | Targeted online advertisements marketplaces have a lot in common with traditional cloud marketplace. Some good inspiration there, from concepts to tech.
293 |
294 | - [RTB Budget Pacing Summarized](https://github.com/PragmaticLab/RTB_Budget_Pacing_Summarized) - A collection of budget pacing resources for targeted online advertisements.
295 |
296 | - [Samsung's online ads platform/exchange war story](https://github.com/eloraiby/fs-pacer/blob/master/fs-pacer.md) - How to scale to 5M bid request/s, 2ms Max Response Time.
297 |
298 | - [`RTB4Free`](https://github.com/RTB4FREE) - Open Source Bidder and Demand Side Platform (DSP).
299 |
300 | ## Accounting
301 |
302 | - “The Accounting department is usually backwards facing. The Finance department is usually forwards facing.” ([source](https://news.ycombinator.com/item?id=25366184))
303 |
304 | ### Double-Entry Model
305 |
306 | The core concept of accounting is double-entry. It is the most critical part to grasp in order to properly design any robust system that tracks money.
307 |
308 | - [Accounting for Developers 101](https://docs.google.com/document/d/1HDLRa6vKpclO1JtxbGB5NeAYWf8cf1UMGy22o8OZZq4) - A general introduction to history and vocabulary of accounting.
309 |
310 | - [Accounting for Computer Scientists](https://martin.kleppmann.com/2011/03/07/accounting-for-computer-scientists.html) - Describes how to view accounting in the form of graphs in which money flows, then how these movements are materialized in the financial statements of a small company.
311 |
312 | - [The Double-Entry Counting Method](https://beancount.github.io/docs/the_double_entry_counting_method.html) - Same premise as above, but way more detailed and complete, as it adds reporting and implementation details.
313 |
314 | - [Accounting Memento For Entrepreneurs (US GAAP)](https://www.odoo.com/documentation/functional/accounting.html) - An interactive form to play with accounting concepts.
315 |
316 | ### Bookkeeping
317 |
318 | Everything you need to know about the daily practice of keeping your accounting data clean and tidy.
319 |
320 | - [So, you want to learn Bookkeeping!](https://www.dwmbeancounter.com/BCTutorials/BCIntro/index.html) - Focus on the daily operations of recording and maintaining the transactions of a business.
321 |
322 | - [Reconciliation: A game designed to frustrate the player](https://bam.kalzumeus.com/archive/a-game-that-intentionally-frustrates-the-player/) - “Reconciliation is a business process which arises almost entirely because of a lack of structured data in the pipelines that convey money between businesses”. There are some hack to streamline the process, like adding an arbitrary discount to produce unique trailing decimals, or setup a couple of virtual bank accounts as proxy.
323 |
324 | - [Plain text accounting tools](https://plaintextaccounting.org/#software) - Extensive list of open-source personal finance projects that might be great to look into for inspiration on double-entry accounting and bookkeeping.
325 |
326 | - And a list of graphical accounting tools: [GNUCash](https://gnucash.org) (GTK+), [Grisbi](https://grisbi.org) (C), [Firefly III](https://firefly-iii.org) (PHP).
327 |
328 | - [GnuCash Tutorial and Concepts Guide](https://www.gnucash.org/docs/v2.4/C/gnucash-guide/) - A complete tutorial on personal finance tracking with GnuCash.
329 |
330 | - [Frappe Books](https://github.com/frappe/books) - Free Desktop book-keeping software for small-businesses and freelancers.
331 |
332 | - [Luca](https://github.com/brandon-rhodes/luca) - YAML accounting and JSON tax forms.
333 |
334 | - [Sequence](https://github.com/decimals/sequence) - API that store, validate and reports asset movements. Also known as a Ledger. Sequence is immutable, scalable, and easy to use.
335 |
336 | - [Go DB Ledger](https://github.com/darcys22/godbledger) - An open source accounting system that aims to make the recording of double entry bookkeeping transactions programmable.
337 |
338 | - [Ledger](https://github.com/numary/ledger) - A scriptable financial ledger, designed to make it easy to model complex financial transactions.
339 |
340 | - [Akaunting](https://github.com/akaunting/akaunting) - Open source software designed for small businesses and freelancers.
341 |
342 | ### Software design and implementation
343 |
344 | Now that you're somewhat familiar with the concepts and practice of accounting, here are some resources to help you implement that knowledge into software systems.
345 |
346 | - [Moonpig: a billing system that doesn't suck](https://blog.plover.com/prog/Moonpig.html) - Design decisions behind a billing and accounting system. Key takeaway: some companies still pays by checks; do not use floats; complex customer workflows; date and time issues; mutable data.
347 |
348 | - [Books, an immutable double-entry accounting database service](https://developer.squareup.com/blog/books-an-immutable-double-entry-accounting-database-service/) - Explain the basic data model of a double-entry accounting system relying on Google Spanner for internal use at Square.
349 |
350 | - [TigerBeetle](https://github.com/coilhq/tigerbeetle) - A distributed financial accounting database to ensure that the money either moves, or doesn't move, that it doesn't get lost somewhere in between. It has been [tested on Jepsen](https://jepsen.io/analyses/tigerbeetle-0.16.11), which tested its strong serializability.
351 |
352 | - [Django Hordak](https://django-hordak.readthedocs.io) - Core functionality of a double entry accounting system for Django.
353 |
354 | - [Managed accounts for Django](https://github.com/django-oscar/django-oscar-accounts) - A 'managed account' is an allocation of money that can be debited and credited.
355 |
356 | - [Triple‐entry accounting with Blockchain: How far have we come?](https://sci-hub.st/10.1111/acfi.12556) - “Triple‐entry accounting is a new and a more efficient way to address fundamental trust and transparency issues that plague current accounting systems. Triple‐entry accounting with Blockchain, when properly implemented, can fundamentally improve accounting.”
357 |
358 | ### Currencies
359 |
360 | Global companies needs to know how to juggle between local currencies.
361 |
362 | - [Tutorial on multiple currency accounting](https://www.mathstat.dal.ca/~selinger/accounting/tutorial.html) - An excellent resource for implementing multi-currency accounting systems.
363 |
364 | ## Finance
365 |
366 | Once you've got your accounts in order, you can start extracting insights and metrics from your financial data.
367 |
368 | - [Accounts Demystified: The Astonishingly Simple Guide To Accounting](https://www.amazon.com/dp/0273744704?&linkCode=ll1&tag=kevideld-20&linkId=f491ee18c48fdaf3226904a39612cc22&language=en_US&ref_=as_li_ss_tl) - Helps you learn how to analyse and monitor your company's financial performance.
369 |
370 | - [The Games People Play With Cash Flow](https://commoncog.com/blog/cash-flow-games/) - “Malone created a new accounting metric, something he called ‘earnings before interest, depreciation, and taxes’, or EBITDA.” This is how a cable company CEO made sense of cash flow, like real-estate business did. The article starts with this example and describes other cash flow games for SaaS models.
371 |
372 | - [Financial Intelligence for Entrepreneurs: What You Really Need to Know About the Numbers](https://www.amazon.com/dp/1422119157?&linkCode=ll1&tag=kevideld-20&linkId=8d87e9235a1a05c4e0bec4b25230f28d&language=en_US&ref_=as_li_ss_tl) - Allows you to fully understand how to use financial data to make better decisions for your business.
373 |
374 | - [What is FinOps](https://www.finops.org/introduction/what-is-finops/) - A framework for tech finance and business leadership teams to share the same language and processes of cloud operations and management.
375 |
376 | - [Algebraic Models for Accounting Systems](https://www.amazon.com/dp/9814287113?&linkCode=ll1&tag=kevideld-20&linkId=3d8973d09f9143db8db8639615d12413&language=en_US&ref_=as_li_ss_tl) - Advanced abstract algebra applied to the analysis of accounting systems.
377 |
378 | ## Contracts
379 |
380 | All the invoicing terms & conditions are materialzed by the contract signed between the end-user and the service provider. That's the source from where we derives all the rules of the billing cycle.
381 |
382 | - [Is this what Enterprise mean?](https://threadreaderapp.com/thread/1389946268764475394.html) - When contracts, invoicing and payments are not working together, you end up alienating your big enterprise customers. See the associated HN comments [on bulk license purchase](https://news.ycombinator.com/item?id=27053246).
383 |
384 | - [Entitlements untangled: The modern way to software monetization](https://www.stigg.io/blog-posts/entitlements-untangled-the-modern-way-to-software-monetization) - “The concept of Entitlements encapsulates the feature access settings under various product variants (aka Pricing Plans or Packages), bridging the gap between how a product is sold and how it behaves for a variant. In essence, entitlements are a set of permissions defining what a customer (paying or non-paying) can do with your software application.”
385 |
386 | - [CUDs vs. Commit Contracts vs. SUDs in Google Cloud](https://66degrees.com/comparing-cuds-suds-and-commits-in-google-cloud/) - Explains the differences between various types of discounts and usage commitments in GCP.
387 |
388 | - [Quantity discounts on a virtual good: The results of a massive pricing experiment](https://sci-hub.st/https://www.pnas.org/doi/pdf/10.1073/pnas.1510501113) - “Implementing price reductions ranging from 9–70% for large purchases, we found remarkably little impact on revenue, either positively or negatively.” If discounts are a placebo and are still widely used in the industry, maybe they are a marketing hack to lure big customers?
389 |
390 | - “It used to be I could just give a lump sum and let Google Ads play until there is no more budget. Not anymore.” - ([source](https://news.ycombinator.com/item?id=36325785)) - Google Ads used to implement a concept of capped actuals. A kind of monthly budget with rollover, which is an optimal billing scheme to limit surprises for customers. It always looked to me as a way to sell quotas.
391 |
392 | ## Coupons and Vouchers
393 |
394 | - [Raising Prices is Hard](https://www.backblaze.com/blog/raising-prices-is-hard/) - Backblaze post-mortem on raising prices on their main offer. They wanted to create an extension program based on credit system. This became a full-time job for a handful of their most senior engineers, and resulted in a six month project.
395 |
396 | - [Details on Expiring DigitalOcean Credits](https://blog.digitalocean.com/details-on-expiring-digitalocean-credits/) - The reason you have to add an time limit on credits: unused ones accounts as liabilities on our balance sheet.
397 |
398 | - [Hacking Scooters: How I Created \$100k Worth Of Free Rides](https://fant.io/p/hacking-voi/) - A cautionary tale on how promo codes can be exploited to get unlimited free rides.
399 |
400 | - [China's Pinduoduo reports theft of online discount vouchers to police](https://web.archive.org/web/20230404113232/https://www.reuters.com/article/us-pinduoduo-china/chinas-pinduoduo-reports-theft-of-online-discount-vouchers-to-police-idUSKCN1PE05J) - The next level of fraud: “an online collective exploited a loophole on its platform to ‘steal’ tens of millions of yuan worth of discount vouchers”.
401 |
402 | - [Council Directive 2016/1065 as regards the treatment of vouchers](https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32016L1065) - European directive on the application of VAT when vouchers are involved.
403 |
404 | - [The coupon code is a slap in the face](https://justinjackson.ca/the-coupon-code-is-a-slap-in-the-face) - Point the negative consequences of users encountering a blank coupon field without having a coupon. See the update at the end of the article with research backing up this anecdote.
405 |
406 | ## Taxes
407 |
408 | - [2017 Tax Software Developer's Guides](https://web.archive.org/web/20240227073911/https://www.mass.gov/lists/2017-tax-software-developers-guides) - A list of test cases for developers to test their tax code against.
409 |
410 | - [{Digital,Cloud,Electronic,Online} Services VAT Rate Database](https://github.com/kdeldycke/vat-rates) - Centralize applicable VAT rates on foreign online services, for each country of residence (including territorial exceptions).
411 |
412 | - [Global VAT & GST on digital services](https://www.avalara.com/vatlive/en/global-vat-gst-on-e-services.html) - List of countries requiring application of taxes on foreign provided online services.
413 |
414 | - “British supermarkets (…) charge you a fee for their backend card processing, but they subtract that fee from your checkout price.” ([source](https://news.ycombinator.com/item?id=22047028)) - Which allows them to [claim the VAT on processing fees as input tax](https://www.gov.uk/guidance/vat-guide-notice-700#section4).
415 |
416 | - [Streamlined Sales Tax Governing Board](https://www.streamlinedsalestax.org/about-us/about-sstgb) - A multi-states US initiative to automate and standadize sales tax accounting and collection.
417 |
418 | ### European VAT
419 |
420 | - [How to correctly setup SaaS subscriptions to charge VAT in Europe](https://medium.com/slight-pause/how-to-setup-saas-subscriptions-correctly-to-charge-vat-in-europe-d75d857b5d01) - “If you think you can just setup a simple Stripe integration and move on, like us, you'd be sadly mistaken.”
421 |
422 |
423 |
424 | - [Council Directive 2006/112/EC](https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=OJ:L:2006:347:FULL) - European Union reference on the common system of VAT.
425 |
426 |
427 |
428 | - [What does the "Reverse Charge" refer to?](https://news.ycombinator.com/item?id=8767388) - Answer: a provision in which a business transfer the responsibility of VAT handling to the customer.
429 |
430 | ## Invoice
431 |
432 | The invoice materialize a consumed service or purchased product, waiting to be settled by a payment transaction.
433 |
434 | - [On GCP invoiced billing](https://news.ycombinator.com/item?id=17517479) - [Invoiced billing](https://cloud.google.com/billing/docs/how-to/invoiced-billing) is a B2B-friendly payment happening after the service is consumed and an invoice issued. It seems to be a pain to setup on GCP but I suspect is a consequence of trying to reduce (costly) fraud.
435 |
436 | ### Structure
437 |
438 |
439 |
440 | - [Content of EU invoices](https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=OJ:L:2006:347:FULL#d1e6510-1-1) - The information required on a EU invoice is detailed by Article 226, Section 4 (Content of invoices) of Council Directive 2006/112/EC on the common system of VAT.
441 |
442 |
443 |
444 | ### Integrity
445 |
446 | Once issued, an invoice must be immutable.
447 |
448 | - [Digital signatures: how Sleek leverages Cloud HSM to guarantee the integrity of legal documents](https://medium.com/google-developers/digital-signatures-how-sleek-leverages-cloud-hsm-to-guarantee-the-integrity-of-legal-documents-a7bd3b82faf6) - Here is a great way to rely on GCP's HSM to digitally sign documents and provide an immutable audit-trail. Might be applied to invoices as well as contract agreements.
449 |
450 | - [OpenTimestamps](https://opentimestamps.org) - Go beyond the solution above, and timestamp immutable document directly on Bitcoin's blockchain.
451 |
452 | - [Credit note](https://en.wikipedia.org/wiki/Credit_note) - Because an invoice is immutable, the only way to fully or partially cancel it is to produce a credit note.
453 |
454 | ### Generators
455 |
456 | - [Manta](https://github.com/hql287/Manta) - Flexible invoicing desktop app with beautiful & customizable templates.
457 |
458 | - [InvoicePlane](https://github.com/InvoicePlane/InvoicePlane) - A self-hosted open-source application for managing your invoices, clients and payments.
459 |
460 | - [InvoiceGenerator](https://github.com/by-cx/InvoiceGenerator) - Library to generate a simple invoices.
461 |
462 | - [Ruby Invoicing Framework](https://github.com/code-mancers/invoicing) - For generating and displaying invoices (ideal for commercial Rails apps). It allows for flexible business logic; provides tools for tax handling, commission calculation etc.
463 |
464 | - [klirr](https://github.com/sajjon/klirr) - Zero-maintenance and smart FOSS CLI tool for generating beautiful invoices for services and expenses.
465 |
466 | ### Extractors
467 |
468 | - [InvoiceNet](https://github.com/naiveHobo/InvoiceNet) - Deep neural network to extract intelligent information from invoice documents.
469 |
470 | ### Electronic invoices
471 |
472 | - [Factur-X](https://github.com/akretion/factur-x) - Python library to support the e-invoicing standard for France and Germany.
473 |
474 | - [Universal Business Language](https://en.wikipedia.org/wiki/Universal_Business_Language) - Most invoicing software can read and write UBL documents (XML) for data transfer.
475 |
476 | - [EU eInvoicing](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/eInvoicing+HUB) - European standard on electronic invoice.
477 |
478 | - [GOBL](https://gobl.org) - JSON Schema, Open Source Go library, global tax database, with conversion tools, all in one.
479 |
480 | ## Payments
481 |
482 | - [The Best Payment Gateway for Startups](https://web.archive.org/web/20230204235716/http://aynuriev.com/best-payment-gateway-startups/) - A benchmark of top payment providers, their pricing and models.
483 |
484 | - [Avoiding Double Payments in a Distributed Payments System](https://medium.com/airbnb-engineering/avoiding-double-payments-in-a-distributed-payments-system-2981f6b070bb) - RDBMS were build for banks around transactions to solve that specific issue. Then NoSQL came forcing us to carefully implement systems to avoid double spending.
485 |
486 | - [Monzo's bank transfers post-mortem](https://monzo.com/blog/2019/06/20/why-bank-transfers-failed-on-30th-may-2019/) - Or why you should be prepared for and work around gateway provider's outages.
487 |
488 | - [How to Build an Insurance Company](https://www.moderntreasury.com/journal/how-to-build-an-insurance-company) - The importance of payment ops architecture.
489 |
490 | - [EU's Late Payment Directive](https://single-market-economy.ec.europa.eu/smes/sme-strategy/late-payment-directive_en) - European rules on applicable fees for late payments.
491 |
492 | - [High failure rate of Point Of Sale devices in the upper Midwest](https://news.ycombinator.com/item?id=20043944) - The root cause? People wearing a lot of wool in low humidity air, generating a lot of static.
493 |
494 | - How ACH works: A developer perspective, [part 1](https://engineering.gusto.com/how-ach-works-a-developer-perspective-part-1-339d3e7bea1), [part 2](https://engineering.gusto.com/how-ach-works-a-developer-perspective-part-2-7a890638c4dd), [part 3](https://engineering.gusto.com/how-ach-works-a-developer-perspective-part-3-cd98728cf31f), [part 4](https://engineering.gusto.com/how-ach-works-a-developer-perspective-part-4-718a48cb8d2c), [part 5](https://engineering.gusto.com/how-ach-works-a-developer-perspective-part-5-1d998bbcd82c).
495 |
496 | - [Handling system failures during payment communication](https://blogs.dropbox.com/tech/2017/09/handling-system-failures-during-payment-communication/) - Dropbox's experience trying to account for an unreliable payment provider.
497 |
498 | - [Why was I charged?](https://wpchrg.wordpress.com) - Under a constant stream of user complaints about payments, WordPress created a dedicated subdomains to help customers understand unexpected transactions. The trick was to add this URL directly in the bank statement.
499 |
500 | - [Hyperswitch](https://github.com/juspay/hyperswitch) - Open-source backend for payment processing.
501 |
502 | - [moov](https://github.com/moov-io) - Open-source infrastructure for financial technology.
503 |
504 | - [Fintech Open Source Foundation](https://github.com/finos) - Another set of open-source projects for financial projects.
505 |
506 | ### Receipt
507 |
508 | A receipt materialize the payment transaction.
509 |
510 | - [The humble receipt gets a brilliant redesign](https://susielu.com/data-viz/reviziting-the-receipt) - When a Netflix data engineer revisit receipts.
511 |
512 | - [The long, long history of long, long CVS receipts](https://www.vox.com/the-goods/2018/10/10/17956950/why-are-cvs-pharmacy-receipts-so-long) - “CVS is a drugstore much like other drugstores, with one important difference: The receipts are very long.”
513 |
514 | ### Credit Cards
515 |
516 | The most popular payment device.
517 |
518 | - ['Is that even legal?': Companies may be sharing new credit or debit card information without you knowing](https://www.cbc.ca/news/business/banking-information-shared-with-third-parties-1.5102931) - Some credit and debit card companies have "updating service" that allows new account numbers and expiry dates to be shared with merchants. Visa's implementation is called [VAU](https://developer.visa.com/capabilities/vau) and Mastercard's is [ABU](https://developer.mastercard.com/product/automatic-billing-updater-abu/).
519 |
520 | - [Strong Customer Authentication](https://stripe.com/guides/strong-customer-authentication) - [Payment Services Directive](https://en.wikipedia.org/wiki/Payment_Services_Directive) 2, explained.
521 |
522 | - [Address Verification System](https://en.wikipedia.org/wiki/Address_Verification_System) - A system checking the matching of customer's billing addresses with the one associated with the credit card.
523 |
524 | - [pci-blackbox](https://github.com/pjfoley/pci-blackbox) - PCI-DSS compliant card system built on PostgreSQL and PL/pgSQL.
525 |
526 | ### Bank Accounts
527 |
528 | The old-fashioned way of payment: by the way of banks.
529 |
530 | - [A (shallow) dive into the American banking system](https://blog.yossarian.net/2019/12/25/A-shallow-dive-into-the-American-banking-system) - Collection of miscellaneous notes primarily focused on the common cases of routable accounts, i.e. checking and savings.
531 |
532 | - [Open IBAN](https://openiban.com) - Free and public IBAN validation and calculation webservice.
533 |
534 | - [Swift Codes](https://bank.codes/swift-code/) - Swift / BIC codes for personal use only.
535 |
536 | - [Swift Codes Repository](https://github.com/PeterNotenboom/SwiftCodes) - A repository that seems to scrape the website above.
537 |
538 | - [EPC QR code](https://en.wikipedia.org/wiki/EPC_QR_code) - EU standard for QR codes used to transfer money between bank accounts via SEPA.
539 |
540 | ### Online Payments
541 |
542 | The usual money transfer services.
543 |
544 | - [UPI 101: The Basics](https://blog.setu.co/articles/upi-101-the-basics) - “In this article, we will learn about India's Unified Payments Interface. A four-year-old payment scheme that has been accounting for 40-45% of digital payments across India.”
545 |
546 | - [20 years of payment processing problems](https://kaimi.io/en/2022/07/20-years-of-payment-processing-problems-en/) - A huge collection of everything that went wrong, and still is, with payment APIs from the past 2 decades. Any issue exposed in this article that gets unaddressed will end up as stolen money.
547 |
548 | - [The untold story of Stripe](https://www.wired.co.uk/article/stripe-payments-apple-amazon-facebook) - In which we learn that “once turnover hit a certain level, Paypal automatically put the business on a 21 to 60 day rolling reserve, meaning that up to 30 per cent of a company's revenue could be locked up for up to two months.”
549 |
550 | - [Idempotency in the context of payments](https://developers.google.com/standard-payments/reference/idempotency) - “Idempotency prevents race conditions. Idempotency dictates that multiple identical requests from the same client do not result in a different final state.”
551 |
552 | - [Optimizing payments with machine learning](https://dropbox.tech/machine-learning/optimizing-payments-with-machine-learning) - Describes a classic payment workflow, then how machine learning can replace hard-coded business rules and fine-tune the payment failures/retries loop to increase the success rates of charges.
553 |
554 | ## Fraud
555 |
556 | There's monetary incentives to exploit your business. Be prepared to fight hordes of fraudsters and shady users.
557 |
558 | - [Detecting fraudulent activity in a cloud using privacy-friendly data aggregates](https://arxiv.org/pdf/1411.6721v1.pdf) - Discusses a method to detect fraudulent activity (launching DDoS attacks, Bitcoin mining, …) by using non-intrusive, privacy-friendly data: billing data.
559 |
560 |
561 |
562 | - [Awesome List of IAM: Fraud links](https://github.com/kdeldycke/awesome-iam#fraud) - Section dedicated to fraud management related to user accounts, from our sister repository.
563 |
564 |
565 |
566 | - [Driving Global Fraud Losses Down While Empowering Business Growth](https://youtu.be/yJKWpTBVTiI?t=60) - In this talk by Uber Eats, we learn from the biggest payment processor that “growing businesses with declining loss rates is extremely rare in the industry”. Also, fraud can takes several forms: chargebacks on non-perishable goods, promo abuse, refunds…
567 |
568 | - [KYC and AML: beyond the acronyms](https://www.bitsaboutmoney.com/archive/kyc-and-aml-beyond-the-acronyms/) - KYC is nuanced and fuzzy, because it is a stochastic process to reduce risk.
569 |
570 | - [Awesome Fraud Detection Research Papers](https://github.com/benedekrozemberczki/awesome-fraud-detection-papers) - Papers sourced from several conferences on all sort of fraud: credit card, payment transactions, loans, customs inspections, money laundering networks, and more.
571 |
572 | ### Cards
573 |
574 | The majority of fraud is exploiting the most common popular payment device: credit cards.
575 |
576 | - [Reproducible Machine Learning for Credit Card Fraud detection](https://fraud-detection-handbook.github.io/fraud-detection-handbook/) - A practical handbook on how to identify patterns in transactions.
577 |
578 | - [How I Stopped a Credit Card Thief From Ripping Off 3,537 People – and Saved Our Nonprofit in the Process](https://www.freecodecamp.org/news/stopping-credit-card-fraud-and-saving-our-nonprofit/) - Describe a fraud technique known as "card testing", in which massive batch of stolen cards are checked for their validity against your API.
579 |
580 | - [How Candy Japan got credit card fraud somewhat under control](https://www.candyjapan.com/behind-the-scenes/how-i-got-credit-card-fraud-somewhat-under-control) - Suggestions involved either [warning signals](https://www.candyjapan.com/behind-the-scenes/fraudulent-transaction-warning-signs) for trying to guess which orders might be fraud, or countermeasures to try to make things harder for the fraudsters.
581 |
582 | - [Five Fun Fraud Facts](https://web.archive.org/web/20220327085654/https://blog.sift.com/2013/five-ecommerce-fraud-facts/) - Another tiny collection of features we can feed to a ML system to detect fraud. Comments on HN also unearthed [more qualifying signals](https://news.ycombinator.com/item?id=6376350) and [derived geodata on the transaction](https://news.ycombinator.com/item?id=6376221).
583 |
584 | - [Credit Card Fraud Detection using Autoencoders in Keras](https://medium.com/@curiousily/credit-card-fraud-detection-using-autoencoders-in-keras-tensorflow-for-hackers-part-vii-20e0c85301bd) - Tutorial on how to rely on anomaly detection to implement suspicious card transactions.
585 |
586 | - [Training an ML model to score chargebacks](https://threadreaderapp.com/thread/1315452323330621440.html) - An example of a platform's network effect, which allows to predict the likelihood of winning a dispute.
587 |
588 | - [How credit card thieves use free-to-play apps to launder gains](https://kromtech.com/blog/security-center/digital-laundry) - To prevent abuses, service provider must strengthen both credit card verification and the account creation process.
589 |
590 | ### Trust Score
591 |
592 | Synthetic score based on a collection of signals are often the best proxy of user's trustworthiness. Customer support most of the time rely on them to take action when these actions are not triggered automatically.
593 |
594 | - [GCP improved account management policies to better support customers](https://cloudplatform.googleblog.com/2018/07/improving-our-account-management-policies-to-better-support-customers.html) - Or why relying too much on fraud automation might lead to disgruntled users.
595 |
596 | - [Digital Ocean's Update on Customer Shutdown Incident](https://blog.digitalocean.com/an-update-on-last-weeks-customer-shutdown-incident/) - Aggressively shutting down user servers is good from a business point of view to prevent fraudster abusing free resources, until it's not.
597 |
598 | - [Awesome Credit Modeling](https://github.com/mourarthur/awesome-credit-modeling#readme) - How to use statistical methods to classify applicants into categories to reduce risks. Lots of inspiration and research papers there to improve general scoring.
599 |
600 | ### Statistics
601 |
602 | Best tools to automate fraud detection.
603 |
604 | - [Benford's law](https://en.wikipedia.org/wiki/Benford's_law) - Digit distribution can be a signal of accounting fraud.
605 |
606 | - [Integer percentages as electoral falsification fingerprints](https://arxiv.org/pdf/1410.6059.pdf) - In the same spirit as above, this paper show that frequency of reported round numbers in election is a signal of man-made anomalies. Might be applicable in some fraud-fighting area.
607 |
608 | - [Huber loss](https://en.wikipedia.org/wiki/Huber_loss) - “A loss function used in robust regression, that is less sensitive to outliers in data than the squared error loss.”
609 |
610 | - [Peak Detection in the Python World](https://blog.ytotech.com/2015/11/01/findpeaks-in-python/) - Simple way to detect outliers.
611 |
612 | - [Method to check if you swapped 2 digits](https://news.ycombinator.com/item?id=39021273) - Standard manual accounting trick employed when isolating an error in a double ledger.
613 |
614 | ### Billing
615 |
616 | - [More than 600 million users installed Android 'fleeceware' apps from the Play Store](https://www.zdnet.com/article/more-than-600-million-users-installed-android-fleeceware-apps-from-the-play-store/) - A new kind of fraud, in which apps silently keep charging users after the end of the trial period.
617 |
618 | - [CEO Fraud](https://www.knowbe4.com/ceo-fraud) - A billing team responsible for collecting payment is prey to this kind of fraud, in which the CEO is impersonated to commend exceptional payment transactions.
619 |
620 | - [The Challenges of Operating a Computing Cloud and Charging for its Use](https://web.stanford.edu/class/cs349d/docs/theimer.pdf) - Skip the first 90% of this presentation by an AWS VP (which is about general system reliability). The last four slides are a good summary of what billing cloud services entails, especially the use of soft quotas to limit fraud.
621 |
622 | - [Fraud in Telephony Networks](http://www.s3.eurecom.fr/docs/eurosp17_sahin.pdf) - Most of telephony frauds gravitates around billing and the metering of micro-transactions. This paper feature a taxonomy (on page 6) differentiating the root causes, vulnerabilities, exploitation techniques, and the way fraudsters can benefits from them.
623 |
624 | ## UX/UI
625 |
626 | Users gets easily angry when it comes to money. UX and UI might helps a lot to reduce frustration.
627 |
628 | - [Apple In-app purchase Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/in-app-purchase#Autorenewable-subscriptions) - Guide and recommendation on how to make [auto-renewable subscriptions](https://developer.apple.com/app-store/subscriptions/) user-friendly.
629 |
630 | - [Which has a higher conversion rate: A single long ecommerce checkout form or a multi-step one?](https://capitalandgrowth.org/questions/2055/which-has-a-higher-conversion-rate-a-single-long-e.html) - Focus first on other things in the cart, like easing anxiety and second-guessing by adding reassurance (trust marks, testimonials) near the credit card and completion steps, as well as some guarantee language that you may have used earlier in the product exploration process.
631 |
632 | - [We tried to make billing backendless](https://useautumn.com/blog/backendless) - Failed attempt to move the billing experience by from backend to frontend because of security.
633 |
634 | ## Business Intelligence
635 |
636 | As stakeholder of the billing pipeline, you sat on all the critical data to measure and report on the health of the business.
637 |
638 | ### Metrics
639 |
640 | Definition and collection of Key Performance Indicators (KPIs) worth monitoring.
641 |
642 | - [Startup financial models - 12 templates compared for SaaS](https://www.stephnass.com/blog/startup-financial-model) - A great source of inspiration to get better visibility in your operations.
643 |
644 | - [16 Startup Metrics](https://a16z.com/2015/08/21/16-metrics/) - The 2 critical metrics being Customer Acquisition Cost (CAC) and Customer Lifetime Value (CLV).
645 |
646 | - [Thinking about growth and profit](https://jlongster.com/thinking-growth-profit) - Discuss the relationship between investments, profit and growth, and how it influence decisions on pricing, free trials and plan structure.
647 |
648 | - [A Quantitative Approach to Product Market Fit](https://tribecap.co/a-quantitative-approach-to-product-market-fit/) - Metrics produced above have a greater reach, as they're used as important signals to validate product-market fit.
649 |
650 | - [Startup growth calculator](http://growth.tlb.org) - Simple yet effective interactive profitability calculator for startups.
651 |
652 | - [An Overview of Visa](http://minesafetydisclosures.com/blog/2019/7/23/part-ll-an-overview-of-visa) - Great breakdown of Visa business models and metrics.
653 |
654 | - [The SaaS Financial Model You'll Actually Use](https://web.archive.org/web/20230205234207/https://baremetrics.com/blog/saas-financial-model) - A complete tour of the financials of a startup, which gives you extra-context on how the metrics you produce fit into the larger picture.
655 |
656 | ### Customer Lifetime Value
657 |
658 | How much value do you produce per customer? The Customer Lifetime Value (CLV, or LTV for Life-Time Value) quantify that. Understanding and acting on it is the most important part of your business's sales efforts.
659 |
660 | - [You're all calculating churn rates wrong](https://medium.com/swlh/youre-all-calculating-churn-rates-wrong-cbab072cd992) - “On the surface, churn rate may seem like a natural proxy for changes in customer lifetimes. Let's dig into why that is not true.” Churn rate is not a meaningful metric to compute CLV: during the customer lifetime, the churn probability is not constant. Most of the time because of your free trial and vouchers. This article illustrate the influence of the distribution used to model the probability of a customer quitting.
661 |
662 | - [How to project customer retention](https://faculty.wharton.upenn.edu/wp-content/uploads/2012/04/Fader_hardie_jim_07.pdf) - A seminal paper, with a stronger approach compared to the one above: [the exponential distributions is replaced by a geometric model](https://news.ycombinator.com/item?id=24833319), which is better suited to discrete time intervals like monthly contracts, the former being more appropriate to continuous time process.
663 |
664 | - [Survival Analysis For Customer Retention](https://two-wrongs.com/survival-analysis-for-customer-retention.html) - Illustrates how retention can be better modelled using a survival function like [Kaplan–Meier survival curves](https://two-wrongs.com/bootstrapping-kaplan-meier-confidence-intervals.html).
665 |
666 | - [RFM (customer value)](https://en.wikipedia.org/wiki/RFM_%28customer_value%29) - A refined model of CLV, used to segment users based on Recency, Frequency and Monetary value.
667 |
668 | - [Churn Prediction](https://towardsdatascience.com/customer-churn-prediction-with-text-and-interpretability-bd3d57af34b1/) - “How to use Python in a simplistic way to fuel your company's growth by applying the predictive approach to all your actions.” Relies on XGBoost binary classification.
669 |
670 | - [PyMC-Marketing](https://github.com/pymc-labs/pymc-marketing) - A full-featured Python package to analyze your users based on their "alive" and "dead" states.
671 |
672 | - [`retentionizer`](https://github.com/chrisclark/retentionizer) - Python package to show the projected retention rates for each cohort and calculate the LTV of a given customer in that cohort.
673 |
674 | ### Data Engineering
675 |
676 | To industrialize data production and consumption, your need data engineers to clean up, persist and consolidate data. Only after you get these data foundations you might think of onboarding data scientists.
677 |
678 | - [AI vs Data Science vs Data Engineering](https://web.archive.org/web/20171009002725/https://blog.insightdatascience.com/how-emerging-ai-roles-fit-in-the-data-landscape-d4cd922c389b?gi=ebcf517502c7) - “Data Engineers build data pipelines and infrastructure to ensure a constant availability of transformed data. Data Scientists analyze and build models from these data to develop new product features or drive the bottom line of the business.” As for AI professionals, their focus is on cognitive automation.
679 |
680 | - [Ten Ways Your Data Project is Going to Fail](https://www.martingoodson.com/ten-ways-your-data-project-is-going-to-fail/) - You don't need data scientists. “For ETL, hire data engineers. For reporting, hire BI analysts. The end.”
681 |
682 | - [Cargo cult data science](http://blog.richardweiss.org/2017/07/25/data-science-in-organizations.html) - “Data science is best viewed as a form of company culture, rather than a set of technologies. However, many firms will try to create that company culture by acquiring data-science technology, rather than working on their culture.”
683 |
684 | - [Why not use Double or Float to represent currency?](https://web.archive.org/web/20250524184249/https://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency/3730040#answer-3730040) - Because of precision: floats and doubles cannot accurately represent the base 10 multiples that we use for money.
685 |
686 | - [Never Use Floats for Money](https://husobee.github.io/money/float/2016/09/23/never-use-floats-for-currency.html) - “This is precisely the problem we have when trying to represent 10^-1, or 0.1 in binary. There is not an exact binary representation of 0.1 or 0.01.”
687 |
688 | - [The Soul of an Old Machine: Revisiting the Timeless von Neumann Architecture](https://ankush.dev/p/neumann_architecture) - Floats were suspicious even before the first general-purpose computer (EDVAC) was built: “Von Neumann wasn't entirely sold on why we might need floating-point numbers. He was quite vocal in his critique of floating-point numbers.” The author of this article complement this critique by illustrating the issue of precision and rounding.
689 |
690 | - [European Spreadsheet Risks Interest Group - Horror Stories](https://eusprig.org/research-info/horror-stories/) - A collection of cases in which uncontrolled and untested spreadsheet models led to lost revenue, mispricing, poor decision making, fraud and systemic financial failure.
691 |
692 | ### Tools
693 |
694 | Software to build visualizations, dashboards, SQL queries and drill down into data.
695 |
696 | - [Practical Business Python](https://pbpython.com) - A blog collecting and spreading ideas on how to use Python more effectively in the business setting.
697 |
698 | - [`redash`](https://github.com/getredash/redash) - Connect and query your data sources, build dashboards to visualize data and share them with your company.
699 |
700 | - [Metabase](https://github.com/metabase/metabase) - An open source solution to explore and visualize data and supports lots of databases.
701 |
702 | - [Apache Superset](https://github.com/apache/incubator-superset) - Enterprise-ready business intelligence web application.
703 |
704 | - [Meltano](https://github.com/meltano/meltano) - Open source convention-over-configuration product for the whole data lifecycle, all the way from loading data to analyzing it.
705 |
706 | ## Competitive Analysis
707 |
708 | A bunch of resources to keep track of the current status and progress of all companies operating in the domain.
709 |
710 | - [Patents on billing systems of the dot-com era](https://news.ycombinator.com/item?id=34773821) - All of them have been abandoned and constitute prior art. This means there is nothing to prevent anybody to implement or commercialize these concepts.
711 |
712 | - “You need a slightly more sophisticated developer team to cobble together a billing platform” ([source](https://www.techemails.com/i/124009734/google-pms-on-stripe)) - Google's Product Director take on building billing systems: you need a certain kind of engineers to tackle that domain. It is not for everyone.
713 |
714 | ### Cloud providers
715 |
716 | - [AWS Cost Management announcements](https://aws.amazon.com/about-aws/whats-new/aws-cost-management/) - The source of all new features added to the billing perimeter.
717 |
718 | - [AWS reserved instances vs saving plan](https://web.archive.org/web/20240602133657/https://www.prosperops.com/wp-content/uploads/2022/01/ris_and_savings_plans.png) - A feature matrix of the different scheme and their average dicounts.
719 |
720 | - [GCP billing release notes](https://cloud.google.com/billing/docs/release-notes) - Latest changes of GCP billing features.
721 |
722 | - [GCP billing news](https://www.gcpweekly.com/gcp-resources/tag/billing/) - From the unofficial Google Cloud Platform newsletter.
723 |
724 | - [More choice, less complexity: New Compute Engine pricing options on tap](https://cloud.google.com/blog/products/compute/more-choice-less-complexity-new-compute-engine-pricing-options-on-tap) - A wrap-up of recent GCP pricing features.
725 |
726 | - [Orbitera](https://en.wikipedia.org/wiki/Orbitera) - GCP's billing subsidiary.
727 |
728 | - [DigitalOcean Billing changelog](http://docs.digitalocean.com/release-notes/billing/) - All the latest billing updates on DO.
729 |
730 | ## History
731 |
732 | - “Larry Page went to U of M and used the Michigan Terminal System. (…) when Google was working on App Engine, Page took inspiration from MTS and would exhort engineers to follow its example. (…) when I look at my AWS and GCP bills now, it feels very familiar!” ([source](https://news.ycombinator.com/item?id=35123587)) - The direct filiation between old-school university mainframes and current cloud services.
733 |
734 | - [Product Development as Iterated Taste](https://commoncog.com/product-development-iterated-taste/) - AWS sacrificed the simplicity of subscription pricing for S3 and went instead with a safe cost-following strategy because they had no clue how the users will use their service.
735 |
736 | - [£sd computing](https://en.wikipedia.org/wiki/%C2%A3sd#Computing) - The IBM 1401 mainframe (1959) optionally supported pounds/shillings/pence (£sd) currency arithmetics in hardware.
737 |
738 | - [Engineering and Operations in the Bell System](http://bitsavers.trailing-edge.com/communications/westernElectric/books/Engineering_and_Operations_in_the_Bell_System_2ed_1984.pdf) - Starting at page #445, the "10.5 Billing Equipment and Systems" section describe the history and technical evolutions of Bell's phone calls metering and pricing.
739 |
740 | - [The vanished grandeur of accounting](https://www.bostonglobe.com/ideas/2014/06/07/the-vanished-grandeur-accounting/3zcbRBoPDNIryWyNYNMvbO/story.html) - Accounting paintings were a significant genre in Dutch art.
741 |
742 | - [Graphic methods for presenting facts](https://archive.org/details/graphicmethodsfo00brinrich/page/336/mode/2up?view=theater&ui=embed&wrapper=false) - A way to optimize pricing using a physical model made in plaster of Paris, from 1914.
743 |
744 | ## Humour
745 |
746 | Billing is not funny.
747 |
748 | - [Detax](https://detax.framer.website) - A site mockup of an tax avoidance product for small businesses.
749 |
750 | ## Contributing
751 |
752 | Your contributions are always welcome! Please take a look at the [contribution guidelines](.github/contributing.md) first.
753 |
754 | ## Footnotes
755 |
756 | The [header image](https://github.com/kdeldycke/awesome-billing/blob/main/assets/awesome-billing-header.jpg) is based on a modified [photo](https://unsplash.com/photos/u2zSzMTwIjQ) by [Denny Müller](https://unsplash.com/@redaquamedia).
757 |
758 |
759 |
760 | [1]: [*Sapiens: A Brief History of Humankind*](https://www.amazon.com/dp/0062316095?_encoding=UTF8&psc=1&linkCode=ll1&tag=kevideld-20&linkId=71ccb002da0dbe49c502954960175b66&language=en_US&ref_=as_li_ss_tl) (Harper, 2015). [[↑]](#intro-quote-ref)
761 |
--------------------------------------------------------------------------------