163 points by cjlm 11 hours ago | 50 comments
Aurornis 10 hours ago
The 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.

ezst 3 hours ago
>> 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.

And this, this is the core/true/insightful story the executives will never hear about.

sigmoid10 1 hour ago
Eh. If you get into enterprise business, this is the accepted management style. AI will now mix this up a little, but before you basically needed to ask if you want to blow 300k on developer salaries to maybe fix something that is already working and generating money, or add more features to the roadmap you can pin on your chest. Scaling infrastructure is the best choice for 90% of managers, especially since they are not the ones paying for it and this kind of technical debt doesn't matter on typical bonus check timeframes.
xnx 36 minutes ago
Managers love big cloud spend so the vendors take them on fancy golf trips ... er ... "Conferences".
DrBazza 15 minutes ago
Most of the other replies to this hit the nail on the head.

A human writing some poor, but working code that is supposed to be a demo, goes to production 9 times out of 10.

Then it becomes critical infrastructure.

Then management cannot understand why something working needs a rewrite because there's no tangible numbers attached to it. The timeless classic developer problem.

We were here ^^^^ up to 2024-2025.

Now, with LLMs, you can at least come up with a vibe coded, likely correct, likely faster, solution in a morning, that management won't moan at you about.

9 minutes ago
CalRobert 24 minutes ago
"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."

You build something that's a dirty hack but it works, then your company grows, and nobody ever gets around to building it.

I was at a place spending over $4 million a year on redshift basically because someone had slapped together some bad (but effective!) queries when the company was new, and then they grew, and so many things had been built on top they were terrified to touch anything underneath.

hansvm 10 hours ago
I 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?
Aurornis 10 hours ago
They were running a big kubernetes infrastructure to handle all of these RPC calls.

That takes a lot of engineer hours to set up and maintain. This architecture didn't just happen, it took a lot of FTE hours to get it working and keep it that way.

kitd 3 hours ago
But that k8s engineer's cost is spread over all the functions the cluster is doing, not just the rpc setup.
hansvm 9 hours ago
Yeah, the situation from TFA doesn't make a lot of sense; I was just highlighting that it's not as clear-cut as "costs > 1 FTE => fix it."
arjie 5 hours ago
Kube is trivial to run. You hit a few switches on GKE/EKS and then a few simple configs. It doesn't take very many engineer hours to run. Infrastructure these days is trivial to operate. As an example, I run a datacenter cluster myself for a micro-SaaS in the process of SOC2 Type 2 compliance. The infra itself is pretty reliable. I had to run some power-kill sims before I traveled and it came back A+. With GKE/EKS this is even easier.

Over the years of running these I think the key is to keep the cluster config manual and then you just deploy your YAMLs from a repo with hydration of secrets or whatever.

cryptonym 1 hour ago
The cost is not just tokens, you need an actual human contributor looking into the issue, prompting, checking output, validating, deploying,... Difficult to compute the actual AI ROI. If $300K didn't matter without AI, it probably still doesn't matter with AI.
otabdeveloper4 1 hour ago
> it's often not worth the time to properly handle any minor $300k/yr boondoggle

No, because you can use that 300k to solve some real problem instead of literally lighting it on fire.

(Hell, just give employees avocado toasts or pingpong tables instead.)

faangguyindia 11 minutes ago
I've worked many companies

Kubernetes, app engine, beanstalk all are huge money sink

All managed services like cloud datastore, firestore all tend to accure lots of costs if you've good size app.

These are quick to start when you don't have any traffic. Once traffic comes, you the cost drastically goes up.

You can always do better running your own services.

andai 10 hours ago
Yeah, it's like those posts "we made it 5,000x faster by actually thinking about what the code is doing."
therealdrag0 6 hours ago
Exactly. Reddit did one last year like: “We migrated from python to golang and fixed a bunch of non-performant SQL queries. It was so fast, isn’t golang awesome?”
selcuka 3 hours ago
I was once asked to migrate a Microsoft Access application to C#/MS SQL Server because it was too slow. I just added a few database indexes to make it an order of magnitude faster.

(They still wanted to go ahead with the migration, but that's a different story.)

anon7000 5 hours ago
I have about a dozen projects I’d love to tackle in this vein. (Not as low hanging fruit, but enough effort they’re languishing in the backlog.) we’ll actually be able to get to more those projects with agents and good specs
SkyPuncher 5 hours ago
In my experience, a lot of these types of migrations aren't incredibly deep in terms of actual code being written. It's about being able to assess all of the affected facets accurately. Once that's all mapped out, it's pretty straight forward to migrate.
raincole 2 hours ago
> 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.

Will they? What makes you think so? If no one cared to improve it when it costed $300k/year, no one will care it when it's cheaper now.

hobofan 10 hours 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.

heavyset_go 5 hours ago
I wonder how much it would have cost them if they weren't paying cloud rates for all of that, and they kept the same general inefficient architecture, sans the Kubernetes bloat.

Doubt they'd have a blog post to write about that, though.

andersmurphy 1 hour ago
Wonder if the real value of LLMs/AI is similar to microservices in that it solves an organisational/culture problem.

In this case AI allowed the developer to make a change that the organisation would not have allowed. Regular rewrites don't let you signal to investors that you are AI ready/ascendant/agentic (whatever the latest AI hype term is) so would have been blocked. But, an AI rewrite.

deckar01 9 hours ago
You aren’t accounting for managerial politics. A product manager won’t gamble on a large project to lower operating cost, when their bonus is based on customer acquisition metrics.
parpfish 6 hours ago
The original author said he built this on the weekend, so my assumption is that this was something engineers had advocated for before but were shut down because management wanted them elsewhere.

The use of ai agents allowed them to shrink the problem down to the point where it was small enough to fit in their free time and not interrupt their assigned work.

ahtihn 52 minutes ago
Why are engineers spending their week-end on saving their company money especially if the company clearly doesn't care to allocate resources to the problem?

I get that it's fun and there's personal satisfaction in it, but it just reinforces to management that they don't need to care about allocating resources to optimisation, the problem will just take care of itself for free.

swiftcoder 6 minutes ago
At some point it's hard not to care about the work you do everyday. And if you care, then you are going to find yourself donating a Saturday here or there to solving big DevEx papercuts that you can't convince management to care about.

Should it be this way? No. Is it this way in practice? Unfortunately often.

usrusr 2 hours ago
A bit sarcastic, but still too close to reality for comfort:

For the managers, it's about a bonus. For engineers it's the existential question of future hirability: every future employer will love the candidate with experience in operating a $500k/a cluster. They guy who wrote a library that got linked into a service... Yeah, that's the kind they already have, not interested, move along.

jackkinsella 2 hours ago
A more charitable explanation would be that they were under product pressure for more features and were never given the slack time to even explore this angle. Happens a lot.
hiyer 7 hours ago
I was thinking the same - if JSONata was a priority for them, why not choose a language with good support, like JS or Java? OTOH if development language was a priority why not choose a format that is well supported in it?
otherme123 3 hours ago
>If they rewrote the entire thing with $400 of Claude tokens it couldn't have been that big.

It was "A few iterations and some 7 hours later - 13,000 lines of Go with 1,778 passing test cases."

mewpmewp2 2 hours ago
Yeah that checks out to me, 1 hour of active Claude Code usage has been around $50 per hour for me.
arjie 5 hours ago
I've seen it happen and it's usually just Normalization of Deviance in an organization that is focusing on something else. Someone needs some kind of functionality and Kube makes creating services trivial so they launch it into a different service[0]. Over time, while people are working on important things this thing occasionally has load issues so someone goes and bumps the maxReplicas up periodically. Eventually you come back to it a year later and maxReplicas is at 24 and you've removed the code paths for almost everything that is hitting the server except some inexplicable hot-loop.

Then you look at it and you're like "Jesus! What the fuck, I meant to have this be a stop-gap". I've done as bad when at near 100% duty-cycle. Often you're targeting just the primary thing that's blocking some revenue and if you get caught yak-shaving you're screwed. A year ago, I did one of these things because I was in the middle of two projects that were blocking a potential hundred-million in revenue.

A year down the line, Claude Opus 4.6 could have live-solved it. But Claude of that time would have required some time and attention and I was doing something else.

That engineering team is some 15 people strong and the company is at $400m+ revenue. If you saw the code, you'd wonder why anyone would have done something like this.

0: I once did this because some inscrutable code/library was tying us to an old runtime so I just encapsulated it in HTTP and moved it into a service.

cogogo 10 hours ago
Think 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

antonvs 4 hours ago
Completely agree. We have > $50m from our most recent funding round, and even a cloud expense of $50k/year (in our case for storage) is considered a high priority to address. If it was $300k, our CTO would be running around with a butane torch setting everyone’s hair on fire until the problem was resolved.

But, venture funding does create a lot of weird inefficiencies which vary from company to company.

mewpmewp2 2 hours ago
But what is your income? How important it is to address should be compared to that and current profits too if any, and whether you have to be profitable right now.
neya 5 hours ago
No offence, but inexperienced JS fanatics always do this because of some weird affectionado they have for the language itself. Otherwise, even a decently qualified CTO would have chosen to keep everything in Go from the beginning or might have not waited until they were bleeding $300k. JS is also the worst possible language choice for this problem. So, it definitely sounds a bunch of script kiddies with fancy titles bought with VC money rather than actual experience.
mewpmewp2 2 hours ago
What if you are about to get a potentially really high paying customer, but they might go elsewhere unless you deliver X feature immediately and it is so much quicker to do it with the JS script?
neya 1 hour ago
Given that the potential high paying customer is just that - a potential, one must always keep the long term platform stability in mind as it affects every other customer, not just this potential customer. Hence, it boils down to opportunity cost and setting the right expectations:

We can deliver feature X for you - incrementally broken down into sub-features x1, x2, x3 over a period of Y weeks/months

The other way to do this would be to build a custom integration on top of your existing APIs and beta test it alongside the customer, bill them accordingly and eventually merge the changes into the main platform, once you can guarantee stability.

But, both these methods will sound boring to VC funded companies as they are under constant pressure from VCs to show something in their weekly graphs - meaningful or not.

mewpmewp2 1 hour ago
The customer could be on the fence between you and a competitor and this customer could be potentially paying 10x more than all your existing customers together. It could make or break your company. They would go to the competitor immediately if you make it complicated for them and have delays with the setup. What do you do then?
neya 40 minutes ago
Sounds like a bad business model then - if you have to depend on one single customer to make or break your company.
hparadiz 5 hours ago
I've been refactoring stuff with a $20 ChatGPT account.
pepa65 5 hours ago
I've been refactoring stuff with anonymous ChatGPT usage..!
jdub 5 hours 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 5 hours ago
But if the ai built solution is slightly less stupid, then it's still a win isnt it?
simultsop 3 hours ago
but 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?

rozzie 6 hours ago
Some 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

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

kace91 10 hours 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 10 hours ago
That'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.

kace91 10 hours 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.

shimman 10 hours ago
This case looks like pure marketing fluff rather than sound engineering tho.
PetahNZ 2 hours ago
If the original released a bunch more features that you wanted why wouldn't you just redo the conversion against the latest version?
delijati 10 hours ago
it is all yolo from here on out ... every major ai decision we're making today feels like a bet that agi will eventually show up and clean up the mess
52-6F-62 9 hours ago
There is a choice, yet.
Herring 10 hours ago
The full translation took 7hrs and $400 in tokens. Applying diffs every quarter using AI is much easier and cheaper. Software engineering has completely changed.
aniceperson 10 hours ago
except there are 2 go implementations already, and he burnt 500k per year to have a kubernetes clusters to parse json (???), so the total gain is -500000*year - 400 + 1 (deducting prompt to use existing implementation)
saadn92 10 hours ago
> the first question that comes to mind is: who takes care of this now?

probably another AI agent at their company, who I'm sure won't make any mistakes

bawolff 10 hours ago
I mean, my first question would be how good the test suite on this project is.
tabs_or_spaces 5 hours ago
The 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 4 hours 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 4 hours ago
Looking 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 `%`
ebb_earl_co 10 hours 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.

otterley 10 hours ago
They said in the article that they were running up to 200 pods at a time. Doing some back of the envelope math, 200 pods at $300,000 year is about $0.17/hour, which is exactly what an EC2 c5.xlarge costs per hour (on demand). That has 4 vCPUs, so about 800 vCPUs during peak, with $0.0425/CPU-hour.

I do have some questions like:

* Did they estimate cost savings based on peak capacity, as though it were running 24x7x365?

* Did they use auto scaling to keep costs low?

* Were they wasting capacity by running a single-threaded app (Node-based) on multi-CPU hardware? (My guess is no, but anything is possible)

ebb_earl_co 9 hours ago
This is a helpful breakdown, thanks, @otterley.

It is, by orders of magnitude, larger than any deployment that I have been a part of in my work experience, as a 10-year data scientist/Python developer.

pjc50 34 minutes ago
This is larger than the resources I have available at Medium-Size-Fabless-Semi-Inc, and larger than the time I had two racks of C++ build farm. It is of course way larger than StackOverflow, which ran for years on two large machines.

All for .. a meta-SaaS?

jcims 10 hours ago
This is where the cost came from.

>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.

But either way, we're talking $25k/mo. That's not even remotely difficult to believe.

manquer 10 hours ago
First I thought they were AWS lambda functions, perhaps possible if they are over-provisioned for very concurrency or something similar $25k/month is in realm of possibility.

But no, the the post is talking about just RPC calls on k8s pods running docker images, for saving $300k/year, their compute bill should be well above $100M/year.

Perhaps if it was Google scale of events for billions of users daily, paired with the poorest/inefficient processing engine, using zero caching layer and very badly written rules, maybe it is possible.

Feels like it is just an SEO article designed to catch reader's attention.

slopinthebag 10 hours ago
It 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????
xp84 10 hours ago
For numbers like that, I can never tell whether it's just a vastly larger-scale dataset than any that I've seen as a non-FAANG engineer, OR, a hilariously-wasteful application of "mAnAgEd cLoUd sErViCeS" to a job that I could do on a $200/month EC2 instance with one sinatra app running per core. This is a made-up comparison of course, not a specific claim. But I've definitely run little $40 k8s clusters that replaced $800/month paid services and never even hit 60% CPU.
ebb_earl_co 9 hours ago
Right, this is roughly my mental situation, too. I guess that streaming JSON things can eat up compute way faster than I had any intuition for!
encoderer 10 hours ago
I wonder if you've ever worked on a web service at scale. JSON serialization and deserialization is notoriously expensive.
bawolff 10 hours ago
They 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 10 hours ago
Well, 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 10 hours ago
Well 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
leptons 9 hours ago
It can be, but $500k/year is absurd. It's like they went from the most inefficient system possible to create, to a regular normal system that an average programmer could manage.

I have no idea if they are doing orders of magnitude more processing, but I crunch through 60GB of JSON data in about 3000 files regularly on my local 20-thread machine using nodejs workers to do deep and sometimes complicated queries and data manipulation. It's not exactly lightning fast, but it's free and it crunches through any task in about 3 or 4 minutes or less.

The main cost is downloading the compressed files from S3, but if I really wanted to I could process it all in AWS. It also could go much faster on better hardware. If I have a really big task I want done quickly, I can start up dozens or hundreds of EC2 instances to run the task, and it would take practically no time at all... seconds. Still has to be cheaper than what they were doing.

slopinthebag 10 hours ago
Would it be better or worse if I had that experience and still said it's stupid?
encoderer 10 hours ago
You didn't say it was stupid. If you had, I would have just ignored the comment. But you expressed a level of surprised that led me to believe you're unfamiliar with how much of a pain in the ass JSON parsing is.
slopinthebag 10 hours ago
I think OP’s point was surprise that a company would spend so much on such inefficient json parsing. I’m agreeing. I get that JSON is not the fastest format to parse, but the overarching point is that you would expect changes to be made well before you’re spending $300k on it. Or in a slightly more ideal world, you wouldn't architect something so inefficient in the first place.

But it's common for engineers to blow insane amounts of money unnecessarily on inefficient solutions for "reasons". Sort of reminds me of saas's offering 100 concurrent "serverless" WS connections for like $50 / month - some devs buy into this nonsense.

cjonas 10 hours ago
The docs indicate there are already 2 other go implementations. Why not just use one of those? https://docs.jsonata.org/overview.html
aniceperson 10 hours ago
Because 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 6 hours ago
Because otherwise they wouldn't have written this meaningless article and contributed to the AI hype.
zer00eyz 4 hours ago
And to market their AI security product.
leonidasv 4 hours ago
Those 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.
vova_hn2 5 hours ago
Last commits in those repos are 5 and 7 years ago.
heavyset_go 5 hours ago
If 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.

hrmtst93837 3 hours ago
Rewrites happen because nobody wants to debug someone else's half-finished mess, and "just use X" often means inheriting its quirks and gaps.
grey-area 1 hour ago
Now they have 13k lines of someone else’s mess (the AIs) to manage instead.
pravetz259 10 hours ago
Congrats! 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?

VladVladikoff 9 hours ago
This 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.
gloosx 34 minutes ago
If the first commit was two weeks ago, how did it ended up saving 500k a year already? Did they mean expected to save?
varjag 28 minutes ago
You'll never get an impressive resume with an attitude like that.
monegator 28 minutes ago
they probably got paid 500k for sponsored content
bawolff 10 hours ago
I'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).

kjuulh 10 hours ago
Not 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.

schumpeter 10 hours ago
If I had to guess… The same thing happening to a lot of the industry… the era of cheap money is over.
captn3m0 10 hours ago
For context, JSONata's reference implementation is 5.5k lines of javascript.
chrismorgan 33 minutes ago
And 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.

therealdrag0 6 hours ago
So it doubled LOC
vova_hn2 5 hours ago
Go is very verbose.
pepa65 4 hours ago
Golang is a bit more basic and explicit.
camgunz 1 hour ago
Wait could I have written a JSONata parser and sold it to reco.ai for $499k/yr?
cosmotic 10 hours ago
Next maybe they will use a binary format instead of JSON.
jujube3 10 hours ago
Stop reading ahead.
NetOpWibby 2 hours ago
With 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.

cromka 9 hours ago
If 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 4 hours ago
On 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.

amazingamazing 10 hours ago
how 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 10 hours ago
ASN.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 9 hours ago
JSON 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.
crazygringo 10 hours 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.

faangguyindia 6 minutes ago
Imagine how many tests were frauded and fake passed by claude on this project
jng 9 hours ago
I'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.

__0x01 5 hours 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 2 hours ago
AI will happily update tests to be wrong or miss the intention of the code and test the wrong things.
lwansbrough 6 hours ago
Huh, 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.

err4nt 4 hours ago
The moment the amount of savings surpassed the annual salary of a good programmer you know you made the wrong investment.
fock 5 hours ago
nbevans 55 minutes ago
The 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.

adityaathalye 2 hours ago
If "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".
politelemon 3 hours ago
> No longer just vibe coding

It is, by definition.

bitbasher 6 hours ago
Why not use FFI from Go to something in C/C++ that is faster than Go's JSON stuff?
ipsum2 10 hours ago
Everyone 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 10 hours ago
The $300K/year figure is surprising because it was for something that didn't need to exist (RPC calls).
nirb89 2 hours ago
Hey 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.

pu_pe 2 hours ago
I appreciated the writeup and your clarification.

I wonder whether this was your first attempt to solve this issue with LLMs, and this was the time you finally felt they were good enough for the job. Did you try doing this switch earlier on, for example last year when Claude Code was released?

nirb89 32 minutes ago
Honestly, I was very adverse to agentic code up until Opus came out. The hallucinations and false confidence it had in objectively wrong answers just broke more things than it fixed.

However after it came out it suddenly behaved closely to what they marketed it as being. So it was my first real end-to-end project relying on AI at the front seat. Though design wise it is nowhere near perfect, I was holding it's hand the entire way throughout.

zellyn 10 hours ago
If you can incorporate Quamina or similar logic in there, you might be able to save even more… worth looking into, at least
comrade1234 9 hours ago
So they used an ai trained on the original source code to "rewrite" the original source code.
badc0ffee 6 hours ago
It was trained on the two existing open source Go implementations of JSONata.
techpression 2 hours ago
As 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.

mickael-kerjean 10 hours ago
A 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

para_parolu 9 hours ago
What 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 9 hours 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.

teaearlgraycold 5 hours ago
Anyone 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.
1 hour ago
hooverd 10 hours ago
Darn, I'd wished they improved one of the existing Go or Rust implementations.
neya 5 hours ago
AI company selling AI products claims to have solved a problem using AI when it could've solved it with better code and engineering foundations
10 hours ago
themafia 4 hours 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.

whalesalad 10 hours 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 10 hours ago
Your most autistic and senior engineer is now named Claude. Point him at nearly any task, pair-program with codex, and review the results.
mads_quist 4 hours ago
I mean, great, but which CTO gave greenlight to such a weird architectural choice. Sorry for the rant!
TZubiri 10 hours ago
As 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?

jkercher 5 hours ago
I too have used a similar strategy of packing variables together. I even came up with a name for it. I called it a "building."
g947o 6 hours ago
Like 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.

leonidasv 4 hours ago
Congrats 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.

jgalt212 9 hours ago
These "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 6 hours ago
Well 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
sublinear 10 hours ago
These 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?

pugchat 1 hour ago
[dead]
panelpowder 21 minutes ago
[dead]
sudeepsd__ 1 hour ago
[dead]
felixagentai 9 hours ago
[flagged]
edinetdb 8 hours ago
[dead]
elicohen1000 2 hours ago
[dead]
10 hours ago