<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: tonyhb</title><link>https://news.ycombinator.com/user?id=tonyhb</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 21 Oct 2026 12:35:27 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tonyhb" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tonyhb in "DeepSeek just open-sourced its inference engine"]]></title><description><![CDATA[
<p>Not really.  Anthropic’s headcount isn’t huge, and only a subset of their employees are working on the frontier.  It’s also easier when you’re a follower.</p>
]]></description><pubDate>Tue, 20 Oct 2026 11:28:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=50164655</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=50164655</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=50164655</guid></item><item><title><![CDATA[New comment by tonyhb in "Seattle Bans Rental Junk Fees"]]></title><description><![CDATA[
<p>Yes, this is the same as buying a unit and renting as in my original post.</p>
]]></description><pubDate>Mon, 21 Sep 2026 19:08:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=49791864</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=49791864</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49791864</guid></item><item><title><![CDATA[New comment by tonyhb in "Seattle Bans Rental Junk Fees"]]></title><description><![CDATA[
<p>No, it doesn't.  It states that if a landlord has 3 houses and exits the landlord market, those houses are either kept unused or sold and are available for new buyers.</p>
]]></description><pubDate>Mon, 21 Sep 2026 19:07:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=49791842</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=49791842</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49791842</guid></item><item><title><![CDATA[New comment by tonyhb in "Seattle Bans Rental Junk Fees"]]></title><description><![CDATA[
<p>Small landlords don't own apartment buildings.  They buy houses/units to rent, lowering availability for buyers.  So, you'd at least want to look at the number of new apartment rentals available plus the number of first time house buyers to get a better picture.</p>
]]></description><pubDate>Mon, 21 Sep 2026 18:24:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49791236</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=49791236</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49791236</guid></item><item><title><![CDATA[New comment by tonyhb in "Neki – Sharded Postgres"]]></title><description><![CDATA[
<p>Sam is not an asshole.  His twitter is great, he's definitely opinionated, and if you haven't had the luck of meeting him you might misread his tone as grumpy.  It's not.  It's sarcastic/dry humour and honest.<p>They build good stuff and care.</p>
]]></description><pubDate>Thu, 10 Sep 2026 18:48:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=49648535</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=49648535</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49648535</guid></item><item><title><![CDATA[New comment by tonyhb in "IPFS Maintainers Winding Down"]]></title><description><![CDATA[
<p>Iroh seems more comparable to an L7 scoped Tailscale than it does IPFS.  It's good, but pretty unrelated.</p>
]]></description><pubDate>Mon, 24 Aug 2026 18:10:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=49423723</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=49423723</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49423723</guid></item><item><title><![CDATA[New comment by tonyhb in "Making Postgres queues scale"]]></title><description><![CDATA[
<p>indeed, every ~week with essentially the same thing:  skip locked.</p>
]]></description><pubDate>Thu, 30 Jul 2026 20:21:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=49115244</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=49115244</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49115244</guid></item><item><title><![CDATA[New comment by tonyhb in "Google Cloud: Investing in the Future of PostgreSQL"]]></title><description><![CDATA[
<p>Vitess was made by a... US tech company?</p>
]]></description><pubDate>Thu, 02 Apr 2026 04:37:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47610045</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=47610045</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47610045</guid></item><item><title><![CDATA[New comment by tonyhb in "Ask HN: Do you still run Redis and workers just for background jobs?"]]></title><description><![CDATA[
<p>Inngest's Durable Endpoints aim to solve the durable API problem without messy DB txns, all within some tolerance: <a href="https://www.inngest.com/docs/learn/durable-endpoints" rel="nofollow">https://www.inngest.com/docs/learn/durable-endpoints</a>.<p>Other than that, yes, durable execution does all of this for you.<p>TLDR on Durable Endpoints:  you can automatically use steps in API endpoints which checkpoint state in the BG, and then retry on failure.  This means you can run jobs in the background _somewhat_ transactionally (somewhat because there's delay between checkpointing) to minimize any tradeoffs here.  And, if you want full transactionality, don't buffer checkpoints in the BG and instead do it synchronously.<p>Also, Redis is good for medium scale load.  We're hitting millions of RPS (aggregated) on our services (I work at Inngest) and it doesn't scale so well at this load, at all.  We had to invest in other infra.</p>
]]></description><pubDate>Wed, 11 Mar 2026 00:52:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47330640</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=47330640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47330640</guid></item><item><title><![CDATA[New comment by tonyhb in "Vercel down in Dubai, EU affected also"]]></title><description><![CDATA[
<p>AWS is down and so being a reseller ofc Vercel is down too.</p>
]]></description><pubDate>Tue, 03 Mar 2026 05:50:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47228633</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=47228633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47228633</guid></item><item><title><![CDATA[Show HN: Durable Endpoints – make any API endpoint unbreakable]]></title><description><![CDATA[
<p>Hi HN! I'm Tony, one of the co-founders of Inngest (<a href="https://inngest.com/" rel="nofollow">https://inngest.com/</a>).<p>Wanted to show you something we've been working on: Durable Endpoints. It brings durability and steps directly into your APIs.  Each step persists the state in the background.  The happy path means no additional latency for your users, and you get tracing & metrics out of the box, and failures resume from the last successful step checkpoint rather than restarting from scratch.<p>The problem we kept hitting: durable execution systems (Temporal, our own workflows, etc.) are designed for async background work. But with AI workloads, you often need durability <i>and</i> low latency in a synchronous request: a user is waiting on a chat response that involves multiple LLM calls, any of which can fail or timeout.<p>The typical solution is splitting into two systems: a streaming frontend for responsiveness, plus a background job system for reliability. Durable Endpoints let you keep it as one cohesive implementation (here's a Next example):<p><pre><code>    import { Inngest } from "inngest";
    import { endpointAdapter } from "inngest/next";
    
    const inngest = new Inngest({ id: "my-app", endpointAdapter });
    
    export const handler = inngest.endpoint(async (req: Request) => {
      const { input } = parseParams(req);
    
      // Each step.run() checkpoints on completion
      const processed = await step.run("process-input", async () => {
        return await expensiveOperation(input);
      });
    
      // If this fails, we resume here — not from the beginning
      const result = await step.run("generate-output", async () => {
        return await anotherExpensiveOperation(processed);
      });
    
      return Response.json({ result });
    });

</code></pre>
How it works under the hood:<p>- Steps are identified by their string ID, not execution order. This makes the system tolerant to code changes... you can refactor, add/remove steps, and existing in-flight executions continue correctly.<p>- We use checkpointing (<a href="https://www.inngest.com/blog/introducing-checkpointing" rel="nofollow">https://www.inngest.com/blog/introducing-checkpointing</a>) to async checkpoint steps. State is persisted to our execution store rather than held in memory.<p>- If endpoints turn async (step errors or waitForEvent), we redirect the user to a new URL which uses keepalives and waits for the API result.  Inngest re-enters the endpoint and picks up where it left off, then sends the result to the redirected user.<p>- Similarly, on failure, our executor re-invokes the endpoint. Completed steps are memoized from the checkpoint... their functions don't re-run, we just return the stored result.<p>- Works with streaming responses via ReadableStream.<p>The same step primitives we use in durable workflows (`step.run`, `step.sleep`, `step.waitForEvent`) work here, so you get retries, timeouts, and human-in-the-loop patterns in synchronous handlers.<p>Beyond AI, this is useful anywhere failure mid-request is expensive: payment flows, webhook processing, third-party API orchestration.<p>It's in public beta. Docs: <a href="https://www.inngest.com/docs/learn/durable-endpoints" rel="nofollow">https://www.inngest.com/docs/learn/durable-endpoints</a>. Code is in our TypeScript SDK.<p>Happy to dig into the execution model, how we handle determinism, or the checkpointing implementation.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47064354">https://news.ycombinator.com/item?id=47064354</a></p>
<p>Points: 8</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 18 Feb 2026 18:27:57 +0000</pubDate><link>https://www.inngest.com/docs/learn/durable-endpoints</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=47064354</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47064354</guid></item><item><title><![CDATA[New comment by tonyhb in "Railway (PaaS) global outage"]]></title><description><![CDATA[
<p>IDK, it looks like servers were up, connectivity worked well, and some builds were failing.  Wouldn't call that a big issue, and the same thing was happening with Vercel due to their git clones etc. yesterday too.<p>IOW,  doesnt look as bad as the title suggests?</p>
]]></description><pubDate>Wed, 11 Feb 2026 17:15:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46977708</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=46977708</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46977708</guid></item><item><title><![CDATA[New comment by tonyhb in "BYD's cheapest electric cars to have Lidar self-driving tech"]]></title><description><![CDATA[
<p>> And people die all the time.<p>Yes... but people can only focus on one thing at a time.  We don't have 360 vision.  We have blind spots!  We don't even know the exact speed of our car without looking away from the road momentarily!  Vision based cars obviously don't have these issues.  Just because some cars are 100% vision doesn't mean that it has to share all of the faults we have when driving.<p>That's not me in favour of one vs the other.  I'm ambivalent and don't actually care.  They can clearly both work.</p>
]]></description><pubDate>Mon, 12 Jan 2026 05:22:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=46584405</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=46584405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46584405</guid></item><item><title><![CDATA[New comment by tonyhb in "Scaling Go Testing with Contract and Scenario Mocks"]]></title><description><![CDATA[
<p>If you're testing the interface, changing the implementation internals won't create any churn (as the mocks and tests don't change).<p>If you are changing the interface, though, that would mean a contract change.  And if you're changing the contract, surely you wouldn't be able to even use the old tests?<p>This isn't really a go problem at all.  Any contract change means changing tests.</p>
]]></description><pubDate>Wed, 24 Dec 2025 15:01:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=46376146</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=46376146</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46376146</guid></item><item><title><![CDATA[New comment by tonyhb in "Cloudflare outage on December 5, 2025"]]></title><description><![CDATA[
<p>Cloudbleed.  It’s been a fun time.</p>
]]></description><pubDate>Sat, 06 Dec 2025 10:00:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46172068</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=46172068</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46172068</guid></item><item><title><![CDATA[Show HN: StepKit, an open and cross-platform durable execution standard]]></title><description><![CDATA[
<p>Hi HN! I’m Tony, one of the co-founders of Inngest (<a href="https://inngest.com/" rel="nofollow">https://inngest.com/</a>).  Wanted to show you something we’re working on: StepKit.<p>StepKit is an open source SDK and framework for building and iterating on durable workflows that run on any platform (self-hosted, Inngest, Cloudflare, Netlify, etc.) without requiring any provider or bundler-specific code.<p>Here’s the repo: <a href="https://github.com/inngest/stepkit" rel="nofollow">https://github.com/inngest/stepkit</a>.<p>StepKit extracts the core execution loop that we built in Inngest and makes it fully open, Apache 2, and hackable/pluggable to different backends.  We don’t want people to have to go through multiple major versions in SDKs to learn the lessons we’ve already learned in production:<p><i>It needs to work anywhere:</i> This SDK is push-based and receives tasks via API endpoints, so it works anywhere (servers, serverless, k8s, etc).  That's also customizable.  It doesn’t need any specific runtime or bundler support.<p><i>It needs to be complete:</i> StepKit includes the entire execution engine: step discovery, memoization, a core event loop to turn async steps into generators <i>without</i> relying on `try/catch` based control, and middleware for extensibility (eg, end-to-end encryption, Sentry integrations, and so on).<p><i>It needs a simple API:</i> StepKit APIs are explicit `step.*()` functions, which we designed in our original Inngest SDK back in 2022.  They’re easy to read, understand, implement, and use.  They contain all of the primitives for durable execution: steps, suspend/resume, human-in-the-loop, and observability.  These same APIs have also been adopted by Cloudflare, Netlify, Convex, and others, and support billions of runs every month.<p><i>It needs to be resilient</i>: Steps tolerate changes when refactoring, and provide the building blocks of durable execution without complex abstractions.<p>We’re starting with in-memory, filesystem, Inngest, and Cloudflare (WIP) drivers, with more coming soon.<p>The roadmap includes middleware, compatible SDKs in different languages, as well as extensions like concurrency controls and idempotency: <a href="https://github.com/inngest/stepkit/discussions/52" rel="nofollow">https://github.com/inngest/stepkit/discussions/52</a>.<p>Excited to see what you think:  <a href="https://github.com/inngest/stepkit" rel="nofollow">https://github.com/inngest/stepkit</a>.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46048322">https://news.ycombinator.com/item?id=46048322</a></p>
<p>Points: 36</p>
<p># Comments: 16</p>
]]></description><pubDate>Tue, 25 Nov 2025 17:39:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46048322</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=46048322</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46048322</guid></item><item><title><![CDATA[New comment by tonyhb in "GitHut – Programming Languages and GitHub (2014)"]]></title><description><![CDATA[
<p>I really, really want this updated too and saw it in my bookmarks.  Figured the historic data was interesting, and that someone might want to give this another go.</p>
]]></description><pubDate>Thu, 20 Nov 2025 22:11:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=45998548</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=45998548</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45998548</guid></item><item><title><![CDATA[GitHut – Programming Languages and GitHub (2014)]]></title><description><![CDATA[
<p>Article URL: <a href="https://githut.info/">https://githut.info/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45998047">https://news.ycombinator.com/item?id=45998047</a></p>
<p>Points: 88</p>
<p># Comments: 33</p>
]]></description><pubDate>Thu, 20 Nov 2025 21:33:37 +0000</pubDate><link>https://githut.info/</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=45998047</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45998047</guid></item><item><title><![CDATA[Explicit APIs vs. Magic Directives]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.inngest.com/blog/explicit-apis-vs-magic-directives">https://www.inngest.com/blog/explicit-apis-vs-magic-directives</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45699554">https://news.ycombinator.com/item?id=45699554</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 24 Oct 2025 22:02:33 +0000</pubDate><link>https://www.inngest.com/blog/explicit-apis-vs-magic-directives</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=45699554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45699554</guid></item><item><title><![CDATA[New comment by tonyhb in "Make any TypeScript function durable"]]></title><description><![CDATA[
<p>Actually, both Vercel and Cloudflare are based off of the API that we built at <a href="https://inngest.com" rel="nofollow">https://inngest.com</a> (disclaimer, I'm a founder).<p>I strongly believe that being obvious about steps with `step.run` is important:  it improves o11y, makes things explicit, and you can see transactional boundaries.</p>
]]></description><pubDate>Thu, 23 Oct 2025 23:28:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45688794</link><dc:creator>tonyhb</dc:creator><comments>https://news.ycombinator.com/item?id=45688794</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45688794</guid></item></channel></rss>