<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://vacua.dev/specifications/engineering-follow-ups/</loc></url><url><loc>https://vacua.dev/</loc></url><url><loc>https://vacua.dev/specifications/incident-postmortems/</loc></url><url><loc>https://vacua.dev/skills/manage-engineering-follow-ups/</loc></url><url><loc>https://vacua.dev/skills/</loc></url><url><loc>https://vacua.dev/specifications/</loc></url><url><loc>https://vacua.dev/skills/write-incident-postmortem/</loc></url><url><loc>https://vacua.dev/skills/prepare-intent-pull-request/</loc></url><url><loc>https://vacua.dev/skills/commit-with-intent/</loc></url><url><loc>https://vacua.dev/skills/configure-intent-project/</loc></url><url><loc>https://vacua.dev/skills/maintain-release-manifest/</loc></url><url><loc>https://vacua.dev/skills/maintain-intent-changelog/</loc></url><url><loc>https://vacua.dev/skills/maintain-intent-changeset/</loc></url><url><loc>https://vacua.dev/tags/ai/</loc></url><url><loc>https://vacua.dev/series/ai-as-an-engineering-instrument/</loc></url><url><loc>https://vacua.dev/tags/engineering-judgment/</loc></url><url><loc>https://vacua.dev/thoughts/repository-evidence-is-not-an-instruction/</loc></url><url><loc>https://vacua.dev/tags/security/</loc></url><url><loc>https://vacua.dev/series/</loc></url><url><loc>https://vacua.dev/tags/</loc></url><url><loc>https://vacua.dev/thoughts/implementation-without-understanding-is-borrowed-code/</loc></url><url><loc>https://vacua.dev/thoughts/ai-should-shorten-the-evidence-loop/</loc></url><url><loc>https://vacua.dev/tags/decision-making/</loc></url><url><loc>https://vacua.dev/series/engineering-decisions-and-leadership/</loc></url><url><loc>https://vacua.dev/tags/engineering-leadership/</loc></url><url><loc>https://vacua.dev/thoughts/quality-needs-a-risk-and-capacity-budget/</loc></url><url><loc>https://vacua.dev/thoughts/choose-a-stack-from-constraints-not-identity/</loc></url><url><loc>https://vacua.dev/thoughts/a-decision-record-needs-a-way-back/</loc></url><url><loc>https://vacua.dev/thoughts/a-short-lived-token-can-still-have-a-large-blast-radius/</loc></url><url><loc>https://vacua.dev/tags/credentials/</loc></url><url><loc>https://vacua.dev/series/software-supply-chain-security/</loc></url><url><loc>https://vacua.dev/tags/software-supply-chain/</loc></url><url><loc>https://vacua.dev/thoughts/a-lockfile-gives-repeatability-not-provenance/</loc></url><url><loc>https://vacua.dev/tags/dependencies/</loc></url><url><loc>https://vacua.dev/thoughts/supply-chain-security-begins-with-who-can-change-the-artifact/</loc></url><url><loc>https://vacua.dev/tags/contracts/</loc></url><url><loc>https://vacua.dev/tags/deployment/</loc></url><url><loc>https://vacua.dev/series/observability-and-deployment/</loc></url><url><loc>https://vacua.dev/tags/operations/</loc></url><url><loc>https://vacua.dev/tags/reliability/</loc></url><url><loc>https://vacua.dev/thoughts/rollback-cannot-restore-a-contract-you-already-removed/</loc></url><url><loc>https://vacua.dev/tags/observability/</loc></url><url><loc>https://vacua.dev/thoughts/observability-must-answer-the-next-operator-question/</loc></url><url><loc>https://vacua.dev/specifications/release-manifest/</loc></url><url><loc>https://vacua.dev/tags/developer-tooling/</loc></url><url><loc>https://vacua.dev/thoughts/from-commit-to-changelog/</loc></url><url><loc>https://vacua.dev/tags/git/</loc></url><url><loc>https://vacua.dev/specifications/intent-changelog/</loc></url><url><loc>https://vacua.dev/series/release-engineering/</loc></url><url><loc>https://vacua.dev/tags/release-engineering/</loc></url><url><loc>https://vacua.dev/specifications/intent-changesets/</loc></url><url><loc>https://vacua.dev/thoughts/unreleased-is-not-a-junk-drawer/</loc></url><url><loc>https://vacua.dev/thoughts/a-pull-request-is-a-review-narrative/</loc></url><url><loc>https://vacua.dev/specifications/intent-pull-requests/</loc></url><url><loc>https://vacua.dev/specifications/intent-commits/</loc></url><url><loc>https://vacua.dev/thoughts/intent-commits/</loc></url><url><loc>https://vacua.dev/thoughts/a-cache-hit-is-not-a-freshness-guarantee/</loc></url><url><loc>https://vacua.dev/tags/caching/</loc></url><url><loc>https://vacua.dev/tags/laravel/</loc></url><url><loc>https://vacua.dev/series/laravel-performance-and-operations/</loc></url><url><loc>https://vacua.dev/tags/performance/</loc></url><url><loc>https://vacua.dev/specifications/project-profile/</loc></url><url><loc>https://vacua.dev/thoughts/octane-removes-repeated-boot-and-adds-state/</loc></url><url><loc>https://vacua.dev/tags/php-runtime/</loc></url><url><loc>https://vacua.dev/tags/databases/</loc></url><url><loc>https://vacua.dev/thoughts/eager-loading-is-not-a-query-shape/</loc></url><url><loc>https://vacua.dev/thoughts/a-worker-count-is-not-a-throughput-plan/</loc></url><url><loc>https://vacua.dev/tags/queues/</loc></url><url><loc>https://vacua.dev/thoughts/cache-the-deployment-not-the-assumption/</loc></url><url><loc>https://vacua.dev/thoughts/a-slow-request-is-not-a-capacity-plan/</loc></url><url><loc>https://vacua.dev/tags/architecture/</loc></url><url><loc>https://vacua.dev/thoughts/boundaries-follow-work-without-becoming-destiny/</loc></url><url><loc>https://vacua.dev/series/service-boundaries-and-ownership/</loc></url><url><loc>https://vacua.dev/tags/systems-design/</loc></url><url><loc>https://vacua.dev/thoughts/enforce-architecture-at-the-cheapest-reliable-layer/</loc></url><url><loc>https://vacua.dev/thoughts/name-the-independent-thing/</loc></url><url><loc>https://vacua.dev/thoughts/a-module-is-cheaper-than-a-network-boundary/</loc></url><url><loc>https://vacua.dev/thoughts/decompose-by-change-not-by-layer/</loc></url><url><loc>https://vacua.dev/thoughts/a-design-is-good-for-a-change-not-in-isolation/</loc></url><url><loc>https://vacua.dev/tags/software-design/</loc></url><url><loc>https://vacua.dev/tags/software-quality/</loc></url><url><loc>https://vacua.dev/tags/testing/</loc></url><url><loc>https://vacua.dev/series/testing-for-confidence/</loc></url><url><loc>https://vacua.dev/thoughts/a-characterization-test-is-a-boundary-not-a-recording/</loc></url><url><loc>https://vacua.dev/tags/test-design/</loc></url><url><loc>https://vacua.dev/thoughts/a-surviving-mutant-is-a-question/</loc></url><url><loc>https://vacua.dev/thoughts/shared-contract-tests-make-substitutability-measurable/</loc></url><url><loc>https://vacua.dev/thoughts/a-mock-fortress-tests-a-call-script/</loc></url><url><loc>https://vacua.dev/thoughts/choose-the-test-boundary-from-the-defect/</loc></url><url><loc>https://vacua.dev/thoughts/coverage-tells-you-what-ran/</loc></url><url><loc>https://vacua.dev/series/commands-events-and-processes/</loc></url><url><loc>https://vacua.dev/tags/domain-driven-design/</loc></url><url><loc>https://vacua.dev/tags/messaging/</loc></url><url><loc>https://vacua.dev/thoughts/test-process-state-not-message-choreography/</loc></url><url><loc>https://vacua.dev/thoughts/process-managers-long-running-business-processes/</loc></url><url><loc>https://vacua.dev/tags/event-driven-architecture/</loc></url><url><loc>https://vacua.dev/thoughts/an-outbox-moves-the-failure-window/</loc></url><url><loc>https://vacua.dev/thoughts/publishing-events-is-not-event-sourcing/</loc></url><url><loc>https://vacua.dev/thoughts/a-domain-event-is-a-fact-not-a-question/</loc></url><url><loc>https://vacua.dev/tags/cqrs/</loc></url><url><loc>https://vacua.dev/thoughts/command-query-separation-vs-cqrs/</loc></url><url><loc>https://vacua.dev/thoughts/a-queued-command-changes-the-contract/</loc></url><url><loc>https://vacua.dev/thoughts/a-command-bus-must-pay-for-its-indirection/</loc></url><url><loc>https://vacua.dev/thoughts/a-valid-command-can-still-be-refused/</loc></url><url><loc>https://vacua.dev/thoughts/a-version-column-is-not-concurrency-control/</loc></url><url><loc>https://vacua.dev/series/application-boundaries-and-persistence/</loc></url><url><loc>https://vacua.dev/tags/concurrency/</loc></url><url><loc>https://vacua.dev/tags/persistence/</loc></url><url><loc>https://vacua.dev/thoughts/loading-state-is-not-creating-it-again/</loc></url><url><loc>https://vacua.dev/thoughts/a-mapper-connects-two-honest-models/</loc></url><url><loc>https://vacua.dev/thoughts/what-repositories-really-do/</loc></url><url><loc>https://vacua.dev/thoughts/a-composition-root-makes-choices-visible/</loc></url><url><loc>https://vacua.dev/tags/object-design/</loc></url><url><loc>https://vacua.dev/thoughts/a-hexagon-is-not-a-directory-layout/</loc></url><url><loc>https://vacua.dev/thoughts/an-open-host-service-is-not-a-published-language/</loc></url><url><loc>https://vacua.dev/series/domain-discovery-and-integration/</loc></url><url><loc>https://vacua.dev/tags/systems-integration/</loc></url><url><loc>https://vacua.dev/thoughts/an-api-cannot-tell-you-who-has-influence/</loc></url><url><loc>https://vacua.dev/thoughts/an-anti-corruption-layer-must-own-the-translation/</loc></url><url><loc>https://vacua.dev/thoughts/a-context-map-must-say-what-the-arrow-means/</loc></url><url><loc>https://vacua.dev/thoughts/integration-patterns-shared-kernel-vs-published-language/</loc></url><url><loc>https://vacua.dev/thoughts/domain-modeling-workshops-eventstorming-in-practice/</loc></url><url><loc>https://vacua.dev/thoughts/demystifying-ddd-aggregates-entities-models-dtos-value-objects/</loc></url><url><loc>https://vacua.dev/series/object-design/</loc></url><url><loc>https://vacua.dev/tags/object-oriented-design/</loc></url><url><loc>https://vacua.dev/thoughts/a-constructor-should-leave-a-usable-object/</loc></url><url><loc>https://vacua.dev/thoughts/null-object-pattern/</loc></url><url><loc>https://vacua.dev/thoughts/law-of-demeter/</loc></url><url><loc>https://vacua.dev/thoughts/tell-dont-ask/</loc></url><url><loc>https://vacua.dev/thoughts/strategy-vs-command-pattern/</loc></url><url><loc>https://vacua.dev/thoughts/composition-vs-inheritance/</loc></url><url><loc>https://vacua.dev/thoughts/dependency-inversion-principle/</loc></url><url><loc>https://vacua.dev/tags/solid/</loc></url><url><loc>https://vacua.dev/thoughts/interface-segregation-principle/</loc></url><url><loc>https://vacua.dev/thoughts/liskov-substitution-principle/</loc></url><url><loc>https://vacua.dev/thoughts/open-closed-principle/</loc></url><url><loc>https://vacua.dev/thoughts/single-responsibility-principle/</loc></url><url><loc>https://vacua.dev/thoughts/a-design-principle-is-a-compressed-failure-history/</loc></url><url><loc>https://vacua.dev/tags/design/</loc></url><url><loc>https://vacua.dev/series/design-before-the-pattern-name/</loc></url><url><loc>https://vacua.dev/tags/principles/</loc></url><url><loc>https://vacua.dev/thoughts/design-becomes-valuable-when-the-next-change-arrives/</loc></url><url><loc>https://vacua.dev/tags/refactoring/</loc></url><url><loc>https://vacua.dev/tags/interfaces/</loc></url><url><loc>https://vacua.dev/thoughts/the-type-a-caller-receives-defines-the-role/</loc></url><url><loc>https://vacua.dev/thoughts/a-method-should-tell-you-what-changed/</loc></url><url><loc>https://vacua.dev/tags/apis/</loc></url><url><loc>https://vacua.dev/tags/state-machines/</loc></url><url><loc>https://vacua.dev/thoughts/construction-should-not-hide-durable-writes/</loc></url><url><loc>https://vacua.dev/thoughts/global-state-makes-local-reasoning-impossible/</loc></url><url><loc>https://vacua.dev/tags/time/</loc></url><url><loc>https://vacua.dev/thoughts/framework-convenience-has-a-boundary/</loc></url><url><loc>https://vacua.dev/tags/frameworks/</loc></url><url><loc>https://vacua.dev/tags/transactions/</loc></url><url><loc>https://vacua.dev/thoughts/dependencies-should-be-visible-at-construction/</loc></url><url><loc>https://vacua.dev/tags/dependency-injection/</loc></url><url><loc>https://vacua.dev/thoughts/a-service-class-can-become-a-procedural-junk-drawer/</loc></url><url><loc>https://vacua.dev/tags/application-services/</loc></url><url><loc>https://vacua.dev/thoughts/a-primitive-can-hide-a-domain-decision/</loc></url><url><loc>https://vacua.dev/tags/domain-modeling/</loc></url><url><loc>https://vacua.dev/tags/validation/</loc></url><url><loc>https://vacua.dev/tags/api-design/</loc></url><url><loc>https://vacua.dev/thoughts/boolean-parameters-hide-different-operations/</loc></url><url><loc>https://vacua.dev/thoughts/invalid-state-should-be-difficult-to-construct/</loc></url><url><loc>https://vacua.dev/tags/invariants/</loc></url><url><loc>https://vacua.dev/thoughts/a-class-name-should-describe-a-role/</loc></url><url><loc>https://vacua.dev/tags/naming/</loc></url><url><loc>https://vacua.dev/series/changing-existing-software/</loc></url><url><loc>https://vacua.dev/tags/compatibility/</loc></url><url><loc>https://vacua.dev/tags/data-migration/</loc></url><url><loc>https://vacua.dev/tags/legacy-code/</loc></url><url><loc>https://vacua.dev/thoughts/stored-data-is-a-caller-you-cannot-find-with-code-search/</loc></url><url><loc>https://vacua.dev/tags/migration/</loc></url><url><loc>https://vacua.dev/tags/services/</loc></url><url><loc>https://vacua.dev/tags/strangler-pattern/</loc></url><url><loc>https://vacua.dev/thoughts/the-strangler-pattern-still-needs-an-exit-plan/</loc></url><url><loc>https://vacua.dev/tags/deprecation/</loc></url><url><loc>https://vacua.dev/thoughts/deprecation-is-a-migration-not-a-warning/</loc></url><url><loc>https://vacua.dev/tags/phpstan/</loc></url><url><loc>https://vacua.dev/thoughts/static-analysis-turns-assumptions-into-questions/</loc></url><url><loc>https://vacua.dev/tags/static-analysis/</loc></url><url><loc>https://vacua.dev/thoughts/a-code-review-should-test-the-decision-not-the-author/</loc></url><url><loc>https://vacua.dev/tags/code-review/</loc></url><url><loc>https://vacua.dev/tags/idempotency/</loc></url><url><loc>https://vacua.dev/thoughts/a-small-change-limits-the-states-a-reviewer-must-hold/</loc></url><url><loc>https://vacua.dev/tags/database-migrations/</loc></url><url><loc>https://vacua.dev/tags/delivery/</loc></url><url><loc>https://vacua.dev/tags/legacy-systems/</loc></url><url><loc>https://vacua.dev/tags/planning/</loc></url><url><loc>https://vacua.dev/thoughts/technical-debt-is-a-change-tax-you-can-name/</loc></url><url><loc>https://vacua.dev/tags/technical-debt/</loc></url><url><loc>https://vacua.dev/thoughts/a-rewrite-needs-a-behavior-ledger/</loc></url><url><loc>https://vacua.dev/tags/rewrites/</loc></url><url><loc>https://vacua.dev/tags/integration/</loc></url><url><loc>https://vacua.dev/thoughts/parallel-implementations-are-not-a-replacement-seam/</loc></url><url><loc>https://vacua.dev/thoughts/a-characterization-test-is-not-a-product-decision/</loc></url><url><loc>https://vacua.dev/tags/product-decisions/</loc></url><url><loc>https://vacua.dev/thoughts/a-characterization-suite-is-scoped-to-a-change/</loc></url><url><loc>https://vacua.dev/thoughts/a-directory-map-is-not-a-redesign-plan/</loc></url><url><loc>https://vacua.dev/thoughts/a-capability-interface-is-smaller-than-a-vendor-client/</loc></url><url><loc>https://vacua.dev/series/integration-without-illusions/</loc></url><url><loc>https://vacua.dev/thoughts/renaming-a-field-is-a-protocol-migration/</loc></url><url><loc>https://vacua.dev/thoughts/a-cache-must-distinguish-empty-from-unavailable/</loc></url><url><loc>https://vacua.dev/thoughts/partial-work-needs-a-child-ledger/</loc></url><url><loc>https://vacua.dev/tags/retries/</loc></url><url><loc>https://vacua.dev/thoughts/retry-budgets-multiply-across-layers/</loc></url><url><loc>https://vacua.dev/thoughts/a-rate-limit-belongs-to-all-the-workers-sharing-it/</loc></url><url><loc>https://vacua.dev/tags/rate-limits/</loc></url><url><loc>https://vacua.dev/thoughts/an-idempotency-key-is-not-an-identity/</loc></url><url><loc>https://vacua.dev/thoughts/a-webhook-delivery-is-not-a-unique-event/</loc></url><url><loc>https://vacua.dev/tags/webhooks/</loc></url><url><loc>https://vacua.dev/thoughts/map-external-data-before-it-enters-your-model/</loc></url><url><loc>https://vacua.dev/tags/mapping/</loc></url><url><loc>https://vacua.dev/tags/payments/</loc></url><url><loc>https://vacua.dev/tags/boundaries/</loc></url><url><loc>https://vacua.dev/tags/data-modeling/</loc></url><url><loc>https://vacua.dev/thoughts/validate-at-the-boundary-you-control/</loc></url><url><loc>https://vacua.dev/thoughts/a-third-party-api-is-an-unreliable-collaborator/</loc></url><url><loc>https://vacua.dev/tags/failure-handling/</loc></url><url><loc>https://vacua.dev/tags/integrations/</loc></url><url><loc>https://vacua.dev/thoughts/an-http-200-does-not-mean-the-operation-succeeded/</loc></url><url><loc>https://vacua.dev/tags/http/</loc></url><url><loc>https://vacua.dev/thoughts/data-outlives-the-code-that-created-it/</loc></url><url><loc>https://vacua.dev/series/data-that-must-survive/</loc></url><url><loc>https://vacua.dev/tags/data-design/</loc></url><url><loc>https://vacua.dev/thoughts/audit-history-is-different-from-application-logging/</loc></url><url><loc>https://vacua.dev/tags/auditing/</loc></url><url><loc>https://vacua.dev/tags/logging/</loc></url><url><loc>https://vacua.dev/thoughts/an-index-must-serve-a-real-query/</loc></url><url><loc>https://vacua.dev/tags/postgresql/</loc></url><url><loc>https://vacua.dev/tags/backfills/</loc></url><url><loc>https://vacua.dev/tags/pagination/</loc></url><url><loc>https://vacua.dev/thoughts/pagination-needs-a-stable-order/</loc></url><url><loc>https://vacua.dev/tags/lifecycle/</loc></url><url><loc>https://vacua.dev/tags/retention/</loc></url><url><loc>https://vacua.dev/thoughts/soft-deletes-preserve-ambiguity-too/</loc></url><url><loc>https://vacua.dev/thoughts/an-identifier-should-outlive-its-storage-engine/</loc></url><url><loc>https://vacua.dev/tags/identifiers/</loc></url><url><loc>https://vacua.dev/thoughts/time-zones-are-part-of-the-data-model/</loc></url><url><loc>https://vacua.dev/tags/correctness/</loc></url><url><loc>https://vacua.dev/tags/money/</loc></url><url><loc>https://vacua.dev/thoughts/money-is-not-a-floating-point-number/</loc></url><url><loc>https://vacua.dev/tags/data-quality/</loc></url><url><loc>https://vacua.dev/thoughts/null-is-a-domain-decision/</loc></url><url><loc>https://vacua.dev/thoughts/a-migration-is-a-production-change/</loc></url><url><loc>https://vacua.dev/tags/migrations/</loc></url><url><loc>https://vacua.dev/thoughts/a-transaction-defines-what-must-succeed-together/</loc></url><url><loc>https://vacua.dev/tags/distributed-systems/</loc></url><url><loc>https://vacua.dev/thoughts/let-the-database-reject-impossible-state/</loc></url><url><loc>https://vacua.dev/tags/causality/</loc></url><url><loc>https://vacua.dev/tags/debugging/</loc></url><url><loc>https://vacua.dev/thoughts/debugging-ends-with-an-explanation-not-a-green-build/</loc></url><url><loc>https://vacua.dev/series/debugging-real-systems/</loc></url><url><loc>https://vacua.dev/thoughts/a-release-gate-must-fail-before-incompatible-code-goes-live/</loc></url><url><loc>https://vacua.dev/tags/deployments/</loc></url><url><loc>https://vacua.dev/tags/configuration/</loc></url><url><loc>https://vacua.dev/thoughts/test-cannot-prove-production-when-it-runs-different-rules/</loc></url><url><loc>https://vacua.dev/thoughts/a-correlation-identifier-is-a-boundary-contract/</loc></url><url><loc>https://vacua.dev/thoughts/retries-can-multiply-the-original-failure/</loc></url><url><loc>https://vacua.dev/thoughts/a-timeout-is-part-of-the-contract/</loc></url><url><loc>https://vacua.dev/tags/timeouts/</loc></url><url><loc>https://vacua.dev/tags/error-handling/</loc></url><url><loc>https://vacua.dev/thoughts/silencing-an-error-does-not-protect-the-customer/</loc></url><url><loc>https://vacua.dev/thoughts/runtime-configuration-is-process-state/</loc></url><url><loc>https://vacua.dev/thoughts/a-failure-timeline-can-eliminate-the-best-looking-suspect/</loc></url><url><loc>https://vacua.dev/thoughts/logging-is-a-workload-not-a-side-effect/</loc></url><url><loc>https://vacua.dev/thoughts/production-bugs-can-live-in-the-data-not-the-code/</loc></url><url><loc>https://vacua.dev/thoughts/reproduce-the-failure-before-repairing-it/</loc></url><url><loc>https://vacua.dev/about/</loc></url><url><loc>https://vacua.dev/projects/</loc></url><url><loc>https://vacua.dev/thoughts/</loc></url></urlset>