以下情境为教学假设,人物与数字不代表经核实的真实案例。
同一笔 30 万美元的增长预算,可以用三种方式拿到:从自己的现金流里攒、向银行借、把公司的一部分卖给投资人。三种方式都能让钱到账,但它们把代价放在完全不同的位置。自力更生把代价放在时间上,借款把代价放在固定的还款义务上,股权融资把代价放在未来的所有权和治理权上。
这一节只回答一个问题:对 LedgerLite 这样一门年收入 240,240 美元、SDE 130,240 美元的生意,三种来源各自的成本是多少、约束是什么、在什么条件下才值得用。它不比较哪家银行或哪家基金更好,也不给投资建议;利率和估值都是教学假设,换成真实报价时,算法不变。
同一笔钱,三种不同的代价
先把三种来源放在同一张表上。LedgerLite 需要的金额是 300,000 美元;借款按 10% 年利率、三年期、单利计算;股权按 pre-money 1,500,000 美元计算。
| 来源 | 现在到账 | 到账时间 | 显性成本 | 还款义务 | 让渡控制权 |
|---|---|---|---|---|---|
| 自力更生 | $0 | 59 个月 | $0 | 无 | 0% |
| 借款(10%,3 年) | $300,000 | 立即 | $90,000 利息 | $390,000 | 0% |
| 股权(pre-money $1.5M) | $300,000 | 立即 | 无现金利息 | 无 | 16.7% |
这张表最容易被误读的是「显性成本」这一列。股权融资的现金利息确实是零,但 16.7% 的股份不是零成本:按本轮价格,这 16.7% 正好值 300,000 美元;公司越成功,它越贵。借款的 90,000 美元利息是固定的,不管公司最后值多少钱;股权的成本随公司价值上升,没有上限。
三种来源对应三种不同的约束。自力更生要求你有正的现金流和足够的耐心;借款要求你有可预测的还款能力,否则固定月供会把公司拖垮;股权融资要求你接受一个新股东,以及随股东而来的信息权、否决权和清算优先权。选择资金来源,本质上是选择一种你能承受的约束。
自力更生:代价是时间
LedgerLite 的年经营现金流是 64,299 美元,扣除设备投资 3,000 美元后,净现金增加 61,299 美元。用净现金增加额去攒 300,000 美元:
300,000 ÷ 61,299 = 4.89 年 ≈ 59 个月
如果只算经营现金流、不扣设备投资,则是 300,000 ÷ 64,299 = 4.67 年 ≈ 56 个月。两种口径给出 56 到 59 个月的区间,差别来自那 3,000 美元设备支出。这个区间就是自力更生的真实到账时间:不是「以后会有」,而是接近五年。
五年的代价不是一句「慢一点」能概括的。LedgerLite 的月流失率是 1.5%,现有 260 家客户每年会自然漏掉一部分;增长窗口、渠道价格和竞争格局都不会在原地等五年。自力更生保住了 100% 的股权和全部决策权,但把增长推迟了将近五年。对一门月流失 1.5% 的订阅生意,时间的成本通常比利息更贵。
自力更生还有一个隐藏约束:它要求创始人的生活费已经从业务里分离出来。LedgerLite 的创始人薪酬是 60,000 美元,已经计入现金流的扣减项;如果为了攒钱把薪酬压到零,机会成本就会从「时间」变成「个人现金储备」。这部分不在公司账上,但它是真实存在的约束。
借款:代价是刚性
借款的成本可以用一个简单公式算清楚:
利息 = 本金 × 年利率 × 年数
月供 = (本金 + 利息) ÷ 月数
按 8%、10%、12% 三档教学假设,300,000 美元、三年期的结果如下:
| 年利率 | 年利息 | 三年利息 | 总还款 | 月供 | 占当前 MRR |
|---|---|---|---|---|---|
| 8% | $24,000 | $72,000 | $372,000 | $10,334 | 51.6% |
| 10% | $30,000 | $90,000 | $390,000 | $10,834 | 54.1% |
| 12% | $36,000 | $108,000 | $408,000 | $11,334 | 56.6% |
LedgerLite 的 MRR 是 20,020 美元。10% 档的月供是 10,834 美元,占当前 MRR 的 54.1%;12% 档是 56.6%。也就是说,借到钱的那一刻,超过一半的月度经常性收入已经被锁定在还款上。订阅收入的波动、客户流失和季节性都会直接影响还款能力;借款不会因为某个月流失变高而减少月供。
借款的最大优点是保住股权。如果这笔钱真的能把 ARR 从 240,240 推到更高的水平,创始人仍然持有 100%,利息只是一笔固定的财务费用。缺点也同样清楚:如果增长没有发生,90,000 美元利息和 390,000 美元总还款仍然要付。借款把「增长失败」的风险从投资人身上移回了创始人身上。
这也是为什么借款适合「可预测的、能产生现金的投入」,而不适合「结果高度不确定的增长实验」。买设备、做一次确定能回款的交付、补充一笔短期营运资金,都是借款的典型场景;把 300,000 美元全部投进一个尚未验证的获客渠道,则是把固定还款压在了一个不确定的结果上。
股权融资:代价是未来
股权融资的算术最简单,也最容易被算错。正确的分母是 post-money,不是 pre-money:
post-money = pre-money + 融资额
稀释比例 = 融资额 ÷ post-money
LedgerLite 的 pre-money 是 1,500,000 美元,融资 300,000 美元,所以 post-money 是 1,800,000 美元,稀释比例是 300,000 ÷ 1,800,000 = 16.7%。如果用 pre-money 做分母,会得到 20.0%,那是把投资人付的钱当成了公司本来就有的价值,高估了稀释。
| 项目 | 金额或比例 |
|---|---|
| pre-money | $1,500,000 |
| 融资额 | $300,000 |
| post-money | $1,800,000 |
| 投资人持股 | 16.7% |
| 创始人持股 | 83.3% |
16.7% 的股份值多少钱,取决于公司最后值多少钱。按本轮价格,它值 300,000 美元;按案例的 3.2× ARR 估值 768,768 美元,它值 128,128 美元;按 3,000,000 美元退出,它值 500,000 美元。
| 退出估值 | 16.7% 对应金额 | 创始人 83.3% |
|---|---|---|
| $768,768 | $128,128 | $640,640 |
| $1,500,000 | $250,000 | $1,250,000 |
| $3,000,000 | $500,000 | $2,500,000 |
这张表说明股权的成本不是固定的 300,000 美元。公司越成功,创始人让渡的那一部分越贵;反过来,如果公司最后不值钱,16.7% 也不值钱。借款的利息是固定的,股权的「利息」是公司增长的一部分。这是股权融资和借款最根本的区别。
那 300,000 美元能换多少个月的增长投入?按不同的月度投入口径:
| 月度投入 | 计算 | 可覆盖月数 |
|---|---|---|
| 当前运营费用 $6,000 | 300,000 ÷ 6,000 | 50.0 |
| 运营费用加创始人薪酬 $11,000 | 300,000 ÷ 11,000 | 27.3 |
| 增长预算加倍到 $12,000 | 300,000 ÷ 12,000 | 25.0 |
按当前运营费用,300,000 美元可以覆盖 50 个月;把创始人薪酬也算进去,是 27.3 个月;如果增长计划把月度投入翻倍到 12,000 美元,则是 25 个月。这三个数字比「能买 2,143 家客户」更可信:按当前 CAC 140 美元,300,000 美元确实能算出 2,143 家客户,是现有 260 家的 8.2 倍,但那个算式假设 CAC 不变、渠道容量无限,现实里两者都会恶化。融资材料里应该写「25 到 50 个月的增长预算」,而不是「8 倍客户数」。
股权融资还带来治理成本:董事会席位、重大事项否决权、月度信息权、优先清算权。这些条款不直接出现在稀释比例里,却会改变谁能在关键时刻做决定。1.2 会把这条账单独算一遍;这里只需要记住:16.7% 不是全部代价,它只是第一张账单。
三种来源不是互斥的
三种来源不是一道单选题。更常见的结构是分段使用:先用自有现金流把业务推到可预测的阶段,再用借款解决一笔确定的投入,最后才用股权融资换取速度。顺序之所以重要,是因为越早融资,估值越低,让渡的股份越多;越晚融资,业务数据越完整,同样一笔钱能换到的股份越少。
把三种来源写成一个比较
下面的 funding.ts 把三种来源拆成四个独立函数:equityTerms 只算 post-money 和稀释,debtTerms 只算利息与月供,bootstrapPlan 只算攒钱月数,compareFunding 把三者放回同一张表。它不把三种来源压成一个「最优」分数,因为现金、成本、控制权和到账时间不能互相换算;它只保证每个维度都按同一笔金额计算。
// file: src/capital/funding.ts
// tier: L1
// verify: node --test test/capital/funding.test.ts
import { type Cents } from "../core/money.ts";
import { type Bps, applyRate, divide } from "../core/rate.ts";
import { type Result, fail, ok } from "../core/result.ts";
export type FundingSource = "bootstrap" | "debt" | "equity";
export type EquityTerms = {
raiseCents: Cents;
preMoneyCents: Cents;
postMoneyCents: Cents;
dilutionBps: Bps;
investorValueCents: Cents;
};
export type DebtTerms = {
principalCents: Cents;
annualRateBps: Bps;
months: number;
interestCents: Cents;
totalRepaymentCents: Cents;
monthlyPaymentCents: Cents;
};
export type BootstrapPlan = {
requiredCents: Cents;
annualFreeCashCents: Cents;
monthlyFreeCashCents: Cents;
monthsToFund: number;
};
export type FundingOption = {
source: FundingSource;
cashNowCents: Cents;
timeToCashMonths: number;
explicitCostCents: Cents;
economicCostCents: Cents;
totalRepaymentCents: Cents;
controlGivenUpBps: Bps;
};
export type FundingComparison = {
requiredCents: Cents;
options: FundingOption[];
};
function positive(value: number, label: string): string | null {
if (!Number.isInteger(value) || value <= 0) {
return `${label} must be a positive integer`;
}
return null;
}
/**
* A priced equity round is quoted in pre-money. The post-money is the
* pre-money plus the new cash, so the investor's share is new cash divided by
* post-money, not divided by pre-money. Dividing by pre-money overstates the
* dilution and is the most common founder-side arithmetic error.
*/
export function equityTerms(
raiseCents: Cents,
preMoneyCents: Cents,
): Result<EquityTerms> {
const raiseError = positive(raiseCents, "raise");
if (raiseError) {
return fail(raiseError);
}
const preMoneyError = positive(preMoneyCents, "pre-money");
if (preMoneyError) {
return fail(preMoneyError);
}
const postMoneyCents = raiseCents + preMoneyCents;
return ok({
raiseCents,
preMoneyCents,
postMoneyCents,
dilutionBps: divide(raiseCents, postMoneyCents),
investorValueCents: raiseCents,
});
}
/**
* Debt is quoted as an annual simple rate in this book. The rate is a teaching
* assumption, not a market quote. Interest is charged on the full principal
* for the whole term, so the monthly payment is total repayment divided by
* months and rounded up to the next cent.
*/
export function debtTerms(
principalCents: Cents,
annualRateBps: Bps,
months: number,
): Result<DebtTerms> {
const principalError = positive(principalCents, "principal");
if (principalError) {
return fail(principalError);
}
if (
!Number.isInteger(annualRateBps) ||
annualRateBps < 0 ||
annualRateBps > 5000
) {
return fail("annual rate must be between 0 and 5000 bps");
}
const monthsError = positive(months, "months");
if (monthsError) {
return fail(monthsError);
}
const annualInterestCents = applyRate(principalCents, annualRateBps);
const interestCents = Math.round((annualInterestCents * months) / 12);
const totalRepaymentCents = principalCents + interestCents;
return ok({
principalCents,
annualRateBps,
months,
interestCents,
totalRepaymentCents,
monthlyPaymentCents: Math.ceil(totalRepaymentCents / months),
});
}
/**
* Bootstrapping does not create cash; it accumulates it from free cash flow.
* The cost is time: the same growth budget arrives only after enough months of
* retained cash. Rounding up matters because a partial month cannot fund the
* full budget.
*/
export function bootstrapPlan(
requiredCents: Cents,
annualFreeCashCents: Cents,
): Result<BootstrapPlan> {
const requiredError = positive(requiredCents, "required amount");
if (requiredError) {
return fail(requiredError);
}
const freeCashError = positive(annualFreeCashCents, "annual free cash");
if (freeCashError) {
return fail(freeCashError);
}
return ok({
requiredCents,
annualFreeCashCents,
monthlyFreeCashCents: Math.round(annualFreeCashCents / 12),
monthsToFund: Math.ceil((requiredCents * 12) / annualFreeCashCents),
});
}
/**
* The three sources are compared on the same required amount. Equity has no
* explicit interest and no repayment date, but it gives up control immediately;
* debt keeps control and creates a fixed repayment; bootstrapping keeps both
* and pays with delay. No single number ranks them, so the comparison returns
* every dimension instead of one score.
*/
export function compareFunding(
input: {
requiredCents: Cents;
preMoneyCents: Cents;
annualRateBps: Bps;
debtMonths: number;
annualFreeCashCents: Cents;
},
): Result<FundingComparison> {
const equity = equityTerms(input.requiredCents, input.preMoneyCents);
if (!equity.ok) {
return fail(equity.error);
}
const debt = debtTerms(
input.requiredCents,
input.annualRateBps,
input.debtMonths,
);
if (!debt.ok) {
return fail(debt.error);
}
const bootstrap = bootstrapPlan(
input.requiredCents,
input.annualFreeCashCents,
);
if (!bootstrap.ok) {
return fail(bootstrap.error);
}
return ok({
requiredCents: input.requiredCents,
options: [
{
source: "bootstrap",
cashNowCents: 0,
timeToCashMonths: bootstrap.value.monthsToFund,
explicitCostCents: 0,
economicCostCents: 0,
totalRepaymentCents: 0,
controlGivenUpBps: 0,
},
{
source: "debt",
cashNowCents: input.requiredCents,
timeToCashMonths: 0,
explicitCostCents: debt.value.interestCents,
economicCostCents: debt.value.interestCents,
totalRepaymentCents: debt.value.totalRepaymentCents,
controlGivenUpBps: 0,
},
{
source: "equity",
cashNowCents: input.requiredCents,
timeToCashMonths: 0,
explicitCostCents: 0,
economicCostCents: equity.value.investorValueCents,
totalRepaymentCents: 0,
controlGivenUpBps: equity.value.dilutionBps,
},
],
});
}
代码里最值得注意的不是乘法,而是三个分母。股权用 post-money 做分母,借款用本金乘年利率再乘年数,自力更生用年自由现金除 12 得到月均攒钱速度。三个分母一旦混用,就会得到「股权很便宜、借款很贵」或者相反的结论;compareFunding 让三个结果并排出现,读者可以自己判断哪一项代价是这门生意承受得起的。
LedgerLite 的特殊之处在于,它的经营现金流为正、CAC 回收期只有 2.2 个月,增长本身并不依赖外部资本。它融资的理由不是「活不下去」,而是「要不要更快」。这个区别决定了它在谈判桌上的位置:如果融资是为了加速,创始人可以拒绝估值过低或治理条款过重的报价;如果融资是为了发工资,拒绝的余地就小得多。
Tidecast 是另一种参照。它年净得 138,171 美元、SDE 121,171 美元,买断制没有续费基数;下一部作品的 120,000 美元预算更适合用自有现金,而不是为一次性收入卖股权。Nord Studio 的 SDE 只有 34,320 美元,服务收入占 72.7%,同样不适合用股权融资去换增长。两个案例的具体算法分别在 1.3 和后续章节展开。
小结
- 自力更生的代价是时间:LedgerLite 用净现金增加 61,299 美元攒 300,000 美元需要约 59 个月,只算经营现金流则约 56 个月。
- 借款的代价是刚性:300,000 美元、10%、三年期的利息是 90,000 美元,总还款 390,000 美元,月供 10,834 美元,占当前 MRR 的 54.1%。
- 股权融资的代价是未来:pre-money 1,500,000 美元、融资 300,000 美元,post-money 1,800,000 美元,稀释 16.7%;这 16.7% 在 3,000,000 美元退出时值 500,000 美元。
- 300,000 美元按当前运营费用能覆盖 50 个月,按含创始人薪酬的月度投入能覆盖 27.3 个月,按翻倍的增长预算能覆盖 25 个月。
- 三种来源不是互斥的;顺序取决于业务阶段,而不是哪种资金「更便宜」。
阅读导航:上一节:目录与学习路径 · 下一节:1.2 融资的稀释与治理代价 。
常见错误与边界
- 用 pre-money 做稀释分母。 300,000 ÷ 1,500,000 = 20.0% 是错的;正确分母是 post-money 1,800,000,稀释是 16.7%。
- 把股权融资的现金利息当成零成本。 16.7% 的股份按本轮价值就是 300,000 美元,按 3,000,000 美元退出值 500,000 美元;成本随公司价值上升。
- 只看月供,不看占 MRR 的比例。 10,834 美元的月供单独看不大,占 20,020 美元 MRR 的 54.1% 就很重。
- 用当前 CAC 线性外推客户数。 300,000 ÷ 140 = 2,143 家只是算术上限;CAC 会随渠道饱和上升,不能写进融资材料当承诺。
- 把自力更生当成「没有成本」。 59 个月的时间、月流失 1.5% 带来的存量侵蚀、以及错过的增长窗口,都是成本。
- 把借款当成「不稀释所以更好」。 借款不稀释股权,但固定还款会在收入波动时放大风险;增长失败时,风险全部留在创始人身上。
- 忽略股权融资的治理条款。 董事会席位、否决权、信息权和优先清算权不在稀释比例里,却会改变控制权;见 1.2 融资的稀释与治理代价 。
- 把 300,000 美元当成「能买多少客户」。 更可靠的表述是「能覆盖多少个月的增长预算」;前者依赖不变的 CAC,后者只依赖月度投入。
- 在不同阶段用同一套估值口径。 越早融资估值越低,同样金额让渡的股份越多;把种子期的价格和 A 轮的价格放在一起比,会得出错误结论。
- 忽略现金流为正是融资谈判的底气。 LedgerLite 的经营现金流 64,299 美元意味着它可以不融资;这个选项本身就是谈判筹码,具体判据见 1.3 什么时候不该融资 。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。