8 ms·
We rewrote JSONata with AI in a day, saved $500k/year
- mads_quist 6mo agoI mean, great, but which CTO gave greenlight to such a weird architectural choice. Sorry for the rant!
- misiek08 6mo agoIncredible how Dec'25 to Feb'26 was such a shift point. I'm wondering for how long those models will stay so cheap, but what a time to be alive!
- captn3m0 6mo agoFor context, JSONata's reference implementation is 5.5k lines of javascript.
- therealdrag0 6mo agoSo it doubled LOC
- chrismorgan 6mo agoAnd no, there are no dependencies in package.json either (other than devDependencies for tests). Which cumulatively means a competent developer could probably port it in less than one day. They almost certainly spent longer working out how to deploy and integrate the original JS and ironing out the problems, than it would have taken to port it in the first place. That’s sad. And then they definitely spent much longer making their optimised fast path for simple expressions. Which they probably wouldn’t have bothered with if they had just ported the whole thing. As for trying things like embedding V8… this is getting ridiculous. I strongly suspect no one had actually looked at the code, but had just assumed all along that it was much more complex than it actually was. The entire thing is a tragedy.
- kjksf 6mo ago> port it in less than one day There's confidence and there's barking mad delusion. Here's the reality. I once ported 50k loc from Java to Go. Here are details: https://blog.kowalczyk.info/article/19f2fe97f06a47c3b1f118fd06851fad/lessons-learned-porting-50k-loc-from-java-to-go.html https://blog.kowalczyk.info/article/19f2fe97f06a47c3b1f118fd... Java => Go is easier than JavaScript => Go because languages are more similar. That was a very line-by-line port. Because I was paid by hour I took detailed notes. I spent 601 hours to port it. 50k / 601 = 83 lines ported per hour, 665 per 8 hour day, but really 500 per 6 working hours a day. No one does sustained 8 hours of writing code daily. I would consider that very fast and yet order of magnitude slower than your 5.5 k per day. 10x is not a mis-estimation, it's a full blown delusion.
- chrismorgan 6mo agoI stand by my estimate, also having done interlanguage ports. I’m not saying any project of such size could be ported in one day, but this very much looks to be one of the more straightforward ones. Being a small project also accelerates things, as there are far fewer moving parts, concepts, &c. to keep in order. I wouldn’t say that Java → Go is inherently easier than JavaScript → Go. There are more features in JavaScript that, if used, will make porting much harder, but they may well not be used. There’s a bit of async in this project, that’s probably the hardest bit, and maybe a little variadic calling. But comparing with your case, some challenges just aren’t there, such as inheritance and access control. From a quick skim, I think perhaps 2000 lines will need no change beyond removing semicolons. And since this is mostly parser and AST sort of stuff, a lot of the rest is mechanical repetition and application of regular expression replacements or editor macros. One note from your article, on fluent function chaining: > This only works in languages that communicate errors via exceptions. When a function additionally returns an error, it’s no longer possible to chain it like that. This is a Go limitation, not fundamental. (And Go is well known to be bad or at least verbose at error propagation.) Rust’s ? operator is an easy counterexample.
- hu3 6mo agoI'm with the other commenter. There's no way to port 5k lines in a day with confidence unless using LLMs + strong unit tests. I won't even ask for an example of otherwise, but feel free to provide a repo where a human did that.
- ebb_earl_co 6mo ago> This was costing us ~$300K/year in compute, and the number kept growing as more customers and detection rules were added. Maybe I’m out of touch, but I cannot fathom this level of cost for custom lambda functions operating on JSON objects.
- slopinthebag 6mo agoIt has to be satire right? Like, you aren't out of touch on this. I get engineers maybe making the argument that $300k / year on cloud is the same as 1.5 devops engineers managing in-house solutions, but for just json parsing????
- encoderer 6mo agoI wonder if you've ever worked on a web service at scale. JSON serialization and deserialization is notoriously expensive.
- bawolff 6mo agoThey got a 1000x speed up just by switching languages. I highly doubt the issue was serialization latency, unless they were doing something stupid like reserializing the same payload over and over again.
- encoderer 6mo agoWell, for starters, they replace the RPC call with an in-process function call. But my point is anybody who's surprised that working with JSON at scale is expensive (because hey it's just JSON!) shouldn't be surprised.
- bawolff 6mo agoWell everything is expensive at scale, and any deserialization/serialization step is going to be expensive if you do it enough. However yes i would be surprised. JSON parsing is pretty optimized now, i suspect most "json parsing at scale is expensive" is really the fault of other parts of the stack
- deleted 6mo ago[deleted]
- cjonas 6mo agoThe docs indicate there are already 2 other go implementations. Why not just use one of those? https://docs.jsonata.org/overview.html https://docs.jsonata.org/overview.html
- aniceperson 6mo agoBecause his prompt said to implement in go, not to check if an go implementation already exists. They have been running kubernetes clusters to parse json, this is not suprising.
- g947o 6mo agoBecause otherwise they wouldn't have written this meaningless article and contributed to the AI hype.
- zer00eyz 6mo agoAnd to market their AI security product.
- vova_hn2 6mo agoLast commits in those repos are 5 and 7 years ago.
- heavyset_go 6mo agoIf they're vendoring the dependency anyway, that wouldn't matter much if they're not using features that were added since 2021. The last release of jsonata was mid 2025, and there hasn't been new features since the last 2022 release until the latest, so it's likely those other ports are fine.
- leonidasv 6mo agoThose are compatible with the 1.x syntax while the gnata is compatible with the 2.x. Also, the repos haven't seen new commits in a long time.
- hrmtst93837 6mo ago
- cosmotic 6mo agoNext maybe they will use a binary format instead of JSON.
- jujube3 6mo agoStop reading ahead.
- TZubiri 6mo agoAs long as you are using JSON, you will be able to optimize. Did you know that you can pass numbers up to 2 billion in 4 constant bytes instead of as a string of 20 average dynamic bytes? Also, fun fact, you can cut your packets in half by not repeating the names of your variables in every packet, you can instead use a positional system where cardinality represents the type of the variable. And you can do all of this with pre AI technology! Neat trick huh?
- g947o 6mo agoLike other commenters already said, there are numerous ways they could have avoided/reduced the $500k/yr cost pre LLM, including simply paying someone to do port the code. So I don't see there is any point in the article.
- hootz 6mo agoThe point of the article is that that was his way to do it. To show that it is possible to save money with AI rewrites.
- g947o 6mo agoThen I have learned nothing new. Since at least November 2022, everyone in the software industry knows that "it is possible to save money with AI rewrites". I found nothing I don't already know from the article. The only way this specific article gained attention is with the number in the headline.
- jkercher 6mo agoI too have used a similar strategy of packing variables together. I even came up with a name for it. I called it a "building."
- zimpenfish 6mo ago> Did you know that you can pass numbers up to 2 billion in 4 constant bytes And up to 4 billion if you're not bothered about those pesky negative nancies!
- whalesalad 6mo ago> The reference implementation is JavaScript, whereas our pipeline is in Go. So for years we’ve been running a fleet of jsonata-js pods on Kubernetes - Node.js processes that our Go services call over RPC. > This was costing us ~$300K/year in compute Wooof. As soon as that kind of spend hit my radar for this sort of service I would have given my most autistic and senior engineer a private office and the sole task of eliminating this from the stack. At any point did anyone step back and ask if jsonata was the right tool in the first place? I cannot make any judgements here without seeing real world examples of the rules themselves and the ways that they are leveraged. Is this policy language intentionally JSON for portability with other systems, or for editing by end users?
- encoderer 6mo agoYour most autistic and senior engineer is now named Claude. Point him at nearly any task, pair-program with codex, and review the results.
- deleted 6mo ago[deleted]
- bawolff 6mo agoI'm just kind of confused what took them so long. So it was costing 300k a year, plus causing deployment headaches, etc. But its a realitively simple tool from the looks of it. It seems like their are many competitors, some already written in go. Its kind of weird why they waited so long to do this. Why even need AI? This looks like the sort of thing you could port by hand in less than a week (possibly even in a day).
- schumpeter 6mo agoIf I had to guess… The same thing happening to a lot of the industry… the era of cheap money is over.
- kjuulh 6mo agoNot saying it is a good thing, but an organization, especially if there has been a lot of turnover, can enter a state of status quo. > it must have that architecture for a reason, we don't enough knowledge about it to touch it, etc. That or they simply haven't had the time, cost can creep up over time. 300k is a lot though. Especially for just 200 replicas. Seems wildly in-efficient. I also don't understand why you wouldn't just bundle these with the application in question. Have the go service and nodejs service in the same pod / container. It can even use sockets, it should be pretty much instant (sub ms) for rpc between them.
- delecti 6mo agoMy takeaway is almost the opposite. A company that has scaled to the point that they need 200 replicas of JSONata costing 300k/yr must be spending so much on compute that the difference is absolutely peanuts.
- torben-friis 6mo ago>The approach was the same as Cloudflare’s vinext rewrite: port the official jsonata-js test suite to Go, then implement the evaluator until every test passes. the first question that comes to mind is: who takes care of this now? You had a dependency with an open source project. now your translated copy (fork?) is yours to maintain, 13k lines of go. how do you make sure it stays updated? Is this maintainance factored in? I know nothing about JSONata or the problem it solves, but I took a look at the repo and there's 15PRs and 150 open issues.
- simonw 6mo agoThat's only important if the plan is to stay feature-compatible with the original going forward. For this case, where it's used as an internal filtering engine, I expect the goal is fixing bugs that show up and occasionally adding a feature that's needed by this organization.
- shimman 6mo agoThis case looks like pure marketing fluff rather than sound engineering tho.
- torben-friis 6mo ago>expect the goal is fixing bugs that show up and occasionally adding a feature that's needed by this organization. Even if we assume a clean and bug free port, and no compatibility required moving forward, and a scope that doesn't involve security risks, that's already non trivial, since it's a codebase no one has context of. Probably not 500k worth of maintainance (because wtf were they doing in the first place) but I don't buy placing the current cost at 0.
- PetahNZ 6mo agoIf the original released a bunch more features that you wanted why wouldn't you just redo the conversion against the latest version?
- kikimora 6mo agoIn practice the biggest issue will be documentation and tutorials. If JSONata diverges from their fork users will have problems reconciling what they see online with their engine capabilities.
- amazingamazing 6mo agohow many billions of compute are wasted because this industry can't align on some binary format across all languages and APIs and instead keep serializing and deserializing things
- kanbankaren 6mo agoASN.1 and its on the wire format BER and DER have been available for close to 30+ years and it is running on billions of devices(cryptography, SSL, etc) and other critical infrastructures. but, it is very boring stable, which means I can't tell the world about my wartime stories and write a blog about it.
- whalesalad 6mo agoJSON is not really the core issue which is the expression parser. "user.name = foo and user.id > 1000". Even if you were operating on binary data, turning an arbitrary pseudocode string into actual function logic + executing it would be the slow part.
- Aurornis 6mo agoThe key point for me was not the rewrite in Go or even the use of AI, it was that they started with this architecture: > The reference implementation is JavaScript, whereas our pipeline is in Go. So for years we’ve been running a fleet of jsonata-js pods on Kubernetes - Node.js processes that our Go services call over RPC. That meant that for every event (and expression) we had to serialize, send over the network, evaluate, serialize the result, and finally send it back. > This was costing us ~$300K/year in compute, and the number kept growing as more customers and detection rules were added. For something so core to the business, I'm baffled that they let it get to the point where it was costing $300K per year. The fact that this only took $400 of Claude tokens to completely rewrite makes it even more baffling. I can make $400 of Claude tokens disappear quickly in a large codebase. If they rewrote the entire thing with $400 of Claude tokens it couldn't have been that big. Within the range of something that engineers could have easily migrated by hand in a reasonable time. Those same engineers will have to review and understand all of the AI-generated code now and then improve it, which will take time too. I don't know what to think. These blog articles are supposed to be a showcase of engineering expertise, but bragging about having AI vibecode a replacement for a critical part of your system that was questionably designed and costing as much as a fully-loaded FTE per year raises a lot of other questions.
- cogogo 6mo agoThink this is pure piggyback marketing on what cloudflare did with next.js. In my experience a company that raised $30MM a month ago is extremely unlikely to be investing energy in cost rationalization/optimization. edit: saw the total raise not the incremental 30MM
- hobofan 6mo ago> If they rewrote the entire thing with $400 of Claude tokens it couldn't have been that big. The original is ~10k lines of JS + a few hundred for a test harness. You can probably oneshot this with a $20/month Codex subscription and not even use up your daily allowance.
- hansvm 6mo agoI mostly agree, but it's more appropriate to weigh contributions against an FTE's output rather than their input. If I have a $10m/yr feature I'm fleshing out now and a few more lined up afterward, it's often not worth the time to properly handle any minor $300k/yr boondoggle. It's only worth comparing to an FTE's fully loaded cost when you're actually able to hire to fix it, and that's trickier since it takes time away from the core team producing those actually valuable features and tends to result in slower progress from large-team overhead even after onboarding. Plus, even if you could hire to fix it, wouldn't you want them to work on those more valuable features first?
- ipsum2 6mo agoEveryone is surprised at the $300k/year figure, but that seems on the low end. My previous work place spends tens of millions a year on GPU continuous integration tests.
- Aurornis 6mo agoThe $300K/year figure is surprising because it was for something that didn't need to exist (RPC calls).
- mickael-kerjean 6mo agoA principal engineer spending his week end vibe coding some slop at a rate of 13k lines of code in 7h to replace a vendor. Is this really the new direction we want to set for our industry? For the first time ever, I have had a CTO vibe conding something to replace my product [1] even though it cost less than a day of his salary. The direction we are heading makes me want to quit, all points to software now being worthless [1] https://github.com/mickael-kerjean/filestash https://github.com/mickael-kerjean/filestash
- para_parolu 6mo agoWhat vendor? My understanding is that they replaced one piece of software with similar one that allows them to simplify system and save a lot of money. And looks like they are happy with quality and have a good test coverage. In AI era not everything should be npm dependency or 3rd party. Small things are easier to make in house and tailor to one’s needs.
- dpark 6mo ago> Is this really the new direction we want to set for our industry? I think the better question is whether it’s avoidable. I share the concern but is there a real alternative? “Say no to AI!” is fine until your competitors decide they don’t share your concerns. Or at least not enough to stop using it.
- pravetz259 6mo agoCongrats! This author found a sub-optimal microservice and replaced it with inline code. This is the bread and butter work of good engineering. This is also part of the reason that microservices are dangerous. The bad engineering part is writing your own replacement for something that already exists. As other commenters here have noted, there were already two separate implementations of JSONata in Go. Why spend $400 to have Claude rewrite something when you can just use an already existing, already supported library?
- vovavili 6mo agoIf I were in the author's shoes, I would have tried first to fork the other Go implementation of this JSON library, then use AI to pull it up to the modern standard and make it pass all his tests. Still, good job on him - this is what data engineering actually looks like.
- hooverd 6mo agoDarn, I'd wished they improved one of the existing Go or Rust implementations.
- crazygringo 6mo ago> The approach was the same as Cloudflare’s vinext rewrite: port the official jsonata-js test suite to Go, then implement the evaluator until every test passes. This makes me wonder, for reimplementation projects like this that aren't lucky enough to have super-extensive test suites, how good are LLM's at taking existing code bases and writing tests for every single piece of logic, every code path? So that you can then do a "cleanish-room" reimplementation in a different language (or even same language) using these tests? Obviously the easy part is getting the LLM's to write lots of tests, which is then trivial to iterate until they all pass on the original code. The hard parts are how to verify that the tests cover all possible code paths and edge cases, and how to reliably trigger certain internal code paths.
- jng 6mo agoI've found Claude Code with Opus 4.5+ to be excellent at generating test cases that exercise the different features, and even push into the edge cases. You sometimes need to nudge it into generating more convoluted cases when necessary, but then it is just nudging. I now routinely generate more LOCs of test cases than actual core code, while I used to only write very limited test cases just for the most complex areas amenable to automated testing. I've been successful at using Claude Code this way: 1. get it to generate code for complex data structures in a separate library project 2. use the code inside a complex existing project (no LLM here) 3. then find a bug in the project, with some fuzzy clues as to causes 4. tell CC about the bug and ask it to generate intensive test cases in the direction of the fuzzy clues 5. get the test cases to reproduce the bug and then CC to fix it by itself 6. take the new code back to the full project and see the issue fixed All this using C++. I've been a pretty intensive developer for ~35 years. I've done this kind of thing by hand a million times, not any more. We really live in the future now.
- faangguyindia 6mo agoImagine how many tests were frauded and fake passed by claude on this project
- hperrin 6mo agoThat is _definitely_ copyright infringement.
- sublinear 6mo agoThese articles remind me so much of those old internet debates about "teleportation" and consciousness. Your physical form is destructively read into data, sent via radio signal, and reconstructed on the other end. Is it still you? Did you teleport, or did you die in the fancy paper shredder/fax machine? If vibe code is never fully reviewed and edited, then it's not "alive" and effectively zombie code?
- zellyn 6mo agoIf you can incorporate Quamina or similar logic in there, you might be able to save even more… worth looking into, at least
- VladVladikoff 6mo agoThis isn’t the first time I’ve read a ridiculous story like this on hackernews. It seems to be a symptom of startups who suddenly get a cash injection with no clue how to properly manage it. I have been slowly scaling a product over the past 12 years, on income alone, so I guess I see things differently, but I could never allow such a ridiculous spend on something so trivial reach even 1% of this level before squashing it.
- jgalt212 6mo agoThese "solutions" place a lot of faith in a "complete" set of test cases. I'm not saying don't do this, but I'd feel more comfortable doing this plus hand-generating a bunch of property tests. And then generating code until all pass. Even better, maybe Claude can generate some / most of the property tests by reading the standard test suite.
- grogers 6mo agoWell they also shadowed production traffic and fixed some bugs that were causing mismatching results. Not saying that stuff can't still slip through, but it's a good way to evaluate it against real data in a way you can't from just test cases alone
- jgalt212 6mo agoparallel execution that auto-generates test cases from exceptions is very slick. That being said, you still need humans in the loop as sometimes the oracle is not THE oracle.
- felixagentai 6mo ago[flagged]
- comrade1234 6mo agoSo they used an ai trained on the original source code to "rewrite" the original source code.
- badc0ffee 6mo agoIt was trained on the two existing open source Go implementations of JSONata.
- cromka 6mo agoIf they were paying $500k/year, why haven't they paid someone to rewrite it? Surely would be cheaper still. But above everything else, this is a great example of how much JavaScript inefficiency actually costs us, as humanity. How many companies burn money through like this?
- zer00eyz 6mo agoOn top of that there are probably a few more hits for the containers, vm and hypervisor, all those pods have monitoring etc. All the layers of abstraction are just stacks of turtles giving the illusion of being easier but adding complexity and cost/overhead. It is a security product, so unless they want to deal with the exfiltration charges on the data it's probably better to keep it in AWS. Thats the nasty double edge sword of "cloud", and how we're all getting locked in. All the bits on their own seem to make perfect sense, but it's become apparent that the orchestra has been blind folded and given noise canceling head phones.
- edinetdb 6mo ago[flagged]
- bitbasher 6mo agoWhy not use FFI from Go to something in C/C++ that is faster than Go's JSON stuff?
- lwansbrough 6mo agoHuh, I just did basically the same thing. My requirements were not due to spending $300k/yr on parsing (lol), but I was amazed how far I got just asking the AI for progressively more functionality. My use case is a bit different. I wanted JSONata as the query language to query Flatbuffers data (via schema introspection) in Rust, due to its terseness and expressiveness, which is a great combination for AI generated queries.
- rozzie 6mo agoSome background on one of the other two golang implementations mentioned in the comments. Years ago I hired an Upwork contractor to port v1.5.3 to golang as best he could. He did a great job and it served us well, however it was far, far from perfect and it couldn't pass most of the JS test suite. The worst was that it had several recursion bugs that could segfault with bad expressions. That was the now-deprecated implementation at https://github.com/blues/jsonata-go https://github.com/blues/jsonata-go Early in 2025 I used Claude Code and Codex to do a proper, compliant port that passes the full set of tests and is safe. It was most certainly not a trivial task for AI, as many nuances of JSONata syntax derive from its JS roots. Regardless, it was a great experience and here's the 2.0.6 AI port, along with a golang exerciser that lets you flip back and forth between the implementations. We did a seamless migration and it's been running beautifully in prod in Blues' Notehub for quite a while - as a core transformation capability used by customers in our JSON message pipeline. https://github.com/jsonata-go/jsonata https://github.com/jsonata-go/jsonata
- zozbot234 6mo agoWhy not issue a pull request to the JSONata Github project mentioning your implementation in the docs/READMEs? That goes for OP's port too of course.
- arpinum 6mo agoI was also involved in writing a clean-slate port of JSONata after finding issues in the jsonata-go repo and not wanting to run the javascript version in a sandbox. It was relatively easy until we stressed it with 20 layers of nested context and 5000 line expressions and suddenly we had memory explosions not present in the JS version. JSONata is too tied to the language. Looking back, we should have slightly altered the spec and written some code mods. we didn't have customers bringing their existing JSONata over so they wouldn't notice the differences.
- err4nt 6mo agoThe moment the amount of savings surpassed the annual salary of a good programmer you know you made the wrong investment.
- __0x01 6mo ago> Correctness: 1,778 test cases from the official jsonata-js test suite + 2,107 integration tests in the production wrapper. The AI generated code can still introduce subtle bugs that lead to incorrect behaviour. One example of this is the introduction of functions into the codebase (by AI) that have bugs but no corresponding tests. EDIT: correct quotation characters
- sethammons 6mo agoAI will happily update tests to be wrong or miss the intention of the code and test the wrong things.
- fock 6mo agohttps://github.com/blues/jsonata-go https://github.com/blues/jsonata-go hmmm
- jdub 6mo ago> At Reco, we have a policy engine that evaluates JSONata expressions against every message in our data pipeline - billions of events, on thousands of distinct expressions. The original architecture choice and price almost gave me a brain aneurysm, but the "build it with AI" solution is also under-considered. This looks like a perfect candidate for existing, high quality, high performance, production grade solutions such quamina (independent successor to aws/event-ruler, and ancestor to quamina-rs). There's going to be a lot of "we were doing something stupid and we solved it by doing something stupid with AI [LLM code]" in our near future. :-|
- chii 6mo agoBut if the ai built solution is slightly less stupid, then it's still a win isnt it?
- simultsop 6mo agobut they saved $500k. Before some humans knew about constraints in it. Now nobody knows. Jokes aside, we will probably see everyone doing this, trying to remove human hands off of code, because they corrupt and AI does not. Joke jokes aside why did we even code until AI?
- pullshark91 6mo agoI don't understand if you're joking or not. I hope you are...
- simultsop 6mo agoIt is not me, it is the whole industry doing it
- legacynl 6mo agoAs far as I see it, AI is the reason they're unnecessarily paying 300k/year in the first place. A human engineer was the one that identified the problem with this JS dependency, and the human told then made AI fix its' original mistake. That's a win for human engineers, not AI.
- neya 6mo agoAI company selling AI products claims to have solved a problem using AI when it could've solved it with better code and engineering foundations
- tabs_or_spaces 6mo agoThe headline seems to be flashy indeed, but ai didn't really solve this imo. They just seemed to fix their technology choices and got the benefits. There's existing golang versions of jsonata, so this could have been achieved with those libraries too in theory. There's nothing written about why the existing libraries aren't good enough and why a new one needed to be written. Usually you need to do some due diligence in this area, but no mentions of it in this post In order to measure the real efficiency, gnata should've been benchmarked against the existing golang libraries. For all we know, the ai implementation is much slower. The benchmarks in the blog are also weird. The measurement is done within the app, but you're meant to measure the calls within the library itself (e.g calling the js version in its isolated benchmark vs go version in its isolated benchmark). So you don't actually know what the actual performance of the ai written version is? The only benefit, again, is that they fixed their existing bad technology choice, and based on what is observed, with a lesser bad technology choice. Then it's layered with clickbait marketing titles for others to read. I'll probably need to expect more of these types of posts in the future.
- leonidasv 6mo ago> There's existing golang versions of jsonata, so this could have been achieved with those libraries too in theory The only one I found (jsonata-go) is a port of JSONata 1.x, while the gnata library they've published is compatible with the 2.x syntax. Guess that's why.
- heavyset_go 6mo agoLooking at the releases, it looks like JSONata's 2.1.0 release from July 2025 added the `?:` and `??` syntax, and there hasn't been an update to the syntax since January 2020's 1.8.0 release that added `%`
- teaearlgraycold 6mo agoAnyone who ships a k8s cluster to make a JS library available over RPC needs to have a long hard look in the mirror. Should have bundled node, quickjs, anything into the go nodes for the first pass. k8s truly is a cancer for many teams.
- deleted 6mo ago[deleted]
- themafia 6mo ago> then pointed AI at it and had it implement code until every test passed. You used to have two problems. Now you have three.
- leonidasv 6mo agoCongrats to the team. Unfortunately many comments here are missing the big picture by attacking the previous architectural decisions with no context about why they were taken. It's always easy to say so in retrospect. Also, I have to comment on the many commenters that spent time researching existing Go implementations just to question everything, because "AI bad". I don't know how much enterprise experience the average HN commenter these days have, but it's not usually easy to simply swap a library in a production system like that, especially when the replacement lib is outdated and unmaintened (which is the case here). I remember a couple of times I was tasked with migrating a core library in a production system only to see everything fall apart in unexpected ways the moment it touched real data. Anyway, the case here seems to be even simpler: the existing Go libs, apart from being unmaintened and obscure, don't support current feature of the JSONata 2.x, which gnata does. Period. The article missed anticipating such critics and explaining this in more detail, so that's my feedback to the authors. But congrats anyway, this is one of the best use cases for current AI coding agents.
- politelemon 6mo ago> No longer just vibe coding It is, by definition.
- nirb89 6mo agoHey all, I'm the author of the blog post. I'm honestly loving the discussion this is generating (including the less flattering comments here). I'll try to answer some of the assumptions I've seen, hopefully it clears a few things. First off - some numbers. We're a near real-time cybersecurity platform, and we ingest tens of billions of raw events daily from thousands of different endpoints across SaaS. Additionally, a significant subset of our customers are quite large (think Fortune 500 and up). For the engine, that means a few things: - It was designed to be dynamic by nature, so that both out-of-the-box and user-defined expressions evaluate seamlessly. - Schemas vary wildly, of which there are thousands, since they are received from external sources. Often with little documentation. - A matching expression needs to be alerted on immediately, as these are critical to business safety (no use triggering an alert on a breached account a day later). - Endpoints change and break on a near-weekly basis, so being able to update expressions on the fly is integral to the process, and should not require changes by the dev team. Now to answer some questions: - Why JSONata: others have mentioned it here, but it is a fantastic and expressive framework with a very detailed spec. It fits naturally into a system that is primarily NOT maintained by engineers, but instead by analysts and end-users that often have little coding expertise. - Why not a pre-existing library: believe me, we tried that first. None actually match the reference spec reliably. We tried multiple Go, Rust and even Java implementations. They all broke on multiple existing expressions, and were not reliably maintained. - Why JSON at all (and not a normalized pipeline): we have one! Our main flow is much more of a classic ELT, with strongly-defined schemas and distributed processing engines (i.e. Spark). It ingests quite a lot more traffic than gnata does, and is obviously more efficient at scale. However, we have different processes for separate use-cases, as I suspect most of the organizations you work at do as well. - Why Go and not Java/JS/Rust: well, because that's our backend. The rule engine is not JUST for evaluating JSONata expressions. There are a lot of layers involving many aspects of the system, one of which is gnata. A matching event must pass all these layers before it even gets to the evaluation part. Unless we rewrote our backend out in JS, no other language would have really mitigated the problem. Finally, regarding the $300k/year cost (which many here seem to be horrified by) - it seems I wasn't clear enough in the blog. 200 pods was not the entire fleet, and it was not statically set. It was a single cluster at peak time. We have multiple clusters, each with their own traffic patterns and auto-scaling configurations. The total cost was $25k/month when summed as a whole. Being slightly defensive here, but that really is not that dramatic a number when you take into account the business requirements to get such a flexible system up and running (with low latency). And yes, it was a cost sink we were aware of, but as others have mentioned - business ROI is just as important as pure dollar cost. It is a core feature that our customers rely on heavily, and changing its base infrastructure was neither trivial nor cost-effective in human-hours. AI completely changed that, and so I took it as a challenge to see how far it could go. gnata was the result.
- elicohen1000 6mo ago[dead]
- NetOpWibby 6mo agoWith my favorite database (Gel) effectively dead (team acquihire by Vercel), I told Claude to reimplement it in Deno/TypeScript. While I haven't tested it on a real project yet (on my TODO for tmrw), hundreds of tests pass so we'll see. If it does work I'll do a Show HN in a few months. One thing I always do with LLM-code though is review every single line (mainly because I'm particular with formatting). disc.sh is gonna be the domain when I launch the marketing site.
- hperrin 6mo agoYou also really need to review its logic too, because it has a tendency to lack the full context of the code it’s working on, and make very silly logic mistakes.
- NetOpWibby 6mo ago1000% People who claim AGI from these chatbots don't doublecheck the work.
- adityaathalye 6mo agoIf "AI" is the poor man's (unhygienic) macro system, then a lot of such token software builders are going to viscerally know what it is to plumb the darketst depths of the "Lisp Curse".
- techpression 6mo agoAs others have said, the title is bollocks. For any mismanaged infrastructure you can make these crazy claims. If they did it today it would be ”saved $100/year”. The thing is, if it took them a day with AI it would’ve been _at most_ a week without it. So why did they wait? Someone is not being responsible with the company funds.
- sudeepsd__ 6mo ago[dead]
- pugchat 6mo ago[dead]
- camgunz 6mo agoWait could I have written a JSONata parser and sold it to reco.ai for $499k/yr?
- nbevans 6mo agoThe most baffling thing here is that they allowed a very very simple JSON expression language to become a 500k/year cost burden on their business My god. But I am happy that they finally realised their error and put it right.
- gloosx 6mo agoIf the first commit was two weeks ago, how did it ended up saving 500k a year already? Did they mean expected to save?
- panelpowder 6mo ago[dead]
- mergeshield 6mo ago[flagged]
- hgo 6mo ago> I shared the numbers internally and someone asked about the ROI. Production cost for jsonata-js in the previous month was about $25K - now it was 0. That conversation ended up being pretty short. I'm obviously projecting from my own experience, but it echoes so clearly how power can be wielded without actual insight and an almost arrogantly: "OK, all very nice, but the ROI...?" The article seems to come from a company with stellar engineering so maybe doesn't apply to this case. But, the tone I imagine from that comment still stands out. To me more, precisely because of the mature engineering. Of course ROI is important and a company exists to build it. I'm extrapolating from something tiny and thinking of the Boeing culture shift: https://news.ycombinator.com/item?id=25677848 https://news.ycombinator.com/item?id=25677848 In short, why can't good engineering just be good engineering fostered with trust and then profits?
- hgo 6mo agoIn my mind, this "observation" (if I can call it that) may explain or at least relate to what other commenters bring: > I don't know what to think. These blog articles are supposed to be a showcase of engineering expertise, but bragging about having AI vibecode a replacement for a critical part of your system that was questionably designed and costing as much as a fully-loaded FTE per year raises a lot of other questions. https://news.ycombinator.com/item?id=47537229 https://news.ycombinator.com/item?id=47537229
- sarchertech 6mo agoI’ve predicted the future and I’ve figured out where vibe coding is going to go based on this article. 1. People are going to come in and vibe code a replacement for some shitty component in a morning. They aren’t going to take time to verify and understand the code. 2. The new code will fix most of the problems with the original component, but it will have a whole new set of issues. 3. People will use AI to fix the bugs, but they won’t take the time to understand the fixes or the regression tests that they tell AI to add. 4. The new system will get so complicated that it’s hard for even AI to work on it. The “test suite” will be so full of tests that are redundant, and nonsensical that the run time will be too high to meaningfully guide AI. And even in the cases where AI does use it, many of the tests are just reimplementing the code under test in the test (Claude does this about 25% of the time based on what I’ve seen if you don’t catch it). 5. Goto 1 This is the same cycle I’ve seen in 90% of companies I’ve worked at, it will just be on a faster cadence. And that is how we’ll get to a place where we output 100x lines of code, and spend 2x developers salaries on tokens, with little meaningful impact on the outside world.
- spiderfarmer 6mo ago> The new system will get so complicated that it’s hard for even AI to work on it. I used AI to refactor several of my own "move fast and break things" projects and it worked absolutely GREAT. So if that's what you're concerned about, you're not seeing where the puck is going.
- sarchertech 6mo agoDid you take the time to review the code?
- spiderfarmer 6mo agoYes, it's for a Laravel project and Laravel Boost + Pint makes both Claude and Codex write great code. The trick is to make a good plan first. And to not rewrite your entire codebase all at once. But that advice is older than my all of my kids combined.
- Yokohiii 6mo agoBad decision making. Lack of code ownership. Absence of confidence. Is what made this exaggerated cost even possible. Or: the peter principle.
- lmaoeven 6mo ago$500k for JSON files LOL OK
- hirako2000 6mo agoThese examples of rewrite are fallacy. See Next.js, over a decade of iterative development. Countless vulnerabilities discovered internally, and externally, which got patches with tribal knowledge acquired by core contributors, security reviewers. Now Joe shows off he rewrote it with Vite at its core, for just 1,100 dollars worth of token. Performance improvement and no licensing liability. Outcome: more money for Nvidia, and even more money into the pockets of your next hackers.
- bustah 6mo ago[flagged]
- tantalor 6mo agoThey say "embedding V8 directly into Go (to avoid the network hop)" was only an "incremental improvement" I'm very curious why this didn't help more. That was my first thought. Maybe they didn't get the result they wanted immediately so gave up before evaluating this fully?
- garganzol 6mo agoJS runtimes are fatty, so embedding one instantly adds at least 30-50 Mb of RAM usage. Imagine that you do this for just for a specific function (JSON processing) and your total RAM budget for a whole pod is around 256 Mb. No doubt, this approach would work reasonably well for machines with plenty of RAM, but I can see why it can be a bottleneck when scaled to N instances. RAM is expensive, and when you multiply those 50 extra megabytes by N, your total costs quickly climb up.
- swills 6mo agoI'm going to be the contrarian here. I have looked at the code. I suspect quite a few nil deref panics in their future.
- BrianFHearn 6mo ago[dead]
- vitriol83 6mo agothis seems to be the way. make great technical improvement in a way that's nothing to do with AI. the only way to make executives happy is to then tenuously link it to AI usage.
- stronglikedan 6mo agoIs JSONata to JSON what Xpath is to XML?
- vips7L 6mo agoThe future of open source will be to never publish tests because of things like this.
- maxothex 6mo ago[dead]
- tonymet 6mo agothe real lesson is that Jsonata should have been written in C so anyone could link to it and keep the parser resident in memory, to avoid $300k vCPU costs spent on marshalling & RPC Think of the gigawatts wasted on this nonsense.
- forrestthewoods 6mo agoMy opinion of the median webdev is… impolite at best. This article does not do much to improve their standing.
- vitalikpie 6mo agoWell I'm seriously jealous about these posts. I rewrote this and that. One 10x engineer + Claude did everything in an hour. It feels like I'm getting gaslighted. I use AI at work with C#/Python - it fine. It can write some glue code and sometimes even pretty well. But I have to hand-hold it a lot. My own project in Swift. Boy, AI can't handle Apple quirks - multiple iterations, code does not compile or missing crucial pieces (there are navigation links but not navigation stack). I'm trying to be not picky. I want AI to do my job. But it's so far away. Am I alone and everyone rewriting Linux in Rust over a weekend?
- hperrin 6mo agoI mean, look at the source. This is from an AI company.
- hperrin 6mo agoI rereleased this as public domain, since it’s all AI generated, so it is public domain: https://github.com/hperrin/gnata https://github.com/hperrin/gnata
- tzury 6mo agoOne day a kid came home breathing heavily, to his father’s surprise face he tells, daddy daddy, I saved a dollar fifty! How did you do it? ask the father Instead of taking the bus, I ran after it all the way home. If you were smarter, you could have save us $22 by running after a taxi! This old joke came to mind while reading this post. A tech company spends hundreds of thousands of dollars per year, “for years”, on a piece of software that could have been replaced by a month of coding top? (prior to LLM and all), you sit and write and save the money. If I was an investor in this company I would have hire a team to look through their entire stack. See, if this JSON thingy alone is half a million a year, their entire cloud is at least $35MM annually. Perhaps this is not even a bad business idea. One can offer companies to provide drop-in replacement for their costly “micro services that no one dares to touch” and share the cost savings.
- convexly 6mo agoThis problem existed for years, so at some point decided it wasn't worth fixing and that decision just stuck. I wonder how many companies have multiple of these types of problems that they aren't addressing.
- bmd1905 6mo ago[dead]