Savings that depend on “whatever’s left over at the end of the month” tend to end up being nothing. Savings that happen the day money arrives tend to actually happen.
| Account | % of deposit |
|---|---|
| Tax savings | 15% |
| Emergency fund | 10% |
| Retirement | 10% |
| Checking (spend/pay) | 65% |

on_payment_received:n transfer(15%, "tax_savings")n transfer(10%, "emergency_fund")n transfer(10%, "retirement")

Set it up once, ignore it after
Most banks with sub-accounts support rules like this natively. Where they don’t, a same-day scheduled transfer is a fine substitute — the goal is removing the decision, not the mechanism.
