A recurring software cost does not always end permanently. A hosting environment may be turned down between projects, a research tool may sit unused for a quarter, or a yearly service may skip one renewal and return later.
Deleting the Cost is the wrong model for those gaps. It removes the object that holds the billing terms, allocation history, reminders, and earlier records. Replacing the amount with zero is not much better: zero becomes a fake price and makes a temporary activity change look like a vendor pricing decision.
Disclosure: I make MarginDeck. This article describes my own work on the product.
MarginDeck 1.3, released on August 26, 2026, adds Pause and Resume for monthly and yearly Costs. The feature keeps one continuous Cost record while separating two questions:
- What are the price and billing terms?
- During which intervals should those terms produce scheduled estimates?
A pause changes whether expected charges are included. It does not rewrite the subscription's price, cadence, allocation, or earlier history.
A pause begins at an expected charge
Suppose a service normally costs $24 on the 5th of each month. I decide on September 2 that I want it paused from September onward.
The useful boundary is not the day I made the decision. It is the first expected charge affected by that decision:
| User choice | Scheduled result |
|---|---|
| Pause starting September 2 | September 5 is excluded |
| Pause starting September 6 | October 5 is excluded |
| Resume starting December 1 | December 5 is included again |
MarginDeck lets me choose an ordinary calendar date, then previews the first valid expected charge on or after that date. The stored activity boundary is the expected occurrence, not an arbitrary timestamp inside the billing period.
This keeps the rule explainable. A monthly Cost still follows its monthly schedule, and a yearly Cost still belongs in its recorded billing month. Pause does not spread a yearly amount across other months or create a partial charge that the app cannot know.
Billing terms and activity are different histories
Version 1.1.1 introduced dated billing terms so a price or schedule change would not rewrite earlier months. Pause and Resume build on that timeline without adding fake billing stages.
If the service costs $24 before and after a pause, its terms remain $24 monthly. The activity history carries the gap:
| Interval | Billing terms | Activity |
|---|---|---|
| Through September 4 | $24 monthly on the 5th | Active |
| September 5 through December 4 | $24 monthly on the 5th | Paused |
| From December 5 | $24 monthly on the 5th | Active again |
If the vendor also changes the price, cadence, or billing date before the service resumes, I record that separately with Change Amount or Schedule. Resume then uses the terms that are effective on the resumed expected charge.
This prevents Resume from quietly changing two things at once. Activity answers whether the schedule applies; billing terms answer which schedule and amount apply.
For the reasoning behind dated terms, see How to Change a Subscription Cost Without Rewriting History.
Paused estimates and earlier saved records
MarginDeck distinguishes scheduled estimates from amounts that were actually recorded.
During a paused interval, the Cost no longer contributes a scheduled expected charge to:
- Upcoming Costs;
- portfolio and product cost estimates;
- estimated contribution profit;
- recurring burn and cash-runway planning;
- new or refreshed product-plan snapshots that include the paused interval;
- future local reminders for excluded occurrences.
Earlier saved cost records remain attached to the same Cost. Pausing changes scheduled estimates; it does not confirm whether money moved at the provider.
Allocation history stays attached to the Cost
Pause and Resume do not create, delete, or rewrite allocation stages.
There is no amount to allocate for a scheduled occurrence that does not exist during the paused interval. When the Cost resumes, the occurrence uses the allocation that is effective in that month.
For example, a shared tool may belong 60% to Product A and 40% to Product B before the pause, then use a different split by the time it resumes. MarginDeck does not freeze the old allocation merely because the Cost was inactive. It resolves the allocation and billing terms that apply to the resumed month.
This also means a pause does not produce a false Awaiting Allocation amount. Zero scheduled cost during the gap is different from a scheduled cost that has not yet been assigned.
Reminder preference survives the gap
Turning on a local reminder expresses a continuing preference: remind me before this Cost is expected.
Pausing the Cost removes pending reminders for expected charges inside the paused interval, but it does not silently turn the preference off. When the Cost resumes, MarginDeck can schedule future reminders again using the same saved lead time.
The reminder is still local to the Mac and based on the schedule the user recorded. It does not prove that the provider will charge the account, and it does not contact the vendor.
The same disclaimer appears in the Pause and Resume flow:
This only changes MarginDeck's estimates and local reminders. It does not pause, cancel, or resume the service with the provider.
The wording is intentionally repetitive because “Pause Cost” can otherwise sound like a remote subscription-management action. MarginDeck has no such write access.
Past gaps can be recorded without inventing a new Cost
Sometimes I learn about a pause after it has already ended. Creating two separate Costs would preserve the gap, but it would split one obligation into unrelated records.
MarginDeck 1.3 can record a completed past Pause and Resume interval on the same Cost. Before saving, the app identifies the expected-charge boundaries and warns that historical estimates may change.
Future Pause and Resume entries can also be edited or cancelled. A history feature that cannot correct a mistaken date would trade one kind of distortion for another.
The validation rules still prevent overlapping intervals, a Resume before its Pause, consecutive invalid transitions, and Pause or Resume on one-time Costs. An older permanently stopped Cost also remains a separate, non-resumable boundary for compatibility.
Product plans keep their own activity snapshot
When an existing Cost is copied into a saved product plan, MarginDeck stores an independent snapshot of its billing and activity assumptions.
If the source Cost is paused or resumed later, the plan is marked Original cost changed rather than being silently rewritten. The person reviewing the plan decides whether to refresh the assumption.
This follows the same rule introduced with New Product Planning: a saved plan should remain reviewable until the user explicitly changes it. Live operating records and planning assumptions have different responsibilities.
Why this release did not need another store screenshot
Pause and Resume touches many calculations, but it remains a focused supporting feature. Its value is preserving the correctness of existing views rather than introducing a new primary destination in the app.
For MarginDeck 1.3, I kept the existing App Store screenshot set. The release description, What's New text, website explanation, and in-app flow carry the feature without spending a main screenshot on a small control surface.
This was also a useful product-marketing constraint: the amount of implementation work behind a feature does not determine how much visual space it deserves. Screenshots should explain the product's main buying decisions, not document every state the data model can represent.
Disclosure: I am Junhua Jin, the developer of MarginDeck and the author of SwingCodeLab. You can download MarginDeck from the Mac App Store. MarginDeck's scheduled costs, contribution profit, and cash-runway figures are planning estimates based on the records you enter or choose to import.