<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://ownedengineering.com/</id><title>Owned Engineering</title><subtitle>A backend engineer's take on Python, PostgreSQL performance, and systems engineering - with stories from production and what it means to own the outcome.</subtitle> <updated>2026-06-05T12:28:34-07:00</updated> <author> <name>Gopar</name> <uri>https://ownedengineering.com/</uri> </author><link rel="self" type="application/atom+xml" href="https://ownedengineering.com/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://ownedengineering.com/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 Gopar </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>Stopping Schema Drift - Part 1</title><link href="https://ownedengineering.com/posts/stopping-schema-drift/" rel="alternate" type="text/html" title="Stopping Schema Drift - Part 1" /><published>2026-06-01T00:00:00-07:00</published> <updated>2026-06-01T00:00:00-07:00</updated> <id>https://ownedengineering.com/posts/stopping-schema-drift/</id> <content type="text/html" src="https://ownedengineering.com/posts/stopping-schema-drift/" /> <author> <name>Gopar</name> </author> <category term="django" /> <summary>Making sure a Django model mirror doesn't deviate far from the source of truth</summary> </entry> <entry><title>Hidden Cost of Django Rest Framework Pagination</title><link href="https://ownedengineering.com/posts/hidden-cost-of-pagination/" rel="alternate" type="text/html" title="Hidden Cost of Django Rest Framework Pagination" /><published>2026-05-22T00:00:00-07:00</published> <updated>2026-05-22T00:00:00-07:00</updated> <id>https://ownedengineering.com/posts/hidden-cost-of-pagination/</id> <content type="text/html" src="https://ownedengineering.com/posts/hidden-cost-of-pagination/" /> <author> <name>Gopar</name> </author> <category term="django" /> <summary>The hidden cost of COUNT(*) and OFFSET on every paginated request.</summary> </entry> <entry><title>How a 20ms Middleware Transaction Turned Into 400ms Latency</title><link href="https://ownedengineering.com/posts/how-a-20ms-middleware-transaction-turned-into-400ms-latency/" rel="alternate" type="text/html" title="How a 20ms Middleware Transaction Turned Into 400ms Latency" /><published>2026-05-15T00:00:00-07:00</published> <updated>2026-05-15T00:00:00-07:00</updated> <id>https://ownedengineering.com/posts/how-a-20ms-middleware-transaction-turned-into-400ms-latency/</id> <content type="text/html" src="https://ownedengineering.com/posts/how-a-20ms-middleware-transaction-turned-into-400ms-latency/" /> <author> <name>Gopar</name> </author> <category term="django" /> <summary>Even small transactions can become bottlenecks under concurrency. A look at middleware writes, locking, and scalability in Django.</summary> </entry> <entry><title>A PostgreSQL Upgrade Improved Query Speed By 63%</title><link href="https://ownedengineering.com/posts/a-postgresql-upgrade-improved-query-speed-by-63/" rel="alternate" type="text/html" title="A PostgreSQL Upgrade Improved Query Speed By 63%" /><published>2026-05-08T00:00:00-07:00</published> <updated>2026-05-08T00:00:00-07:00</updated> <id>https://ownedengineering.com/posts/a-postgresql-upgrade-improved-query-speed-by-63/</id> <content type="text/html" src="https://ownedengineering.com/posts/a-postgresql-upgrade-improved-query-speed-by-63/" /> <author> <name>Gopar</name> </author> <category term="postgresql" /> <summary>How an overdue upgrade unlocked faster performance.</summary> </entry> </feed>
