DEV Community

a353551071
a353551071

Posted on

Modeling SCHD's dividend growth, in TypeScript

SCHD (Schwab's U.S. Dividend Equity ETF) shows up on every "best dividend ETF" list, but rarely for the reason that actually matters: its dividend grows. The starting yield is modest — somewhere in the 3–4% neighborhood — yet SCHD has raised its dividend on the order of ~10–12% per year over its life. That's the whole game. A flat 6% yield pinned to a share count that never moves eventually gets lapped by a 3.5% yield that grows and compounds.

I wanted to make that math tangible, so I built a dedicated SCHD dividend calculator — and the engine behind it is the same tiny TypeScript library I open-sourced: dividend-math.

The model

The core is one pure function, dripCalculator, that simulates year by year:

  1. Dividends at the current yield on the current share count.
  2. Reinvest those dividends into more shares at the current price.
  3. Grow the price by priceGrowthPct, and — the part that matters for SCHD — grow the dividend itself by dividendGrowthPct.
import { dripCalculator } from 'dividend-math';

// A SCHD-shaped scenario: modest starting yield, meaningful annual dividend growth
const result = dripCalculator({
  initialInvestment: 10000,
  price: 80,
  dividendYieldPct: 3.5,
  dividendGrowthPct: 11,   // SCHD's dividend has grown ~10-12%/yr historically
  priceGrowthPct: 9,
  monthlyContribution: 0,
  years: 15,
});
// → { shares, finalPrice, finalValue, totalInvested, totalDividends, finalAnnualDividendIncome }
Enter fullscreen mode Exit fullscreen mode

The numbers above are illustrative — a SCHD-shaped profile, not a forecast. SCHD pays quarterly, and the live calculator handles the quarterly cadence and lets you plug in real figures. The point of the model is the shape, not the decimals.

Why growth beats a fat yield

The result that surprises people: after 15 years the annual dividend income on that position is several multiples of year one — not because the yield is high, but because the dividend grew ~11% a year and every reinvestment bought shares that then threw off more dividend.

This is why a "good" yield for a holding you intend to keep is usually 3–5%, not 8%+. A yield that high often means the price collapsed (yield = dividend ÷ price, so a crashing price inflates the yield) or the payout is unsustainable. SCHD's appeal is the opposite: a moderate, growing dividend funded by real earnings.

That's also why the calculator pairs yield with the payout ratio — a high yield you can't trust is worse than a lower one you can.

Pure functions, one source of truth

Every formula is a pure function — dividendYield, payoutRatio, dripCalculator — so the edge cases (zero price, zero growth, the geometric-series term when growth is zero) are pinned down by unit tests. The same dripCalculator drives the DRIP page, the SCHD and QQQI ETF calculators, and the monthly-income page on dividendpayoutcalculator.com. One implementation, no drift between pages.

Run it

This is a math/engineering post, not financial advice. Dividends aren't guaranteed and past growth doesn't predict future results — use the calculator to model scenarios, not to pick tickers.

Anything you'd add to the model — tax drag, yield-on-cost tracking, variable contribution timing? Curious how you'd extend it.

Top comments (0)