The Debt Snowball method is a debt reduction strategy where you pay off your debts from smallest balance to largest balance. While it may not be the most mathematically efficient method (that would be the Debt Avalanche method), it can be highly motivating due to the quick wins you experience by eliminating smaller debts faster.
Enter Your Debt Information
How the Debt Snowball Method Works
The Debt Snowball method focuses on psychological wins to keep you motivated throughout your debt payoff journey. Here's how it's applied:
List Your Debts: Write down all your debts, excluding your mortgage (if you have one).
Order by Balance: Arrange your debts from the smallest balance to the largest balance.
Pay Minimums on All but Smallest: Make only the minimum payments on all your debts except the one with the smallest balance.
Attack the Smallest: Put as much money as you can towards the debt with the smallest balance. This includes its minimum payment plus any extra money you can afford (like the "Extra Monthly Payment" in the calculator).
Roll Over Payments: Once the smallest debt is paid off, take the money you were paying towards it (its minimum payment + any extra) and add it to the minimum payment of the *next* smallest debt. This creates a larger "snowball" of payment for the next debt.
Repeat: Continue this process, rolling over the entire amount paid on each previous debt into the payment for the next debt in line, until all debts are paid off.
The calculator above simulates this process by taking your debts, ordering them, and calculating how long it will take to pay them off given your total monthly payment. The "Extra Monthly Payment" is added to the smallest debt's minimum, and then rolled over to the next debt once it's cleared.
Example: If you have three debts: $500 at $25/month, $2000 at $50/month, and $7500 at $100/month, and you can afford an extra $100 per month. You'd first attack the $500 debt with $125 ($25 + $100). Once paid, you'd then attack the $2000 debt with $175 ($50 + $125). Finally, you'd attack the $7500 debt with $275 ($100 + $175), until it's gone.
function calculateDebtSnowball() {
var debt1Name = document.getElementById("debt1Name").value;
var debt1Balance = parseFloat(document.getElementById("debt1Balance").value);
var debt1MinPayment = parseFloat(document.getElementById("debt1MinPayment").value);
var debt2Name = document.getElementById("debt2Name").value;
var debt2Balance = parseFloat(document.getElementById("debt2Balance").value);
var debt2MinPayment = parseFloat(document.getElementById("debt2MinPayment").value);
var debt3Name = document.getElementById("debt3Name").value;
var debt3Balance = parseFloat(document.getElementById("debt3Balance").value);
var debt3MinPayment = parseFloat(document.getElementById("debt3MinPayment").value);
var extraPayment = parseFloat(document.getElementById("extraPayment").value);
var resultDiv = document.getElementById("result");
resultDiv.innerHTML = ""; // Clear previous results
if (isNaN(debt1Balance) || isNaN(debt1MinPayment) ||
isNaN(debt2Balance) || isNaN(debt2MinPayment) ||
isNaN(debt3Balance) || isNaN(debt3MinPayment) ||
isNaN(extraPayment)) {
resultDiv.innerHTML = "Please enter valid numbers for all fields.";
return;
}
// Store debts in an array of objects
var debts = [];
if (debt1Balance > 0) debts.push({ name: debt1Name, balance: debt1Balance, minPayment: debt1MinPayment, originalMinPayment: debt1MinPayment });
if (debt2Balance > 0) debts.push({ name: debt2Name, balance: debt2Balance, minPayment: debt2MinPayment, originalMinPayment: debt2MinPayment });
if (debt3Balance > 0) debts.push({ name: debt3Name, balance: debt3Balance, minPayment: debt3MinPayment, originalMinPayment: debt3MinPayment });
// Sort debts by balance (smallest to largest)
debts.sort(function(a, b) {
return a.balance – b.balance;
});
var totalMonths = 0;
var snowballAmount = extraPayment; // Start with the extra payment
var debtPayoffOrder = "
Debt Payoff Order:
";
// Simulate the snowball payoff
for (var i = 0; i < debts.length; i++) {
var currentDebt = debts[i];
var totalPaymentForThisDebt = currentDebt.minPayment + snowballAmount;
var monthsToPayoff = 0;
debtPayoffOrder += "
Paying off " + currentDebt.name + " (Balance: $" + currentDebt.balance.toFixed(2) + ") with $" + totalPaymentForThisDebt.toFixed(2) + " per month.
";
while (currentDebt.balance > 0) {
currentDebt.balance -= totalPaymentForThisDebt;
if (currentDebt.balance < 0) currentDebt.balance = 0; // Ensure balance doesn't go negative
monthsToPayoff++;
totalMonths++;
}
// Add the full payment of the just-paid-off debt to the snowball
snowballAmount += currentDebt.originalMinPayment;
}
debtPayoffOrder += "