resource-control/docs/evidence/RESOURCE-WP-0002-demand-and-cost-model-2026-08-10.md
tegwick 2c2a6073ff feat(portfolio): complete RESOURCE-WP-0003 T06 optimization cases and T07 reporting
T06: optimization-case schema, fail-closed evaluator, cadence and decision
template. Every option including the baseline must present all ten decision
fields; one unknown blocks the comparison. Validated on the storage case
(Hetzner computes and loses to Scaleway by EUR 29.14/month on operator labour;
Host Europe blocks on four named gaps) and on the non-storage reef-railiance
k3s rightsizing case (low utilization is real, but nothing is costable while
the railiance01 price is unknown).

T07: portfolio report over coverage, lifecycle, utilization, cost, renewals,
risks, open cases, and next actions, derived only from committed evidence.
Portfolio spend is reported null rather than as a partial sum, unattributed
cost is a named list rather than a spread, and unmeasurable resources are
reported rather than dropped.

RESOURCE-WP-0003 is finished; both cases remain blocked_on_evidence against
live delegated records in other repositories. RESOURCE-WP-0002 is untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 09:28:44 +02:00

2.7 KiB
Raw Blame History

PostgreSQL backup demand and cost model — 2026-08-10

Observed baseline

A read-only query against platform-pg-1 at 2026-08-10T15:54:12Z measured 39,573,871 bytes across connectable databases. pg_stat_wal reported 19,744,568 bytes since 2026-08-10T13:37:53Z, an extrapolated 0.208 GB/day. The cluster is less than one day old, so this is a seed observation rather than a representative trend. No credential value was read or recorded.

The governed requirements are a 30-day recovery window, daily physical base backup, continuous WAL archive, one monthly restore drill, and a complete exit calculation. The scenario inputs live in data/demand/platform-audit-storage.json and deliberately floor demand above the tiny initial observation:

Scenario Initial DB Monthly growth WAL/day Restore egress Labor/month
low 1 GB 5% 0.25 GB 1 GB 0.5 h
base 5 GB 10% 1 GB 5 GB 1 h
high 20 GB 20% 5 GB 20 GB 2 h

The conservative stored-byte formula is 30 × current database size + 30 × daily WAL. It does not claim compression savings. Operator labor is valued at €60/hour; provider-specific labor floors capture relative operational effort. The exit event adds full stored-byte egress plus four operator hours.

Run make forecast for all 12 months, scenarios, and providers. A null total is intentional: it means a required price is unknown and prevents an unknown from silently becoming free.

The catalog also includes self-managed Garage on 13 Host Europe/Hetzner VMs and managed AWS, Azure, Google Cloud, and STACKIT price points. See RESOURCE-WP-0002-expanded-storage-comparison-2026-08-10.md for assumptions and topology warnings.

Calculator rows split monthly_infrastructure_eur from monthly_internal_labor_eur and split internal setup labor from external setup services. The top-level comparison_320gb array provides a normalized running cost at 320 GB using the base request and restore pattern.

Initial comparison

  • Scaleway Standard Multi-AZ is fully calculable at €0.01606/GB-month, with 75 GB/month free egress then €0.01/GB. Prices exclude tax.
  • Hetzner is calculable while usage remains inside its €6.49 monthly minimum, which includes 1 TB storage and 1 TB egress. Excess unit prices still need to be captured before high-growth or exit usage crosses the included quota.
  • Host Europe cannot be calculated until it confirms that the historical S3 Cloud Storage product is currently orderable and supplies a current quote.

Because labor dominates this very small workload, selection should emphasize restore compatibility, independent failure domain, encryption, and exit proof before sub-euro storage differences.