<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>DevCeon Engineering Blog</title><description>Practical writing on building software products: payments, multi-tenancy, serverless AWS, data integrity and AI features.</description><link>https://devceon.com/</link><language>en-us</language><item><title>How to hire a software development agency: a founder&apos;s checklist</title><link>https://devceon.com/blog/how-to-hire-a-software-development-agency/</link><guid isPermaLink="true">https://devceon.com/blog/how-to-hire-a-software-development-agency/</guid><description>What to ask before signing with a software agency, what a good proposal contains, and the red flags we see when founders come to us after a bad first attempt.</description><pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate><category>Hiring</category><category>MVP</category><category>Founders</category><category>Agencies</category></item><item><title>Serverless or containers for a startup backend? How we decide</title><link>https://devceon.com/blog/serverless-vs-containers-startup-backend/</link><guid isPermaLink="true">https://devceon.com/blog/serverless-vs-containers-startup-backend/</guid><description>We run both: Lambda and DynamoDB for some clients, Rails and Django on containers for others. The questions that actually decide it, and the ones that don&apos;t.</description><pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate><category>AWS</category><category>Serverless</category><category>Containers</category><category>Architecture</category></item><item><title>Stop generating SQL. Give the model typed tools instead.</title><link>https://devceon.com/blog/mcp-server-for-your-saas-data/</link><guid isPermaLink="true">https://devceon.com/blog/mcp-server-for-your-saas-data/</guid><description>Designing the AI agent for a beauty booking marketplace: typed tools over the API, a role-derived tool list, and approval before every write.</description><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate><category>MCP</category><category>AI agents</category><category>Permissions</category><category>API design</category></item><item><title>Scheduled Stripe Connect payouts: the timezone bug that moves money</title><link>https://devceon.com/blog/stripe-connect-scheduled-payouts-timezones/</link><guid isPermaLink="true">https://devceon.com/blog/stripe-connect-scheduled-payouts-timezones/</guid><description>Hourly marketplace payouts sound simple until daylight-saving time shifts your cutoff by an hour. Scheduling payouts with IANA zones and making retries safe.</description><pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate><category>Stripe</category><category>Payments</category><category>AWS Lambda</category><category>Marketplaces</category></item><item><title>Fail-closed exports: when your report should refuse to run</title><link>https://devceon.com/blog/fail-closed-exports-reconciliation/</link><guid isPermaLink="true">https://devceon.com/blog/fail-closed-exports-reconciliation/</guid><description>Audit exports that silently ship wrong totals are worse than none. The reconciliation pattern we use so an export fails loudly when the numbers disagree.</description><pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate><category>Data integrity</category><category>AWS Lambda</category><category>DynamoDB</category><category>Architecture</category></item><item><title>Multi-tenant Django done properly: schema-per-tenant with PostGIS</title><link>https://devceon.com/blog/multi-tenant-django-schema-per-tenant-postgis/</link><guid isPermaLink="true">https://devceon.com/blog/multi-tenant-django-schema-per-tenant-postgis/</guid><description>Why we chose schema-per-tenant isolation for a construction SaaS, how to keep JWTs tenant-aware, and the custom backend that makes PostGIS geofencing work.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><category>Django</category><category>Multi-tenancy</category><category>PostgreSQL</category><category>PostGIS</category><category>SaaS</category></item></channel></rss>