<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.whollysoftware.com</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/about</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/services</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/portfolio</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/careers</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/reviews</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/contact</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/quote</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/faq</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/privacy-policy</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/terms</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/cookies</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/portfolio/eco-rider-carpool</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/portfolio/eco-map-app</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/portfolio/rushdeck</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/portfolio/vkc-traders</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/accessibility-audits-what-we-actually-check-beyond-automated-tools</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-public-apis-partners-can-build-on</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/ai-observability-logging-tracing-and-debugging-llm-pipelines</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/card-sorting-and-tree-testing-cheap-research-that-prevents-expensive-mistakes</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/choosing-between-shopify-woocommerce-and-a-custom-storefront</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/ai-assisted-code-review-what-weve-learned-rolling-it-out</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/database-schema-soft-deletes-and-audit-trails</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-camera-heavy-feature-performance-lessons</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/handoff-between-design-and-engineering-what-actually-reduces-rework</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/reducing-javascript-bundle-size-without-breaking-features</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/mobile-first-design-in-2026-still-the-right-default</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/what-we-changed-after-our-worst-production-outage</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/shipping-a-rag-agent-to-production</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-voice-agents-with-real-time-transcription-and-low-latency</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-an-internal-api-gateway</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/audit-logging-thats-useful-during-an-incident</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/reducing-cognitive-load-in-multi-step-checkout-and-signup-flows</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/ai-agent-memory-short-term-context-vs-long-term-state</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/explainability-in-ai-products-giving-users-a-reason-to-trust-the-output</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/swiftui-vs-uikit-in-2026</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/why-we-moved-to-nextjs-app-router</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/prototyping-ai-features-before-the-model-behavior-is-finalized</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/optimizing-time-to-interactive-on-content-heavy-landing-pages</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/css-in-2026-container-queries-has-and-what-we-no-longer-reach-for</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/feature-flags-and-a-soft-launch-for-a-risky-migration</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/migrating-a-mobile-apps-backend-without-breaking-the-client-in-the-field</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/handling-app-permissions-without-scaring-users-away</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-feedback-and-rating-prompts-that-get-honest-responses</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/prompt-caching-real-impact-on-latency-and-cost</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-trust-in-ai-products</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/synthetic-data-generation-for-training-and-evaluation</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-reliable-webhook-delivery</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-component-library-in-figma-that-matches-production-code</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/backend-architecture-checklist-mvp-to-scale</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/cutting-cloud-costs-without-cutting-reliability</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/local-first-data-sync-conflict-resolution</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/app-store-metadata-and-aso-for-organic-discovery</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/internationalization-for-web-apps-routing-content-and-rtl-support</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-customer-portal-with-role-based-access</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/multi-agent-orchestration-when-one-model-isnt-enough</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/read-replicas-eventual-consistency-pitfalls</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/grid-systems-and-layout-consistency-across-a-growing-product</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/onboarding-flows-how-much-to-teach-before-letting-users-explore</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-ai-features-that-degrade-gracefully-when-the-model-is-down</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/notification-service-email-sms-push-pipeline</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/health-checks-that-actually-catch-real-failures</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/prompt-engineering-is-software-engineering</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/crash-reporting-monitoring-turning-noise-into-signal</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/web-forms-ux-validation-timing-and-error-messaging-that-doesnt-frustrate</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-upsell-and-upgrade-prompts-that-dont-feel-manipulative</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/authentication-patterns-for-modern-web-apps-sessions-jwts-and-passkeys</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-an-apple-watch-or-wear-os-companion-app</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/evaluating-open-source-models-vs-frontier-apis-for-client-work</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/prototyping-with-real-data-instead-of-lorem-ipsum</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/battery-performance-profiling-long-running-features</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-loading-and-skeleton-states-that-feel-fast</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/real-time-ai-features-websockets-streaming-and-partial-results</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/integrating-native-sdks-payments-maps-analytics-without-bloat</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/edge-rendering-and-its-real-impact-on-global-latency</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/database-connection-pooling-what-causes-exhaustion</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/schema-evolution-in-a-json-heavy-database-column</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/dark-mode-implementation-that-respects-system-preferences-and-user-overrides</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-error-states-that-reduce-support-tickets</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-first-time-vs-returning-users-differently</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/evaluating-ai-vendor-lock-in-and-building-portable-abstractions</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-one-handed-use-on-larger-phones</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/progressive-web-apps-when-theyre-a-genuine-alternative-to-native</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-marketplace-platform-listings-search-and-trust-signals</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/a-config-system-that-survives-per-environment-overrides</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/reducing-decision-fatigue-in-configuration-heavy-interfaces</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-ai-chatbots-that-know-when-to-hand-off-to-a-human</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/deep-linking-universal-links-getting-attribution-right</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/debugging-intermittent-mobile-bugs-that-only-happen-in-production</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/migrating-a-jquery-era-site-to-a-modern-framework-safely</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-collaborative-features-presence-comments-and-permissions</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/design-systems-in-code-keeping-figma-and-the-component-library-in-sync</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/swiftdata-vs-core-data-migrating-a-production-app</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/api-versioning-strategies-that-dont-trap-you</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/api-keys-oauth-or-mtls-service-to-service-authentication</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/migrating-a-legacy-rules-engine-to-an-llm-based-system</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/semantic-search-vs-keyword-search-a-practical-migration-guide</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-subscription-paywall-that-doesnt-feel-hostile</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/testing-strategy-for-a-large-react-codebase</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/structured-logging-correlation-ids-distributed-requests</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-rate-limited-ingestion-pipeline-responsibly</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/evaluating-llms-for-production-building-a-golden-dataset</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/human-in-the-loop-review-for-ai-generated-content-pipelines</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/biometric-authentication-done-right-ios-android</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/dark-mode-and-dynamic-theming-done-properly</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/dashboard-design-information-density-without-overwhelming-users</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-accessible-web-forms-that-pass-a-real-audit</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-color-system-that-works-across-light-dark-and-brand-themes</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/rate-limiting-and-abuse-prevention-for-public-facing-forms</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/choosing-a-message-queue-sqs-rabbitmq-kafka-redis-streams</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/web-performance-budgets-setting-them-and-actually-enforcing-them</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/reducing-app-binary-size-without-cutting-features</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-admin-and-internal-tools-that-dont-get-neglected</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-design-to-code-pipeline-that-doesnt-drift</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/containerizing-a-legacy-application-without-a-rewrite</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/streaming-ai-responses-ux-patterns-that-actually-help-users</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-dark-mode-from-the-start-instead-of-retrofitting-it</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/rate-limiting-and-queueing-strategies-for-llm-backed-endpoints</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-foldables-and-multi-window-android</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/zero-downtime-deploys-blue-green-canary-rolling</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/responsive-design-beyond-breakpoints-fluid-typography-and-spacing</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-headless-cms-backed-marketing-site-that-content-teams-love</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/on-device-vs-cloud-inference-for-mobile-ai-features</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-offline-maps-and-location-features</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/app-startup-time-profiling-cold-start-regressions</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-multi-region-infrastructure-for-lower-latency</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/microinteractions-where-they-help-and-where-they-just-add-noise</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/job-queue-that-survives-worker-crashes</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-recommendation-engine-with-embeddings</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/caching-strategies-for-content-heavy-sites</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-trust-indicators-in-ai-powered-features</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/wordpress-in-2026-still-a-legitimate-choice-with-caveats</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/handling-app-updates-and-forced-upgrades-gracefully</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/ai-powered-search-ranking-blending-relevance-with-recency</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/vector-database-selection-for-rag-at-scale</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/backups-are-not-disaster-recovery-until-tested</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/web-accessibility-beyond-alt-text-keyboard-navigation-and-screen-readers</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/iconography-systems-consistency-across-a-growing-product</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/headless-commerce-when-its-worth-the-added-complexity</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/app-analytics-what-to-track-without-becoming-invasive</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/context-window-management-for-long-running-ai-conversations</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-blog-and-cms-workflow-that-non-technical-teams-can-use</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/retries-and-circuit-breakers-surviving-flaky-external-apis</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/cross-platform-code-sharing-without-sacrificing-native-feel</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-one-thumb-mobile-navigation</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/caching-layers-what-to-cache-and-never-cache</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-real-time-features-with-websockets-and-server-sent-events</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-forms-that-reduce-abandonment</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/app-store-play-store-rejections-we-learned-from</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-tablet-and-large-screen-layouts-as-a-first-class-citizen</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/agentic-workflows-for-internal-automation-whats-worth-building</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-feedback-loops-that-improve-an-ai-product-over-time</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/third-party-script-management-analytics-chat-widgets-and-page-speed</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/user-testing-on-a-budget-getting-signal-without-a-big-research-team</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/long-running-background-jobs-without-blocking-requests</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-multi-tenant-saas-dashboard-architecture</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-ai-onboarding-flows-that-set-correct-user-expectations</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/kotlin-multiplatform-in-practice-sharing-business-logic</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/payment-webhooks-idempotency-stripe</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-dashboard-with-heavy-data-tables-that-stays-responsive</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-internationalization-text-expansion-and-layout-flexibility</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/migrating-from-rest-to-graphql-what-wed-do-differently</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-api-rate-limits-from-the-clients-perspective</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/testing-ai-features-what-unit-tests-can-and-cant-catch</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/migrating-an-old-objective-c-codebase-to-swift-incrementally</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/static-site-generation-vs-isr-choosing-per-page-not-per-project</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/rest-graphql-grpc-for-internal-services</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/fine-tuning-vs-rag-choosing-the-right-approach</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/jetpack-compose-in-production-what-changed</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/react-server-components-in-practice-what-actually-moved-server-side</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/wireframing-in-the-age-of-ai-assisted-design-tools</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-event-driven-architecture-without-losing-data</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/the-economics-of-self-hosting-open-source-llms-vs-api-calls</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-empty-states-that-actually-help-users-not-just-fill-space</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-multi-step-forms-that-dont-lose-user-data</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/background-tasks-and-app-lifecycle-what-ios-and-android-allow-now</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/background-job-retries-exponential-backoff-dlq</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/in-app-purchases-subscriptions-platform-gotchas</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/image-optimization-at-scale-formats-cdns-and-lazy-loading-done-right</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/design-tokens-bridging-figma-and-code-without-constant-drift</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-search-experiences-filters-facets-and-result-relevance</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/observability-metrics-logs-traces-that-answer-real-questions</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-document-qa-system-for-enterprise-clients</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/structured-output-from-llms-function-calling-and-json-mode</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/app-localization-process-and-pitfalls-beyond-translated-strings</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/web-animation-performance-what-to-animate-and-what-to-avoid</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/retrieval-quality-metrics-that-predict-user-satisfaction</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-idempotent-apis-for-safe-retries</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/database-sharding-when-its-actually-necessary</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-settings-pages-that-dont-become-a-junk-drawer</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-an-internal-ai-copilot-for-support-teams</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-real-time-chat-feature-for-mobile</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/feature-flags-and-gradual-rollouts-for-web-products</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/balancing-brand-personality-with-usability-in-enterprise-products</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/core-web-vitals-what-actually-moved-the-needle-for-our-clients</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/handling-pii-in-ai-pipelines-without-breaking-the-product</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/offline-first-architecture-unreliable-networks</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-notification-systems-that-inform-without-annoying</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/guardrails-and-content-moderation-for-generative-ai-products</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/handling-large-lists-and-images-without-janky-scrolling</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/multi-tenant-data-isolation-schema-vs-row-level</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-search-index-alongside-a-relational-database</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-component-library-that-survives-a-design-refresh</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-accessible-color-systems-that-still-look-intentional</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/managing-app-state-at-scale-unidirectional-data-flow</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/ai-agent-tool-use-designing-apis-that-models-can-call-reliably</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/server-side-vs-client-side-search-picking-the-right-approach</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-slow-networks-and-low-end-devices</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/flutter-vs-native-how-we-decide</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/react-natives-new-architecture-what-it-means-for-client-projects</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-a-design-systems-documentation-so-people-actually-use-it</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/handling-file-uploads-at-scale</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/fine-tuning-a-small-model-to-beat-a-bigger-one-on-a-narrow-task</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-design-system-that-survives-contact-with-real-product-work</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/rate-limiting-token-bucket-sliding-window</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/reducing-hallucination-in-customer-facing-ai-agents</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/motion-design-principles-for-product-interfaces</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/migrating-a-legacy-php-site-to-a-modern-stack-without-a-big-bang-rewrite</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-accessible-mobile-apps-lessons-from-a-real-audit</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/typography-systems-for-products-that-scale-across-platforms</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/data-privacy-considerations-for-ai-in-regulated-industries</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/testing-mobile-apps-unit-snapshot-end-to-end-strategy</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/multimodal-ai-combining-vision-and-language-models-in-production</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/rbac-vs-abac-choosing-a-permissions-model</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/database-migrations-at-scale-without-downtime</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/seo-fundamentals-for-javascript-heavy-sites</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/horizontal-scaling-a-monolith-before-microservices</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/chunking-strategies-for-rag-why-naive-splitting-fails</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/push-notification-strategy-deliverability-timing-opt-in</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-for-trust-in-fintech-products</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/when-not-to-use-ai-recognizing-the-wrong-use-case-early</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/cost-optimizing-llm-api-usage-without-sacrificing-quality</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/visual-hierarchy-in-data-heavy-interfaces</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/web-security-basics-that-still-get-missed-csrf-xss-and-csp</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/database-indexing-strategy-queries-we-optimize-for</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/building-a-checkout-flow-that-converts-and-doesnt-leak-revenue</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-empty-and-zero-data-states-for-new-users</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/designing-onboarding-flows-that-convert-without-overwhelming-users</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/getting-secrets-out-of-code-and-config</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/mobile-ci-cd-automating-builds-signing-store-submission</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/widget-development-ios-android-whats-worth-building</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/blog/mobile-app-security-certificate-pinning-obfuscation-secure-storage</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/careers/senior-ai-engineer</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/careers/ios-developer</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/careers/product-designer</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/careers/full-stack-engineer</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/healthcare</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/education</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/finance</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/real-estate</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/ecommerce</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/travel</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/gaming</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/logistics</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/fitness</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/social-media</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/entertainment</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/industries/startups-and-enterprise</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/services/artificial-intelligence</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/services/mobile-app-development</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/services/web-development</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/services/backend-development</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/services/cloud-devops</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.whollysoftware.com/services/ui-ux-design</loc>
<lastmod>2026-07-17T19:52:34.824Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
</urlset>
