<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: abelanger</title><link>https://news.ycombinator.com/user?id=abelanger</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 24 Jul 2026 06:09:25 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=abelanger" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by abelanger in "The startup's Postgres survival guide"]]></title><description><![CDATA[
<p>> I do wish the guide was expanded a bit with lots of specific examples and details... a lot of it is hand-wavy blurbs.<p>I appreciate the feedback; I'm usually someone who tends to go into way too much detail, so this was difficult to write - I tried to focus on the "mental model" of understanding Postgres rather than very nuanced specifics. I tried to link out to my favorite articles on a number of subjects, and the Postgres manual is quite good.<p>Some external links from the article:<p>- <a href="https://www.digitalocean.com/community/tutorials/database-normalization" rel="nofollow">https://www.digitalocean.com/community/tutorials/database-no...</a><p>- <a href="https://www.cybertec-postgresql.com/en/benefits-of-a-descending-index" rel="nofollow">https://www.cybertec-postgresql.com/en/benefits-of-a-descend...</a><p>- <a href="https://martinfowler.com/bliki/ParallelChange.html" rel="nofollow">https://martinfowler.com/bliki/ParallelChange.html</a><p>- <a href="https://www.cybertec-postgresql.com/en/tuning-autovacuum-postgresql/" rel="nofollow">https://www.cybertec-postgresql.com/en/tuning-autovacuum-pos...</a><p>Some internal links on where I've gone into our own use-cases in more detail:<p>- <a href="https://hatchet.run/blog/multi-tenant-queues">https://hatchet.run/blog/multi-tenant-queues</a> (PG-backed queues)<p>- <a href="https://hatchet.run/blog/postgres-partitioning">https://hatchet.run/blog/postgres-partitioning</a> (PG partitioning)<p>(edit: formatting)</p>
]]></description><pubDate>Wed, 22 Jul 2026 16:20:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=49009215</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=49009215</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49009215</guid></item><item><title><![CDATA[New comment by abelanger in "The startup's Postgres survival guide"]]></title><description><![CDATA[
<p>OP here, I appreciate this.<p>> in addition to minimizing locked records, make sure your locks are ordered deterministically across all queries (eg by id asc, always) or you’ll deadlock (but postgres has a really good deadlock detector so you’ll more likely just error out if you’re lucky)<p>This is really good advice, I should put this somewhere in the guide. To add to this, not only can you deadlock by not having a consistent `ORDER BY` when you're locking sets of rows, but you should also be careful of locking rows on tables in different orders. For example, even if you lock each row in a table with an ORDER BY and FOR UPDATE, if one tx locks `table_a` and then `table_b`, and the other locks `table_b` and then `table_a`, you'll deadlock. This is obvious in theory but exponentially harder to debug in practice, because you need to be globally aware of every table that a write touches - something that's bitten us in particular with certain extensions.<p>> learn about GIN (and GIST) indexes<p>We're just testing GIN for fast key-value lookups for JSONB columns, and the performance improvements have been really massive. Interestingly there was a large performance skew between AND vs OR on these key-value queries.</p>
]]></description><pubDate>Wed, 22 Jul 2026 16:05:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=49008957</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=49008957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49008957</guid></item><item><title><![CDATA[New comment by abelanger in "The startup's Postgres survival guide"]]></title><description><![CDATA[
<p>OP here, I appreciate the feedback! I tried to focus on things which could take down your database, so things like particularly slow reads and writes, autovacuum settings, reducing lock contention, particularly focused on cases that I've seen. There are lots of things that I left out which would belong in a general user guide.<p>We're heavy users of stored functions because we're (perhaps overly) reliant on Postgres triggers, which can improve performance by reducing network round-trips but are fairly risky because they're difficult to monitor and observe.</p>
]]></description><pubDate>Wed, 22 Jul 2026 16:00:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=49008878</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=49008878</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49008878</guid></item><item><title><![CDATA[The startup's Postgres survival guide]]></title><description><![CDATA[
<p>Article URL: <a href="https://hatchet.run/blog/postgres-survival-guide">https://hatchet.run/blog/postgres-survival-guide</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49005787">https://news.ycombinator.com/item?id=49005787</a></p>
<p>Points: 502</p>
<p># Comments: 221</p>
]]></description><pubDate>Wed, 22 Jul 2026 12:36:08 +0000</pubDate><link>https://hatchet.run/blog/postgres-survival-guide</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=49005787</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49005787</guid></item><item><title><![CDATA[New comment by abelanger in "Ask HN: Who is hiring? (June 2026)"]]></title><description><![CDATA[
<p>Hatchet | Full-Stack Engineer | NYC or SF or REMOTE (US and EU) | <a href="https://hatchet.run">https://hatchet.run</a><p>Hey HN! I'm Alexander, one of the founders of Hatchet. Hatchet is an open-source platform for running background jobs at scale.<p>We're hiring engineers who are excited to build the next class of engineering primitives, starting with queues, background tasks and durable execution. We started in early 2024 after launching our distributed task queue (<a href="https://news.ycombinator.com/item?id=39643136">https://news.ycombinator.com/item?id=39643136</a>).<p>Hatchet is currently used by thousands of engineers for all kinds of workloads: log ingestion pipelines, code review agents, video encoding, GPU scheduling, etc. Our target customer is fast-growing startups who have a strong need for background jobs system. These days, that tends to be AI companies, though we're general-purpose and not exclusively targeted for AI workloads.<p>Stack: Postgres, Go, Typescript, React, Kubernetes<p>Applying: email me at alexander@hatchet.run and tell me about something impressive you've built, along with your CV and why you're interested in Hatchet.<p>Note that we're fully open-source, which you can check out here: <a href="https://github.com/hatchet-dev/hatchet" rel="nofollow">https://github.com/hatchet-dev/hatchet</a> (and if you have thoughts / opinions / questions about the codebase, please include those in your note!)</p>
]]></description><pubDate>Mon, 01 Jun 2026 20:50:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48362455</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=48362455</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48362455</guid></item><item><title><![CDATA[Durable execution, the hard way]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/hatchet-dev/durable-execution-the-hard-way">https://github.com/hatchet-dev/durable-execution-the-hard-way</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48307802">https://news.ycombinator.com/item?id=48307802</a></p>
<p>Points: 64</p>
<p># Comments: 3</p>
]]></description><pubDate>Thu, 28 May 2026 12:11:03 +0000</pubDate><link>https://github.com/hatchet-dev/durable-execution-the-hard-way</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=48307802</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48307802</guid></item><item><title><![CDATA[New comment by abelanger in "GitHub's Fake Star Economy"]]></title><description><![CDATA[
<p>> Our analysis revealed the fork-to-star ratio as the strongest simple heuristic for identifying potential manipulation. The logic is straightforward: a star costs nothing and conveys no commitment. A fork means someone downloaded the code to use or modify it.<p>This is just clearly...incorrect? You can both modify code without forking it and most software is distributed via a registry or binary download, which also wouldn't be represented in forks. For most projects, the number of forks is a lossy signal for how busy the contributor ecosystem is, nothing else.</p>
]]></description><pubDate>Mon, 20 Apr 2026 16:01:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47836215</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47836215</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47836215</guid></item><item><title><![CDATA[New comment by abelanger in "Supertoast tables"]]></title><description><![CDATA[
<p>Candidly we're still trying to figure that out: all of the plumbing is there in the open source, but the actual implementation of writes to S3 are only on the cloud version. This is partially because we're loath to introduce additional dependencies, and partially because this job requires a decent amount of CPU and memory and would have to run separate from the Hatchet engine, which adds complexity to self-hosted setups. That said, we're aware of multi-TB self-hosted instances, and this would be really useful for them - so it's important that we can get this into the open source.<p>The payloads are time-partitioned (in either case) so we do drop them after the user-defined retention period.</p>
]]></description><pubDate>Fri, 06 Mar 2026 19:17:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47279717</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47279717</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47279717</guid></item><item><title><![CDATA[Supertoast tables]]></title><description><![CDATA[
<p>Article URL: <a href="https://hatchet.run/blog/supertoast-tables">https://hatchet.run/blog/supertoast-tables</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47277420">https://news.ycombinator.com/item?id=47277420</a></p>
<p>Points: 56</p>
<p># Comments: 12</p>
]]></description><pubDate>Fri, 06 Mar 2026 16:46:50 +0000</pubDate><link>https://hatchet.run/blog/supertoast-tables</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47277420</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47277420</guid></item><item><title><![CDATA[Tove Jansson's criticized illustrations of The Hobbit (2023)]]></title><description><![CDATA[
<p>Article URL: <a href="https://tovejansson.com/hobbit-tolkien/">https://tovejansson.com/hobbit-tolkien/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47182284">https://news.ycombinator.com/item?id=47182284</a></p>
<p>Points: 223</p>
<p># Comments: 123</p>
]]></description><pubDate>Fri, 27 Feb 2026 16:17:53 +0000</pubDate><link>https://tovejansson.com/hobbit-tolkien/</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47182284</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47182284</guid></item><item><title><![CDATA[Escaping Misconfigured VSCode Extensions (2023)]]></title><description><![CDATA[
<p>Article URL: <a href="https://blog.trailofbits.com/2023/02/21/vscode-extension-escape-vulnerability/">https://blog.trailofbits.com/2023/02/21/vscode-extension-escape-vulnerability/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47093604">https://news.ycombinator.com/item?id=47093604</a></p>
<p>Points: 13</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 20 Feb 2026 20:39:06 +0000</pubDate><link>https://blog.trailofbits.com/2023/02/21/vscode-extension-escape-vulnerability/</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47093604</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47093604</guid></item><item><title><![CDATA[New comment by abelanger in "Building a TUI is easy now"]]></title><description><![CDATA[
<p>Author here - I'm also generally skeptical of coding agents, but with the right problem domain and approach they can produce quality output when paired with humans. There was a point in time in the chess world where computer + human was stronger than computer or human alone. I think we're in that era for a handful of applications. Not for things like kernels, browsers, or databases.<p>> Besides, who is going to maintain that code?<p>I maintain the code. If Claude gets sunset tomorrow, I'll still be able to maintain and write it - I've already rewritten parts of it.<p>You could make the same argument for a team member leading a project that you've worked on. Is that code forever required to be maintained by one team member?<p>Previously the overhead of ensuring code quality when the development process was driven by Claude Code was greater than just writing the code myself. But that was different for this project.</p>
]]></description><pubDate>Sat, 14 Feb 2026 17:08:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47016169</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47016169</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47016169</guid></item><item><title><![CDATA[New comment by abelanger in "Building a TUI is easy now"]]></title><description><![CDATA[
<p>Hi, thanks! To be clear, the demo there is merely a WASM-based Ghostty build which is rendering the TUI on a web page, just so people could try it out without needing to install anything. The actual TUI runs in your terminal. I'm guessing it's the WASM side of things causing the fans to spin, which you wouldn't see locally.</p>
]]></description><pubDate>Sat, 14 Feb 2026 16:53:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47016042</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47016042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47016042</guid></item><item><title><![CDATA[New comment by abelanger in "Building a TUI is easy now"]]></title><description><![CDATA[
<p>Hi everyone, I enjoyed building this TUI for myself and wanted to write down how I did it. I appreciate all the thoughts and feedback! The web app is our main investment, but I think there's a slice of developers who really like to interact with TUIs, so I'm going to keep working on it.<p>For the demo at <a href="https://tui.hatchet.run">https://tui.hatchet.run</a>, to answer some messages asking about it: I built this with the fantastic ghostty-web project (<a href="https://github.com/coder/ghostty-web" rel="nofollow">https://github.com/coder/ghostty-web</a>). It's been a while since I've used WASM for anything and this made it really easy. I deployed the demo across six Fly.io regions (hooray stateless apps) to try to minimize the impact of keystroke latency, but I imagine it's still felt by quite a few people.</p>
]]></description><pubDate>Sat, 14 Feb 2026 01:06:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47010167</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47010167</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47010167</guid></item><item><title><![CDATA[New comment by abelanger in "Building a TUI is easy now"]]></title><description><![CDATA[
<p>You're right - I'll remove that now until we can get it more performant or drop it altogether. This wasn't something we caught during testing. I appreciate the feedback!</p>
]]></description><pubDate>Fri, 13 Feb 2026 23:48:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47009465</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47009465</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47009465</guid></item><item><title><![CDATA[Building a TUI is easy now]]></title><description><![CDATA[
<p>Article URL: <a href="https://hatchet.run/blog/tuis-are-easy-now">https://hatchet.run/blog/tuis-are-easy-now</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47005509">https://news.ycombinator.com/item?id=47005509</a></p>
<p>Points: 306</p>
<p># Comments: 255</p>
]]></description><pubDate>Fri, 13 Feb 2026 17:50:54 +0000</pubDate><link>https://hatchet.run/blog/tuis-are-easy-now</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=47005509</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47005509</guid></item><item><title><![CDATA[Postgres Indexes, Partitioning and LWLock:LockManager Scalability]]></title><description><![CDATA[
<p>Article URL: <a href="https://ardentperf.com/2024/03/03/postgres-indexes-partitioning-and-lwlocklockmanager-scalability/">https://ardentperf.com/2024/03/03/postgres-indexes-partitioning-and-lwlocklockmanager-scalability/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46993228">https://news.ycombinator.com/item?id=46993228</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 12 Feb 2026 18:49:41 +0000</pubDate><link>https://ardentperf.com/2024/03/03/postgres-indexes-partitioning-and-lwlocklockmanager-scalability/</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=46993228</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46993228</guid></item><item><title><![CDATA[Claude Code Psychosis]]></title><description><![CDATA[
<p>Article URL: <a href="https://jasmi.news/p/claude-code">https://jasmi.news/p/claude-code</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46829319">https://news.ycombinator.com/item?id=46829319</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 30 Jan 2026 20:19:03 +0000</pubDate><link>https://jasmi.news/p/claude-code</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=46829319</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46829319</guid></item><item><title><![CDATA[Stripe's New Homepage]]></title><description><![CDATA[
<p>Article URL: <a href="https://stripe.com/">https://stripe.com/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46812425">https://news.ycombinator.com/item?id=46812425</a></p>
<p>Points: 2</p>
<p># Comments: 2</p>
]]></description><pubDate>Thu, 29 Jan 2026 16:28:42 +0000</pubDate><link>https://stripe.com/</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=46812425</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46812425</guid></item><item><title><![CDATA[New comment by abelanger in "The Devastating Decline of a Brilliant Young Coder (2020)"]]></title><description><![CDATA[
<p><a href="https://archive.ph/GbVrJ" rel="nofollow">https://archive.ph/GbVrJ</a></p>
]]></description><pubDate>Mon, 26 Jan 2026 17:28:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46768596</link><dc:creator>abelanger</dc:creator><comments>https://news.ycombinator.com/item?id=46768596</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46768596</guid></item></channel></rss>