<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: lalitmaganti</title><link>https://news.ycombinator.com/user?id=lalitmaganti</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 22 Jul 2026 21:09:37 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=lalitmaganti" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by lalitmaganti in "Perfection Is Not Over-Engineering"]]></title><description><![CDATA[
<p>I agree with the actual principle I think this article is trying to put across (don't give up on technical quality too early by dismissing it as "perfection") but I strongly disagree with the framing.<p>My biggest problem comes from:<p>> Every constraint on the table. Tighten those enough and something interesting happens, you end up with only one possible solution. And that solution is, somewhat ironically, the perfect one.<p>Constraints are not rigid and unchangable [1] but flexible things which can bend to solve the problem at hand. Constraints can be: deadlines you impose, frameworks you are working within, the shape of the output schema, performance characteristics etc. And because they trade off against each other, tightening them leaves you with several solutions, each fitting a different trade-off.<p>Constraints also change over time as you and your team's collective understanding of the problem, the environment or priority of the problem change. This needs to be considered when building the initial system too: baking in some flexibility means giving up some of today's "perfection" to deal with future variance.<p>Understanding what constraints matter, which can be shaped and trading them off against each other is, to a very large degree, the job of software engineering. So no, I don't think you enumerate the constraints and find the only solution which fits; this is a very simplistic take on the complexities of building software.<p>[1] unless you work in a dictatorial company in which case my condolences!</p>
]]></description><pubDate>Mon, 20 Jul 2026 14:48:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48979654</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=48979654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48979654</guid></item><item><title><![CDATA[Static search trees: 40x faster than binary search (2024)]]></title><description><![CDATA[
<p>Article URL: <a href="https://curiouscoding.nl/posts/static-search-tree/">https://curiouscoding.nl/posts/static-search-tree/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48951898">https://news.ycombinator.com/item?id=48951898</a></p>
<p>Points: 199</p>
<p># Comments: 15</p>
]]></description><pubDate>Fri, 17 Jul 2026 20:24:55 +0000</pubDate><link>https://curiouscoding.nl/posts/static-search-tree/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=48951898</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48951898</guid></item><item><title><![CDATA[When Impressive Performance Gains Do Not Matter]]></title><description><![CDATA[
<p>Article URL: <a href="https://blog.colinbreck.com/when-impressive-performance-gains-do-not-matter/">https://blog.colinbreck.com/when-impressive-performance-gains-do-not-matter/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48718919">https://news.ycombinator.com/item?id=48718919</a></p>
<p>Points: 5</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 29 Jun 2026 13:16:14 +0000</pubDate><link>https://blog.colinbreck.com/when-impressive-performance-gains-do-not-matter/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=48718919</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48718919</guid></item><item><title><![CDATA[17 bugs in 10 weeks from AI security scanning]]></title><description><![CDATA[
<p>Article URL: <a href="https://lalitm.com/post/perfetto-security-bugs-ai/">https://lalitm.com/post/perfetto-security-bugs-ai/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48479239">https://news.ycombinator.com/item?id=48479239</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 10 Jun 2026 16:58:29 +0000</pubDate><link>https://lalitm.com/post/perfetto-security-bugs-ai/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=48479239</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48479239</guid></item><item><title><![CDATA[New comment by lalitmaganti in "Don't answer the first question"]]></title><description><![CDATA[
<p>I do want to clarify my point of view since there does seem to be some interpretation which I didn't entirely anticipate (wholly my mistake):<p>1. I'm <i>not</i> claiming that every interaction with a user needs to be turned into a full discussion. There are lots of cases where the answer is "this is what you're looking for, here's a link to the docs". In my experience, this has gone down a <i>lot</i> over time because people tend now to rely on AI much more heavily for those sort of questions in the first place so they won't even reach you. But it does happen and in that case, the best thing for both sides is to point to the documentation and move on.<p>2. If I am going to employ this strategy, I always try and both give the direct answer to the question <i>and</i>, as a separate point, ask them the context. Quoting directly from the post:<p>> well the answer to your immediate question is X but that’s a pretty strange thing to ask for because of reason Y. Can you tell me more about the wider problem you’re trying to solve?<p>3. This does necessitate that you are in some sense an "knowledgeable" on the problem space someone comes to you with: I would <i>never</i> employ this strategy in an area I didn't already feel I was quite well equipped to give my 2c on.<p>4. If the person I'm speaking to I know for a fact is already knowledgeable on an area, I would be very hesitant to use this approach because I try and be charitable with assuming that people generally know what they are talking about. While yes, I'm not going to be perfect every time in judging this, I think you can get a pretty good sense from the way they ask their question and how clearly they respond to your initial answer whether they are not (ties to 3 as it requires you are good enough in the space to judge this).<p>5. If someone pushes back, I will always defer to their read of the situation, I'm not here to make people do what I suggest, I will simply say "well I think you should do/not do A because of B reason but at the end of the day your call" and leave it at that. I think it's a good thing to be able to have respectful discussions on topics even if both sides agree to disagree.</p>
]]></description><pubDate>Mon, 18 May 2026 15:51:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=48181467</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=48181467</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48181467</guid></item><item><title><![CDATA[Don't answer the first question]]></title><description><![CDATA[
<p>Article URL: <a href="https://lalitm.com/post/dont-answer-the-first-question/">https://lalitm.com/post/dont-answer-the-first-question/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48177163">https://news.ycombinator.com/item?id=48177163</a></p>
<p>Points: 96</p>
<p># Comments: 52</p>
]]></description><pubDate>Mon, 18 May 2026 09:21:42 +0000</pubDate><link>https://lalitm.com/post/dont-answer-the-first-question/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=48177163</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48177163</guid></item><item><title><![CDATA[How I use LLMs as a staff engineer in 2026]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.seangoedecke.com/how-i-use-llms-in-2026/">https://www.seangoedecke.com/how-i-use-llms-in-2026/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48164166">https://news.ycombinator.com/item?id=48164166</a></p>
<p>Points: 6</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 16 May 2026 22:01:32 +0000</pubDate><link>https://www.seangoedecke.com/how-i-use-llms-in-2026/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=48164166</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48164166</guid></item><item><title><![CDATA[New comment by lalitmaganti in "You can beat the binary search"]]></title><description><![CDATA[
<p>I also wrote recently [1] about Exponential Search [2] which is another algorithm if you need to repeatedly binary search in an array where the elements you're searching are themselves are sorted. It allowed for an 8x speedup in our workload!<p>[1] <a href="https://lalitm.com/post/exponential-search/" rel="nofollow">https://lalitm.com/post/exponential-search/</a>
[2] <a href="https://en.wikipedia.org/wiki/Exponential_search" rel="nofollow">https://en.wikipedia.org/wiki/Exponential_search</a></p>
]]></description><pubDate>Thu, 30 Apr 2026 18:04:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47966135</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47966135</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47966135</guid></item><item><title><![CDATA[New comment by lalitmaganti in "Eight years of wanting, three months of building with AI"]]></title><description><![CDATA[
<p>> How many of 500 tests were actually reviewed/tested and found good?<p>Essentially ~all of the tests were found to be useful but in a more "smoke test" capacity i.e. they provided good "basic" coverage but it was clear that it was also not sufficient.<p>Which is why in the rewrite:
1) I built a TCL driver that run the upstream SQLite tests and verified we accepted or rejected the SQL in the same way as SQLite.<p>2) I wrote a test runner which checked for "idempotence" i.e. run the formatter over <i>all</i> the SQL from all the other types of tests then verify that the AST was identical in the input and output.<p>3) I also wrote a script which ran the formatter over the PerfettoSQL standard library [1], a real world SQLite-based codebase that I knew and deeply understood so I could go through each file and manually check the output.<p>> Examples of that would also be nice (I don't doubt the personal feel that waste was justified)<p>Some things learned concretely:<p>1) C was not going to work for the higher level parts of the project, even the formatter was not pleasant to read or write in C, the validator was much worse<p>2) Doing the SQLite source extraction in the same language meant that I could ship a really cool feature where the syntaqlite CLI could "generate dialect extensions" without people needing to download a separate script, run their own extraction on the SQLite source code, or worse yet, need to fork syntaqlite. This actually makes it technically possible for people in the web playground to dynamically build extensions to SQLite (though I haven't ended up plumbing that feature through yet)<p>3) Having a DSL [2] for extensions of SQLite (that e.g. PerfettoSQL could use) was the correct way to go rather than using YAML/JSON/XML etc becaue of how much clarity it provided and how AI took a lot of the annoyance of maintaining a DSL away.<p>4) I need to invest much more in testing from the start and also more testing where the correctness can be "proved" in some way (e.g. idempotence testing or SQLite upstream testing as described above)<p>[1] <a href="https://github.com/google/perfetto/tree/main/src/trace_processor/perfetto_sql/stdlib" rel="nofollow">https://github.com/google/perfetto/tree/main/src/trace_proce...</a>
[2] <a href="https://docs.syntaqlite.com/v0.2.15/guides/custom-dialects/" rel="nofollow">https://docs.syntaqlite.com/v0.2.15/guides/custom-dialects/</a></p>
]]></description><pubDate>Mon, 06 Apr 2026 11:12:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47659378</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47659378</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47659378</guid></item><item><title><![CDATA[New comment by lalitmaganti in "Eight years of wanting, three months of building with AI"]]></title><description><![CDATA[
<p>> It's a huge mistake to start building with Claude without mapping out a project in detail first, by hand.<p>I agree with you in theory but in my opinion, it doesn't work so well when you don't even know what exactly you are looking for at the start. Yes I knew I wanted a formatter, linter, parse but which language should those be written in, should they be one project or many, how the pieces should fit together, none of that was clear to me.<p>As I pointed out in the article, in these sort of "greenfield projects" I work a lot better with concrete prototypes and code in front of me I can dissect instead of trying to endlessly play with designs in my head.<p>> It's also nuts to me that he had to go back in later to build in tests and validation.<p>I think this is a little misleading. Yes I did do some testing retroactively (i.e. the upstream validation  testing) but I was using TDD + verifying outputs immediately, even during the vibe coding phase. The problem as I point out is that this is not enough. Even when I had unit tests written at the same time as they code, they had lots of holes and over time, I kept hitting SQL statements which failed which the testing did not cover.</p>
]]></description><pubDate>Mon, 06 Apr 2026 10:35:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47659127</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47659127</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47659127</guid></item><item><title><![CDATA[New comment by lalitmaganti in "Eight years of wanting, three months of building with AI"]]></title><description><![CDATA[
<p>> With so much waste and not a single example of the "brilliant at giving you the right answer to a specific technical question"<p>In my opinion, "giving me a better understanding for the architecture of the project" is reasonable technical compensation.<p>> Indeed, feeling is the only saving grace for a mountain of random unreviewed tests<p>I think I say a line or two above that this was after a review of the codebase so I <i>did</i> review these tests.</p>
]]></description><pubDate>Mon, 06 Apr 2026 10:06:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47658931</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47658931</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47658931</guid></item><item><title><![CDATA[New comment by lalitmaganti in "Eight years of wanting, three months of building with AI"]]></title><description><![CDATA[
<p>> <a href="https://sqlitebrowser.org/" rel="nofollow">https://sqlitebrowser.org/</a><p>sqlitebrowser.org is cool but it's not the sort of developer tools I'm talking about. As I clarify in the side notes, I'm looking for a formatter, linter, LSP, not an IDE.<p>> <a href="https://sqlite.org/syntax.html" rel="nofollow">https://sqlite.org/syntax.html</a><p>As I replied to some other comment, I'm very aware that there is a syntax diagram but that really only tells half the story. If you actually look at those diagrams into detail, or you look into the the actual parse.y grammar (<a href="https://sqlite.org/src/file?name=src/parse.y&ci=trunk" rel="nofollow">https://sqlite.org/src/file?name=src/parse.y&ci=trunk</a>), you'll find that they're missing a lot of information which is required for you to actually interpret the SQL into an AST.<p>When I say "formal specification", I'm not just talking about the formal grammar rules but also how those interpreted in practice. Something closer to the ECMAScript specification (<a href="https://ecma-international.org/publications-and-standards/standards/ecma-262/" rel="nofollow">https://ecma-international.org/publications-and-standards/st...</a>).</p>
]]></description><pubDate>Mon, 06 Apr 2026 10:00:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47658884</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47658884</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47658884</guid></item><item><title><![CDATA[New comment by lalitmaganti in "Eight years of wanting, three months of building with AI"]]></title><description><![CDATA[
<p>When I refer to "extracting sources from the SQLite codebase" a big part of that was indeed referring to compiling Lemon and executing it against a custom implementation of parse.y [1].<p>The problem comes from <i>how</i> SQLite's upstream parse.y works. Becuase it doesn't actually generate the parse tree, instead generating the bytecode directly, the intepretation of any node labelled "id" or "nm" is buried inside the source code behind many layers of functions. You can see for yourself by looking at SQLite's parse.y [2]<p>[1] <a href="https://github.com/LalitMaganti/syntaqlite/tree/main/syntaqlite-buildtools/parser-actions" rel="nofollow">https://github.com/LalitMaganti/syntaqlite/tree/main/syntaql...</a> 
[2] <a href="https://sqlite.org/src/file?name=src/parse.y&ci=trunk" rel="nofollow">https://sqlite.org/src/file?name=src/parse.y&ci=trunk</a></p>
]]></description><pubDate>Mon, 06 Apr 2026 01:17:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47655798</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47655798</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47655798</guid></item><item><title><![CDATA[New comment by lalitmaganti in "Eight years of wanting, three months of building with AI"]]></title><description><![CDATA[
<p>I'm very well aware of parse.y, if you look into the syntaqlite code, you'd find it's a critical part of how the whole "source extraction" mentioned in the article works [1]<p>To be clear when I say "formal specification", I'm not just talking about the formal grammar rules but also how those interpreted in practice. Something closer to the ECMAScript specification (<a href="https://ecma-international.org/publications-and-standards/standards/ecma-262/" rel="nofollow">https://ecma-international.org/publications-and-standards/st...</a>).<p>[1] <a href="https://github.com/LalitMaganti/syntaqlite/blob/93638c68f9a0a8b5f69587bcd64adef0f3e30a2c/syntaqlite-buildtools/src/parser_tools/parser_pipeline.rs#L51" rel="nofollow">https://github.com/LalitMaganti/syntaqlite/blob/93638c68f9a0...</a></p>
]]></description><pubDate>Mon, 06 Apr 2026 01:13:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47655762</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47655762</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47655762</guid></item><item><title><![CDATA[Engineers do get promoted for writing simple code]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.seangoedecke.com/simple-work-gets-rewarded/">https://www.seangoedecke.com/simple-work-gets-rewarded/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47528300">https://news.ycombinator.com/item?id=47528300</a></p>
<p>Points: 21</p>
<p># Comments: 3</p>
]]></description><pubDate>Thu, 26 Mar 2026 09:26:57 +0000</pubDate><link>https://www.seangoedecke.com/simple-work-gets-rewarded/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47528300</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47528300</guid></item><item><title><![CDATA[Finding all regex matches has always been O(n²)]]></title><description><![CDATA[
<p>Article URL: <a href="https://iev.ee/blog/the-quadratic-problem-nobody-fixed/">https://iev.ee/blog/the-quadratic-problem-nobody-fixed/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47443903">https://news.ycombinator.com/item?id=47443903</a></p>
<p>Points: 260</p>
<p># Comments: 70</p>
]]></description><pubDate>Thu, 19 Mar 2026 18:40:02 +0000</pubDate><link>https://iev.ee/blog/the-quadratic-problem-nobody-fixed/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47443903</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47443903</guid></item><item><title><![CDATA[Syntaqlite: High-fidelity devtools that SQLite deserves]]></title><description><![CDATA[
<p>Article URL: <a href="https://lalitm.com/post/syntaqlite/">https://lalitm.com/post/syntaqlite/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47416581">https://news.ycombinator.com/item?id=47416581</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 17 Mar 2026 18:47:07 +0000</pubDate><link>https://lalitm.com/post/syntaqlite/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=47416581</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47416581</guid></item><item><title><![CDATA[Why AI Coding Advice Contradicts Itself]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.anup.io/why-ai-coding-advice-contradicts-itself/">https://www.anup.io/why-ai-coding-advice-contradicts-itself/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46788305">https://news.ycombinator.com/item?id=46788305</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 27 Jan 2026 22:51:42 +0000</pubDate><link>https://www.anup.io/why-ai-coding-advice-contradicts-itself/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=46788305</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46788305</guid></item><item><title><![CDATA[How I estimate work as a staff software engineer]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.seangoedecke.com/how-i-estimate-work/">https://www.seangoedecke.com/how-i-estimate-work/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46739415">https://news.ycombinator.com/item?id=46739415</a></p>
<p>Points: 10</p>
<p># Comments: 2</p>
]]></description><pubDate>Fri, 23 Jan 2026 23:33:15 +0000</pubDate><link>https://www.seangoedecke.com/how-i-estimate-work/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=46739415</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46739415</guid></item><item><title><![CDATA[Crypto grifters are recruiting open-source AI developers]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.seangoedecke.com/gas-and-ralph/">https://www.seangoedecke.com/gas-and-ralph/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46654878">https://news.ycombinator.com/item?id=46654878</a></p>
<p>Points: 102</p>
<p># Comments: 28</p>
]]></description><pubDate>Sat, 17 Jan 2026 03:07:08 +0000</pubDate><link>https://www.seangoedecke.com/gas-and-ralph/</link><dc:creator>lalitmaganti</dc:creator><comments>https://news.ycombinator.com/item?id=46654878</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46654878</guid></item></channel></rss>