<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: rorylaitila</title><link>https://news.ycombinator.com/user?id=rorylaitila</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Apr 2026 07:42:09 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=rorylaitila" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by rorylaitila in "We should revisit literate programming in the agent era"]]></title><description><![CDATA[
<p>Even on the latest models, LLMs are not deterministic between "don't do this thing" and "do this thing". They are both related to "this thing" and depending on other content in the context and seed, may randomly do the thing or not. So to get the best results, I want my context to be the smallest possible truthful input, not the most elaborated. More is not better. I think good names on executable source code and tightest possible documentation is best for LLMs, and probably for people too.</p>
]]></description><pubDate>Mon, 09 Mar 2026 09:34:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=47306725</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=47306725</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47306725</guid></item><item><title><![CDATA[New comment by rorylaitila in "Semantic ablation: Why AI writing is generic and boring"]]></title><description><![CDATA[
<p>It's a concern but definitely depends on the context and my self perceived blast radius of what I'm researching. I do find myself often re-searching results to see what something more authoritative says about it, and I also continue to read source books on topics I'm taking a deep dive in. I have definitely seen current LLMs get my domain wrong.</p>
]]></description><pubDate>Thu, 19 Feb 2026 10:41:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47072356</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=47072356</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47072356</guid></item><item><title><![CDATA[New comment by rorylaitila in "A DuckDB-based metabase alternative"]]></title><description><![CDATA[
<p>Nice work! I met Jorin a couple years ago at a tech meetup and this was just an idea at the time. So cool to see the consistent progress and updates and to see this come across HN.</p>
]]></description><pubDate>Wed, 18 Feb 2026 17:00:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47063207</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=47063207</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47063207</guid></item><item><title><![CDATA[New comment by rorylaitila in "Semantic ablation: Why AI writing is generic and boring"]]></title><description><![CDATA[
<p>Yes I noticed this as well. I was last writing up a landing page for our new studio. Emotion filled. Telling a story. I sent it through grok to improve it. It removed all of the character despite whatever prompt I gave. I'm not a great writer, but I think those rough edges are necessary to convey the soul of the concept. I think AI writing is better used for ideation and "what have I missed?" and then write out the changes yourself.</p>
]]></description><pubDate>Tue, 17 Feb 2026 16:51:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47049613</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=47049613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47049613</guid></item><item><title><![CDATA[New comment by rorylaitila in "A Programmer's Loss of Identity"]]></title><description><![CDATA[
<p>I can totally relate. I enjoy the craft of developing and making the product 'just right.' I do use AI as a fancy auto-complete, but I don't want to lose situational awareness and go full-vibe. I think that is the sweet spot for me, just another tool. However, I see my market value of this style of work rapidly deteriorating. I'm suspect I'll be the programming-Amish. I am probably going to transition my business to more of a community-studio, with tech being an implementation detail.</p>
]]></description><pubDate>Tue, 17 Feb 2026 16:38:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47049431</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=47049431</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47049431</guid></item><item><title><![CDATA[New comment by rorylaitila in "JavaScript-heavy approaches are not compatible with long-term performance goals"]]></title><description><![CDATA[
<p>I've skipped the whole 'modern' web stack. I've stayed SSR first, hrefs/forms/url as only routing primitives, progressive enhancement, vanillajs-islands only where absolutely necessary. Its great. Apps never randomly break. No build hell. UX easy to debug (just look at the HTML). No random performance degradations. No client has ever said it feels dated. Just finished my first app-like PWA, also SSR. Getting great compliments on the UI and slick interactions using just native browser transitions. The vanilla web stack gets better and better! Honestly don't know what people think they are gaining with a heavy frontend.</p>
]]></description><pubDate>Mon, 16 Feb 2026 14:49:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47035691</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=47035691</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47035691</guid></item><item><title><![CDATA[New comment by rorylaitila in "Should your developer company go open source?"]]></title><description><![CDATA[
<p>I dabbled in my own open source projects over the years. I learned that I really just like serving my customers directly. I don't enjoy managing PRs or responding to feedback from strangers. I think "who you enjoy to serve" is a useful frame for deciding how to go to market. Each type of go-to-market approach has it's own type of 'customer.'</p>
]]></description><pubDate>Wed, 11 Feb 2026 22:42:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=46982270</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46982270</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46982270</guid></item><item><title><![CDATA[New comment by rorylaitila in "The AI Vampire"]]></title><description><![CDATA[
<p>Luckily we work for ourselves in our studio, and I have no one to answer to except my business partner and customers, and tech is my domain. But I have concluded "we already build fast enough." Really how much faster do we need to build? Deployments: automated. Tests: automated. Migrations: automated. Frameworks: complete. Stack: stable. Scaling: solved. OKAY so now with AI we can build "MORE!" More of WHAT exactly? What makes our lives better? What makes our customers happier? How about I just directly feed customer support tickets into Claude and let it rip.<p>I'm increasingly thinking either people were terrible developers, used shit tools to begin with, or are in a mass psychosis. I certainly feel bad for anyone reporting to "the business guy." He never respected you to begin with, and now he literally thinks "why are you so slow? I can build Airbnb in a weekend."<p>For someone who previously could achieve <i>nothing</i>, these tools are magical, as they can now achieve <i>something</i>. It feels to them like infinity because their base was 0. That alone will create a lot of things they wouldn't have been able to, good for them. However for people who already know what they're doing, I only feel slightly pushed along some asymptote. My bottlenecks simply are not measured in tokens to screen.</p>
]]></description><pubDate>Wed, 11 Feb 2026 09:50:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46972983</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46972983</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46972983</guid></item><item><title><![CDATA[New comment by rorylaitila in "Parse, Don't Validate (2019)"]]></title><description><![CDATA[
<p>I make great use of value objects in my applications but there are things I needed to do to make it ergonomic/performant. A "small" application of mine has over 100 value objects implemented as classes. Large apps easily get into the 1000s of classes just for value objects. That is a lot of boilerplate. It's a lot of boxing/unboxing. It'd be a lot of extra typing than "stringly typed" programs.<p>To make it viable, all value objects are code-generated from model schemas, and then customized as needed (only like 5% need customization beyond basic data types). I have auto-upcasting on setters so you can code stringly when wanted, but everything is validated (very useful for writing unit tests more quickly). I only parse into types at boundaries or on writes/sets, not on reads/gets (limit's the amount of boxing, particularly on reading large amounts of data). Heavy use of reflection, and auto-wiring/dependency injection.<p>But with these conventions in place, I quite enjoy it. Easy to customize/narrow a type. One convention for all validation. External inputs are by default secure with nice error messages. Once place where all values validation happens (./values classes folder).</p>
]]></description><pubDate>Tue, 10 Feb 2026 17:22:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=46963331</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46963331</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46963331</guid></item><item><title><![CDATA[New comment by rorylaitila in "Nobody knows how the whole system works"]]></title><description><![CDATA[
<p>There are many layers to this. But there is one style of programming that concerns me. Where you neither understand the layer above you (why the product exists and what the goal of the system is) nor the layer below (how to actually implement the behavior). In the past, many developers barely understood the business case, but at least they understood how to translate into code, and could put backpressure on the business. Now however, it's apparently not even necessary to know how the code works!<p>The argument seems to be, we should float on a thin lubricant of "that's someone else's concern" (either the AI or the PMs) gliding blissfully from one ticket to another. Neither grasping our goal nor our outcome. If the tests are green and the buttons submit, mission accomplished!<p>Using Claude I can feel my situational awareness slipping from my grasp. It's increasingly clear that this style of development pushes you to stop looking at any of the code at all. My English instructions do not leave any residual growth. I learn nothing to send back up the chain, and I know nothing of what's below. Why should I exist?</p>
]]></description><pubDate>Mon, 09 Feb 2026 14:11:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46945387</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46945387</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46945387</guid></item><item><title><![CDATA[New comment by rorylaitila in "Ask HN: What are you working on? (February 2026)"]]></title><description><![CDATA[
<p>A couple different projects. I've been cataloging and publishing my vintage ad collection at <a href="https://adretro.com" rel="nofollow">https://adretro.com</a>. It's starting to get a lot of organic traffic after about a year online, which is cool.<p>I'm also working on a new strength gains-tracking app that is a lot more intuitive, motivating and friend first. I've been using it with some friends for the last 10 weeks and everyone making is consistent gains. It is my first full PWA, vanillaJs, backend is Lucee & MySQL. Works great on iOS and Android, no one has any complaints. The web stack has come a long way I am probably not going to do a native mobile app for a while. I'll probably make it public in a couple weeks.</p>
]]></description><pubDate>Sun, 08 Feb 2026 22:42:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=46939334</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46939334</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46939334</guid></item><item><title><![CDATA[New comment by rorylaitila in "Vouch"]]></title><description><![CDATA[
<p>I don't know if this is the right solution, but I appreciate the direction. It's clear that AI slop is trading on people's good names and network reputation. Poisoning the well. The dead internet is here. In multiple domains people are looking for a solution to "are you someone/something worthy of my emotional investment." I don't think code can be held to be fully AI-free, but we need a way to check that they are empathy-full.</p>
]]></description><pubDate>Sun, 08 Feb 2026 19:48:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46937827</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46937827</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46937827</guid></item><item><title><![CDATA[New comment by rorylaitila in "I am happier writing code by hand"]]></title><description><![CDATA[
<p>I've developed at the speed of "vibecoding" long before LLMs by having highly thought-compressed tools, frameworks and snippets. Most of my applications use Model Driven Development where the data model automatically builds the application DAO/controllers/validations/migrations. The data model <i>is</i> the application. I find LLMs help me write procedures upon this data model even a little bit faster than I did before. But the data model <i>is the design</i>. Unless I turnover the entire design to the LLM, I am always the decider on the data model. I will always have more context about where I want to evolve the data model. I enjoy the data modelling aspect and want to remain in the driver seat, with LLMs as my implementer of procedures.</p>
]]></description><pubDate>Sun, 08 Feb 2026 16:27:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=46935771</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46935771</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46935771</guid></item><item><title><![CDATA[New comment by rorylaitila in "Some notes on starting to use Django"]]></title><description><![CDATA[
<p>I simplify it this way. I don't delete fields or tables in migrations once an app is in production. Only manually clean them up after they are impossible to be used by any production version. I treat the database schema as-if it were "append only" - Only add new fields. This means you always "roll-forward", a database. Rollback migrations are 'not a thing' to me. I don't rename physical columns in production. If you need an old field and a new field to be running simultaneously that represent the same datum, a trigger keeps them in sync.</p>
]]></description><pubDate>Wed, 28 Jan 2026 12:50:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=46794651</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46794651</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46794651</guid></item><item><title><![CDATA[New comment by rorylaitila in "Tell HN: Amazon has deactivated my seller account"]]></title><description><![CDATA[
<p>Don't use other companies brand names in your product titles. Regardless of what other people get away with. Regardless of what is in the Amazon fine print. Don't use trademark logos in your product images. Make your own brand name. Make it "compatible with" in the product description.</p>
]]></description><pubDate>Wed, 21 Jan 2026 19:42:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46710537</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46710537</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46710537</guid></item><item><title><![CDATA[New comment by rorylaitila in "The challenges of soft delete"]]></title><description><![CDATA[
<p>Databases store facts. Creating a record = new fact. "Deleting" a record = new fact. But destroying rows from tables = disappeared fact. That is not great for most cases. In rare cases the volume of records may be a technical hurdle; in which case, move facts to another database. The times I've wanted to destroy large volume of facts is approximately zero.</p>
]]></description><pubDate>Tue, 20 Jan 2026 23:30:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=46699118</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46699118</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46699118</guid></item><item><title><![CDATA[New comment by rorylaitila in "Ask HN: Is it still worth pursuing a software startup?"]]></title><description><![CDATA[
<p>Yes, but not in relationship to products being copied. Copying the technical aspects of an idea has been possible for a long time anyway.<p>Knowing how to acquire, support and cultivate a growing user base is the challenge.<p>The availability of a technical "moat" has always been a select property of only a few products. All real moats are network effects.</p>
]]></description><pubDate>Sat, 17 Jan 2026 15:46:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46658941</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46658941</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46658941</guid></item><item><title><![CDATA[New comment by rorylaitila in "Show HN: Context-Aware AI Assistant for macOS [Open Source]"]]></title><description><![CDATA[
<p>Nice! Definitely addresses a workflow I deal with daily. Any plans for a Windows version?</p>
]]></description><pubDate>Fri, 16 Jan 2026 15:37:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=46647493</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46647493</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46647493</guid></item><item><title><![CDATA[New comment by rorylaitila in "You can make up HTML tags"]]></title><description><![CDATA[
<p>It's one of my favorite little tricks. I use it when I'm building applications that have a lot of nested "contexts" and its not just styling/layout. Makes it easier to search for and jump to these contexts and mentally parse them. But I use it sparingly. It gets out of hand fast if you start doing <parent-nested-2ndchild-list-item>.</p>
]]></description><pubDate>Mon, 29 Dec 2025 16:41:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=46422377</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=46422377</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46422377</guid></item><item><title><![CDATA[New comment by rorylaitila in "My trick for getting consistent classification from LLMs"]]></title><description><![CDATA[
<p>Continuing the brands example, by default I store all of the brands returned as is (in SQL). On occasion, I will manually come across different variations of a brand that I decide is better combined into a primary brand. All of the secondary brands get marked as relating to a primary brand. Then the next time a new ad gets tagged as a secondary brand, I know I can use the primary brand instead.<p>So in essence, the process is what I might call 'eventually modelled' (to borrow from the concept of eventual consistency). I use the LLM entities as is, and gradually conform them to my desired ontology as I discover the correct ontology over time.</p>
]]></description><pubDate>Thu, 23 Oct 2025 11:32:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=45680650</link><dc:creator>rorylaitila</dc:creator><comments>https://news.ycombinator.com/item?id=45680650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45680650</guid></item></channel></rss>