And then you realize that what you’re using the smaller models for is ALSO decomposable and part of it is just a few if statements, and then you realize that for this feature you don’t actually need or want a model because the performance, reliability, reproducibility are cheaper and better for you and your users.
Additionally, developers tend to become less expensive as venture capitalists turn off the spigot, while access to giant frontier models becomes way more expensive. Beyond that, a developer might go out and have a beer with you after work, which appeals to the sickos that have the gall to prioritize humanity over fanatical efficiency for corporate gains.
From a practical standpoint, isn't it usually the case that there are retention periods for traces given how numerous they can be?
I bring this up because this article starts with "I asked Claude", but it doesn't explore the the length of time you're generating IDs over at all, which is an important aspect to consider when selecting size.
Yes. The original Dapper used 64 bit trace ids and collisions were rarely a problem.
If you don't drop any spans from a trace, you can completely disambiguate a collision since the trace will have two distinct root spans. If you are missing spans, you might have a break in the parent-child links.
Even with infinite retention, your analysis will bucket by time somehow, so a collision might have no effect if the collision doesn't happen at a proximate time. If you are manually looking at traces, it will be very obvious there is a collision unless they happen at the same time.
Also, birthday paradox only expresses probability that there is a collision somewhere, but if you are filtering or looking at single spans, then the probabiliy that you actually see a collision is greatly reduced.
I think for basically all systems, an additional 64-bits has insignificant additional cost, so you may as well prevent collisions, but I think it could be a reasonable tradeoff if it mattered.
> If you can go from producing 200 lines of code a day to 2,000 lines of code a day, what else breaks? The entire software development lifecycle was, it turns out, designed around the idea that it takes a day to produce a few hundred lines of code. And now it doesn’t.
It is so embarrassing that LOC is being used as a metric for engineering output.
LOC is useful here not because it's a metric for output but because it's a metric for _understandability_. Reviewing 200 lines is a very different workload than reviewing 2000.
I have worked with code where 1000s of lines are very straightforward and linear.
I’ve worked on code where 100 lines is crucial and very domain specific. It can be exceptionally clean and well-commented and it still takes days to unpack.
The skills and effort required to review and understand those situations are quite different.
One is like distance driving a boring highway in the Midwest: don’t get drowsy, avoid veering into the indistinguishable corn fields, and you’ll get there. The other is like navigating a narrow mountain road in a thunderstorm: you’re 100% engaged and you might still tumble or get hit by lightning.
The number of bugs tends to be linear to lines of code written meaning fewer lines of code for the same functionality will have fewer bugs.
So I’m pretty skeptical that reviewing 2000 lines of code won’t take any more time than reviewing 200 lines of code.
Furthermore how do you know the AI generated lines are the open highway lines of code and not the mountain road ones? There might be hallucinations that pattern match as perfectly reasonable with a hard to spot flaw.
> The number of bugs tends to be linear to lines of code written meaning fewer lines of code for the same functionality will have fewer bugs.
It depends on the code. If you’re comparing code of the same complexity then, sure, 2000 lines will take longer than 200.
I was comparing straight linear code to far more complex code. The bug/line rate will be different and the time to review per line will be different.
> Furthermore how do you know the AI generated lines are the open highway lines of code and not the mountain road ones?
Again, it depends on the code. Which was my point.
Linear code lacks branches, loops, indirection, and recursion. That kind of code is easy to reason about and easy to review. The assumptions are inherently local. You still have to be alert and aware to avoid driving into the cornfields.
It’s a different beast than something like a doubly-nested state machine with callbacks, though. There you have to be alert and aware, and it’s inherently much harder to review per line of code.
That's assuming the 200 lines are logical and consistent. Many of my most frustrating LLM bugs are caused by things that look right and are even supported by lengthy comments explaining their (incorrect) reasoning.
But it is orthogonal to the question of evaluating 2000 lines of AI code vs 200 lines of human written code. Either the human or the AI could produce idiomatic code for either language, given sufficient training data in the AI’s corpus for the language.
My guess is that the first one is much quicker to review, for a human equally fluent in both languages.
The point is that LOC is never a good metric for any aspect of determining the quality of code or the coder because it ignores the nuance of reality. It's impossible to generalize because the code can be either deceptively dense or unnecessarily bloated. The only thing that actually matters is whether the business objective is achieved without any unintended side effects.
> The only thing that actually matters is whether the business objective is achieved without any unintended side effects.
Objectives change; timeliness matters. The speed at which you deliver value is incredibly important, which is why it matters to measure your process. Deceptively dense is what I’d call software engineers who can’t accept that the process is actually generalizable to a degree and that lines of code are one of the few tangible things that can be used as a metric. Can you deliver value without lines of code?
> Objectives change; timeliness matters. The speed at which you deliver value is incredibly important, which is why it matters to measure your process.
This assumes that shorter code is faster to write. To quote Blaise Pascal, "I would have written a shorter letter, but I did not have the time."
> Can you deliver value without lines of code?
No, but you can also depreciate value when you stuff a codebase full of bloated, bug-ridden code that no man or machine can hope to understand.
You seem determined to misinterpret. I’m not talking about LOC as a measure of productivity. The ratio of LOC needing review to the capacity of reviewers (using how many LOC can be read/reviewed over the sampling period) is what’s being discussed. Agentic AI/vibe coding has caused that ratio to increase and shows a bottleneck in the SDLC. It’s a proxy metric, get over yourself.
“All models are wrong, some are useful”. What’s not useful is constantly bitching about how there’s no way to measure your work outside of the binary “is it done” every time process efficiency is brought up.
Yes, reading this back, I definitely veered off-topic. I apologize. I still don't think that you can say how much time it will take to review code based on how many lines of code are involved, but my argument was not well crafted. I just hope that others can learn something from our discussion. Thank you for being patient with me, and I hope you have a good day! :)
LoC is perfectly fine as a metric for engineering output. It is terrible as a standalone measure of engineering productivity, and the problems occur when one tries to use it as such.
It's still useful, however, because that is the only metric that is instantly intuitively understandable and comparable across a wide variety of contexts, i.e. across companies and teams and languages and applications.
As we know, within the same team working on the same product, a 1000 LoC diff could take less time than a 1 line bug fix that took days to debug. Hence we really cannot compare PRs or product features or story points across contexts. If the industry could come up with a standard measure of developer productivity, you'd bet everyone would use it, but it's unfeasible basically for this very reason.
So, when such comparisons are made (and in this case it was clearly a colloquial usage), it helps to assume the context remains the same. Like, a team A working on product P at company C using tech stack T with specific software quality processes Q produced N1 lines of code yesterday, but today with AI they're producing N2 lines of code. Over time the delta between N1 and N2 approximates the actual impact.
(As an aside, this is also what most of the rigorous studies in AI-assisted developer productivity have done: measure PRs across the same cohorts over time with and without AI, like an A/B test.)
I experimented with vibe coding (not looking at the code myself) and it produced around 10k LOC even after refactors etc.
I rewrote the same program using my own brain and just using ChatGPT as google and autocomplete (my normal workflow), I produced the same thing in 1500 LOC.
The effort difference was not that significant either tbh although my hand coded approach probably benefited from designing the vibe coded one so I had already though of what I wanted to build.
Sounds like a great oppurtunity to understand your own development process, and codify it in such detail that the agent can replicate how you work and end up with less code but doing the same.
My experience was the same as you when I started using agents for development about a year ago. Every time I noticed it did something less-than-optimal or just "not up to my standards", I'd hash out exactly what those things meant for me, added it to my reusable AGENTS.md and the code the agent outputs today is fairly close to what I "naturally" write.
I deleted 75000 lines of code of my codebase in the last 2 months and that was tremendously more useful to by business than the 75000 AI has written the 2 months before...
Is it? The whole point of the article is that the rate of output for writing code has surpassed the rate at which it can be reviewed by humans. LOC as an input for software review makes a lot of sense, since you literally need to read each line.
I read somewhere that measuring software engineering output by LoC is like measuring aerospace engineering by pounds added to the plane and I thought that was an apt comparison.
Because not everyone is just out after earning the most money, some people also want to enjoy the workplace where they work. Personally, what the quality of the codebase and infrastructure is in matters a lot for how much you enjoy working in it, and I'd much rather work in a codebase I enjoy and earn half, than a codebase made by just jerking out as many LOC as possible and earn double.
Although this requires you to take pride in your profession and what you do.
All of human agency must prop up the vanity of you. Of all people.
Got it.
...ok fine; lack of political action to put us all on the hook for your healthcare is your choice to take a gamble on a paycheck. It's a choice to say your own existence is not owed the assurance of healthcare.
So I will honor your choice and not care you exist.
The charitable interpretation here is obviously that the LoCs are equivalent in quality, in which case it is a very useful metric in the context that was presented. The inability to infer that should be embarrassing.
I just read somewhere on HN that "code is a liability, not an asset, the idea behind the code/final product is the actual asset." And, I can't agree more...
> It is so embarrassing that LOC is being used as a metric for engineering output.
In one of my previous org, LOC added in the previous year was a metric used to find out a good engineer v/s a PIP (bad) engineer. Also, LOC removed was treated as a negative metric for the same. I hope they've changed this methodology for LLM code-spitting era...
Do you reject all stats that treat the number of people involved (eg. 2 million pepole protested X) as "embarrassing" ... because they lump incredibly varied people together and pretend they're equal?
This was a podcast, not a pre-scripted talk. I suggest listening to the audio version - it makes it more clear that this was thinking out loud, not carefully considering every word.
I see, fair point. Sorry for taking a dig at you. Please know that I do appreciate a lot of work that you do. I was just worried for a moment when just reading that bit.
Having worked with LLMs, you absolutely can golf most (>50%) lines of code out of existence. I regularly do, because it picks the wrong abstractions and sticks with them.
This is wishful thinking. The force of the market is "number go up". Quality increasingly has less and less of a role in the equation. You will eat your slop, and you will like it. It will be the only choice you have.
But the quality of code was already very bad due to market forces. Most code at large companies is notoriously poor despite the talent density, because the incentives are not there to tackle tech debt or improve code quality.
With such a low baseline, there is an optimistic perspective that LLMs could improve the situation. LLMs can produce excellent code when prompted or reviewed well. Unlike human employees, the model does not worry about getting a 'partially meets expectations' rating or avoid the drudgery of cleaning up other people's code.
The model is optimized in a different way to "partially meet expectations". Sycophancy coupled with only really "knowing" what it has been trained on assure a different kind of mediocrity.
The same incentives that discourage good code in pre-AI times are still dominating now. You will be pushed to ship sub-par products in the future, just like you were in the past.
AI certainly has the potential to make the underlying code/design a lot cleaner. We will also be working with dramatically more code, at a much higher rate of change. That alone will be a big challenge to keep sustainable.
The ones making the decision to under-invest on design are either are unaware of the real costs, or are aware and are deliberately choosing that path - that's not new, and I don't expect it to change.
The only thing that has changed is that there used to be a loose correlation between capability to effect change and inherent desire for quality. This correlation barely exists anymore, so the counter-cultural acts that happened to manifest quality inside our perverse systems will occur much more rarely now.
I agree generally but there are periods where creative people show up and a whole slew of existing firms go bust/shrink due to one’s ability to envision a path toward creative destruction.
The people I know like this are people I consider to be "advanced juniors". They are held back by their inability to work with other parts of the business and understand customer needs. In order to be successful they need to be spoon fed requirements. What I've seen from the limited sample in my orbit is that they've actually doubled down on AI and are creating little private worlds of agents and further isolating themselves from the business, not talking about how great collaboration and such are.
My first website was for my guild on Chesapeake, and I hacked together scripts for macroing various skills as my first "actual programming" project. It is also what led me to join IRC for the first time, which then later led me to freenode.
Fun story about that: In Ruby 2.x, the version GitHub originally launched with, every object implemented the method `id`, which returned the object id (in 3.x, it was renamed to `object_id`). Every object had this id, ActiveRecord models, strings, floats, integers, booleans, etc. Some objects had fixed object ids, like `true.object_id #=> 20`, `false.object_id #=> 0`, `123.object_id #=> 247 (2n+1)`. The `object_id` for `nil` is `4`.
Yehuda Katz was the first external user of GitHub after the cofounders, so his github user id is `4`.
The way Rails works, if you want to look up a user record, you do it by id:
author = comment.author
user = User.find(author.id)
Now, if there was some bug, and for some reason a comment had no author, `comment.author` would return `nil`, `nil.id` would return `4`, and the UI would show Yehuda as the author in the UI. People would ask, "Who is this Yehuda guy, and why is he commenting on my PRs?"
TBH I'm not super invested in github. I pay for it (smallest plan) and use it as a repository and for forking other projects occasionally, and for hosting some small-time static sites. I've never really needed any of it's other features. Every time I go to github.com there's more and more cruft though, which to me means that I'm not their target customer and they will inevitably either alienate me or jack up their prices. Happens every time there's an acquisition so I'm kind of used to it now.
Github has remained surprisingly useful for quite a while post M$ purchase, but I'm old enough to know that everything M$ touches eventually goes to crap. It's like a law.
I remember using CVS and Subversion though, with very limited hosted options, and I thought Github was the bees knees at the time.
In fact now I think about it my claim to fame used to be that Github used one of my Rails plugins. I had written a really simple versioning system (Rails 2 I think) that I used for my blog and they used it, IIRC, for versioning wiki pages.
When I was working at Microsoft I got transferred over to GitHub for awhile and someone there noticed my ID and made a big deal out of me having a 4-digit ID. :)
Thanks for sharing that link. My GitHub ID is 484.
I had no idea that I joined so early. It says I joined in 20/2/2008. I guess I was following some of the founders' work in Rails when GitHub was announced and must have signed up shortly after it got started.
I'm 17722 and also felt late. I was a holdout on Subversion and was resistant to Git in general since SVN still worked fine and had good tooling, but eventually some client work moved to Git and thus eventually Github.
Hah! I was too. I was at a bar with Chris trying to convince him to base the company off of hg instead of git but they already had the domain name and had already started building it.
Genuinely surprised to be just over 10k too! Felt late!
No idea how my two character handle made it through… Probably the wrong thread to ask anyone at GH to allow me to block notifications anytime anyone mentions "@ts" but I've come to accept it at this point, lol.
For comparison, I'm 208,820 and we're in the same year: I got that number 2010-02-23. So GitHub more than doubled user count that year, impressive for a "late to the party" growth.
I had just tried asking Gemini to help me get there, and it kept telling me to read line 2 of github.com, as if they were serving JSON on their homepage. :facepalm:
I sort of can't tell if this is supposed to be a joke or not. It seems like you're explaining that in addition to not supporting the project from which your company spawned 50M, they also supplied free work for which they were never compensated. That's supposed to be better or something?
There's an interview that got scrubbed from the internet with Zach on the 20VC podcast with Harry Stebbings. This comment and its lack of self-awareness exemplify what was on display for 60 minutes.
Zach is undoubtedly smart but for anyone who is not an SV insider, they would listen to that podcast they same way you are looking at this comment and wonder if it's all one big joke.
The charitable read is that the original project team willingly worked with Warp, knowing the direction they were going. I don't know any background on the drama FWIW.
that's the correct read - we shared what we were building and they helped us integrate alacritty. it's similar to how mitchell h reached out and asked today if we wanted to integrate ghostty.
we have a lot of open source library dependencies and are grateful to the folks who worked on them
I thought the negative sentiment being shared here was hyperbolic, but you look absolutely ridiculous in these comments.
"Actually, we are sure people who were critical to our success are happy they received nothing in return for their labor." <- This is you. This is what you sound like.
> "Actually, we are sure people who were critical to our success are happy they received nothing in return for their labor." <- This is you. This is what you sound like.
Have you ever contributed to open source?
Not everyone is doing it out of the expectation of a paycheck. For all the open source code I've worked on, my goal has unironically been for those using it to achieve whatever positive end they were trying to use my software for, and that's it.
The one time I did go further and agree to do some one-off changes for money it actually caused me a hassle that year as I had to account for it under the right tax treatment, I was nearly outside the "hobby" exception you can get.
You're in the minority.
Just about every open source project that I use has a "Donate/Contribute" link somewhere on their website/Github, and I see articles constantly about projects being shut down or archived because the developer couldn't afford the time investment anymore due to lack of income. I keep a list of open source software I use so I can donate every couple of years to pay them for their work, and I've run into maybe 2-5 projects out of the dozens of donations I've done over the years that either don't have a donate option or just tell you to donate to a charity instead (eg. Unlock Origin)
> You're in the minority. Just about every open source project that I use has a "Donate/Contribute" link somewhere on their website/Github
I just checked and I didn't see a Donate/Contribute link for Alacritty.
Is there something I'm missing? Or do we have an entire thread full of people bashing on Warp for doing something Alacritty themselves do not wish to solicit?
As you point out yourself, it's not hard to throw up a Donate link if you're that kind of open source developer.
I think a conversation about the ethics and morals of forked software hitting it big, and how/how much they should give back to their upstream, is a good one to have, if the tone wasn't so personal and aggressive.
I have no skin in the game for either side of this, but I looked pretty hard at his comment history and couldn't find anything even remotely sounding like that. All he does is express gratitude for the projects they collaborated with. Alacritty folks themselves are saying as much here.
There's some undercurrent of something that seems to be driving a lot of the rage in the comments here. Anti-AI/OpenAI/"VC money"/"the rich"?
So if I use vim or emacs for free, or VS Code for that matter, I have to hunt down the maintainers and pay them? Do I need to empty my wallet for every project I use for free? Because that's not sustainable for normal people, let alone businesses.
If you use them for free to spawn a 50M business, yeah, give back a little. Nobody's saying every user should open their wallet, let alone "empty" it as you hyperbolate.
I don't have particularly strong preference for copyleft (I use the Apache license for my personal projects), but these don't seem like particularly compelling arguments.
> So if I use vim or emacs for free, or VS Code for that matter
Vim and emacs both use licenses that require you to share any source code modifications if you distribute binaries that you change, so that's kind of a strange comparison. You literally couldn't do the things that Warp did with Alacritty. As for VS Code, it seems pretty disingenuous to compare a single solo developer to a multi-trillion dollar company.
> I have to hunt down the maintainers and pay them?
I don't understand why you think it would be hard to "hunt down" someone when an email is literally in every commit in the git history of open source software.
> Do I need to empty my wallet for every project I use for free? Because that's not sustainable for normal people
Most "normal people" do not have access to $50 million of VC money
> let alone businesses
Paying the developer of the one piece of software that they forked for the entire basis of their business $100,000 of the VC money would not meaningfully have hurt their ability to succeed. They could have just as easily reached the same level of success they have now with $49.9 million.
> I don't understand why you think it would be hard to "hunt down" someone when an email is literally in every commit in the git history of open source software.
I use Arch Linux, tell me which of the thousands of packages am I obligated to donate to? Im not exactly a money fountain to be giving money away to strangers I am grateful for, but it I put something on the internet as open source, for free, I dont cry if nobody reaches out to give me money. Honestly, I rather just be informed that my project is being used to make someone a profitable business, thats good enough for me personally. If I thought different, I wouldnt open source said projects.
> I use Arch Linux, tell me which of the thousands of packages am I obligated to donate to? Im not exactly a money fountain to be giving money away to strangers I am grateful for, but it I put something on the internet as open source, for free, I dont cry if nobody reaches out to give me money.
If you read past that part of the comment to pick out the one thing you had a rebuttal for out of context, you might have noticed the parts about having $50 million dollars of VC money.
> Honestly, I rather just be informed that my project is being used to make someone a profitable business, thats good enough for me personally. If I thought different, I wouldnt open source said projects.
That's a totally valid take. It's also totally valid to think that a company that takes all that money to release a product that doesn't offer that much more than the original is a waste of resources that could be at least somewhat useful by giving 1/500th of it to the person who did almost all of the work they took.
If you're actually asking the question, I'll give you my answer: I was lucky enough to go to a nice spa resort earlier this year, I just handed a few bills to an attendant who had laid out a towel for me when an older man sitting next to me chuckled and shook his head saying "You don't actually have to give them them anything, they have to do it anyway." Super nice resort, nobody here hurting for a few dollars in tips.
I guess it's valid to take everything you legally can, but personally, I'm saying it's fucked up move not to pay even a token amount. That's their only consequence, (some) people thinking it's a fucked up move.
People are upset they raised 50 million, how many employees? How long does that keep their lights on? Maybe if they were raking in hundreds of millions I would be inclined to be outraged but if I make a startup tomorrow I cant just donate my VC bucks to every open source project I like until I have some real income coming in or my investors will want my head.
You once again drag things in a wildly hyperbolic direction. Nobody's talking about throwing money around wildly at unrelated projects. When there is a single project that sits at your very heart, without which your entire startup is a nonstarter, yes, donate.
Not saying its not, I guess the core of my argument is that people are outraged that these guys raised 50 million… how much of that is going to employees and infrastructure? Is the owner sitting on 50 million in his personal bank account? Because the outrage feels very premature, not to mention they just open sourced the project when they really did not need to under any obligation. Far as I can tell they also did a lot of custom work on top of Alacritty, so its not 100% Alacritty.
I mean, if they have a working relationship with each other then I guess the alacritty folks don't hate their guts. That's meaningful from my perspective.
Also remember that the $50m is not revenue that they can use however they want. They have an obligation to their investors to make money with it.
> They have an obligation to their investors to make money with it.
It's bit more nuanced. The company management have fiducial responsibilities to the investors but also have responsibility to the company itself and its employees. E.g. Milton Friedman's shared-holder primacy is a crap philosophy and one of the most damaging ones to actual healthy free market economies. For example, in corporate bankruptcy in the US workers get paid before shareholders.
The courts have also tended to favor the company management as long as they're acting reasonably, so I've read. IANAL, but it shouldn't be too hard to say hey this support contract for a core piece of software reduces risk for us by X, Y or helps get Z feature.
Big same. I have been doing a lot of clojure development, and hooking up my app to a live REPL has given me an absolutely fantastic feedback loop for the LLM. I don't think a lot of people understand what they're missing.
> I don't think a lot of people understand what they're missing
Very true. There's an enormous tacit knowledge gap. Check this out:
I have to use Mac for work. My WM is Yabai, which is controlled via Hammerspoon (great tool on its own), which means I can use Fennel, which means I can have a Lisp REPL. MCP connected to that REPL can query and inspect every single window I have on my screen. It can move them around, it can resize them, it can extract some properties of them. It's figuring out stuff like: "pick a selected Slack thread from the app and send it into an Emacs buffer", or "make my app windows work like Emacs buffers" - pick from the list and swap it in place. Or "find the HN thread about retiring from Emacs among my browser tabs and summarize the content"...
Never in my life have I been more grateful to my younger self for grokking the philosophy of Lisp. Recent months have only reinforced my firm belief that this 70-year-old tech is truly everlasting. Thank you, John McCarthy, for the great gift to humanity, even though so weirdly underappreciated.
Ah, that's on Mac, but I forgot to tell you about the Linux. On Linux, I ran my modal-keyboard-toolkit controlled through babashka (clojure) with an exposed nREPL endpoint. That means I can query and control windows - their placement, change brightness and color temp. - all interactively, directly from my editor. I can write some conditional event loop, e.g., time-based color temp changes. Because I have a Lisp REPL - I can test out all the colors, squeezing the entire day into a minute - simulate, eval and preview the results - no saving, no reloading, no recompilation. Once satisfied - I can put the time markers accordingly - so colors change depending on the time of day.
This is very interesting! I've played around with Hammerspoon for a bit but nowhere near this level. Do you have a link to your config or could you give me a bit more detail on your setup?
reply