《独立开发者的商业指南·资本与退出》1.1 自力更生、借款、股权融资

LedgerLite 需要 30 万美元增长预算:自力更生要 59 个月才能攒够,借款三年利息 9 万美元,股权融资按 pre-money 150 万美元出让 16.7%。本节把三种来源放到现金、成本、控制权和时间四个维度上比较,说明没有一种资金是免费的,只是把代价放在不同位置。

以下情境为教学假设,人物与数字不代表经核实的真实案例。

同一笔 30 万美元的增长预算,可以用三种方式拿到:从自己的现金流里攒、向银行借、把公司的一部分卖给投资人。三种方式都能让钱到账,但它们把代价放在完全不同的位置。自力更生把代价放在时间上,借款把代价放在固定的还款义务上,股权融资把代价放在未来的所有权和治理权上。

这一节只回答一个问题:对 LedgerLite 这样一门年收入 240,240 美元、SDE 130,240 美元的生意,三种来源各自的成本是多少、约束是什么、在什么条件下才值得用。它不比较哪家银行或哪家基金更好,也不给投资建议;利率和估值都是教学假设,换成真实报价时,算法不变。

同一笔钱,三种不同的代价

先把三种来源放在同一张表上。LedgerLite 需要的金额是 300,000 美元;借款按 10% 年利率、三年期、单利计算;股权按 pre-money 1,500,000 美元计算。

来源现在到账到账时间显性成本还款义务让渡控制权
自力更生$059 个月$0无0%
借款(10%,3 年)$300,000立即$90,000 利息$390,0000%
股权(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,33451.6%
10%$30,000$90,000$390,000$10,83454.1%
12%$36,000$108,000$408,000$11,33456.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,000300,000 ÷ 6,00050.0
运营费用加创始人薪酬 $11,000300,000 ÷ 11,00027.3
增长预算加倍到 $12,000300,000 ÷ 12,00025.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 融资的稀释与治理代价 。

常见错误与边界

  1. 用 pre-money 做稀释分母。 300,000 ÷ 1,500,000 = 20.0% 是错的;正确分母是 post-money 1,800,000,稀释是 16.7%。
  2. 把股权融资的现金利息当成零成本。 16.7% 的股份按本轮价值就是 300,000 美元,按 3,000,000 美元退出值 500,000 美元;成本随公司价值上升。
  3. 只看月供,不看占 MRR 的比例。 10,834 美元的月供单独看不大,占 20,020 美元 MRR 的 54.1% 就很重。
  4. 用当前 CAC 线性外推客户数。 300,000 ÷ 140 = 2,143 家只是算术上限;CAC 会随渠道饱和上升,不能写进融资材料当承诺。
  5. 把自力更生当成「没有成本」。 59 个月的时间、月流失 1.5% 带来的存量侵蚀、以及错过的增长窗口,都是成本。
  6. 把借款当成「不稀释所以更好」。 借款不稀释股权,但固定还款会在收入波动时放大风险;增长失败时,风险全部留在创始人身上。
  7. 忽略股权融资的治理条款。 董事会席位、否决权、信息权和优先清算权不在稀释比例里,却会改变控制权;见 1.2 融资的稀释与治理代价 。
  8. 把 300,000 美元当成「能买多少客户」。 更可靠的表述是「能覆盖多少个月的增长预算」;前者依赖不变的 CAC,后者只依赖月度投入。
  9. 在不同阶段用同一套估值口径。 越早融资估值越低,同样金额让渡的股份越多;把种子期的价格和 A 轮的价格放在一起比,会得出错误结论。
  10. 忽略现金流为正是融资谈判的底气。 LedgerLite 的经营现金流 64,299 美元意味着它可以不融资;这个选项本身就是谈判筹码,具体判据见 1.3 什么时候不该融资 。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《移动游戏产品的架构·商业化与发行工程》附录 C 商业化与发行评审清单
  2. 《移动游戏产品的架构·商业化与发行工程》附录 B 双案例商业化事实表
  3. 《移动游戏产品的架构·商业化与发行工程》附录 A 商业化与发行术语速查