Software is made between commits
Posted by jeremy_k 5 days ago
Comments
Comment by Lindby 5 days ago
I agree with the author that reviewing pull requests is too late. The problem with pull request is that they make it hard to review individual commits since they are geared towards reviewing the result of an entire branch at once. But the answer is not to share all the noise, it should be to encourage small atomic commits so you can review the early work before the entire feature/fix is complete.
Comment by isityettime 5 days ago
Isn't that just a GitHub problem, as opposed to Phabricator, Gerrit, etc.?
Comment by danpalmer 5 days ago
I think what's missed is two things:
- In the Phabricator/Gerrit model you typically end up with changes that are smaller than a PR, but bigger than a commit.
- You lose some history, or track it in a different way. With a PR you might add code to address comments in a new commit on the end, but with Phabricator/Gerrit you don't. If you already aggressively rebase in Git to absorb changes into commits that they make sense to go in, this won't be much of a change, and some systems give you views on the history happening within each change. But if you expect to see everything like that in the Git history, you may not get that, but the workflow changes around it and that's ok.
I think both types of review are in a local maxima, where you lose some things to move to the other type, and it was fear of losing those from my workflow that made me resist the change a bit. When you get there though, you realise it's just not a problem.
Comment by marliechiller 4 days ago
1) Those that use git like a crude autosave who then squash on merge
2) Those that prefer neatly wrapped, fully functional atomic commits
It seems those ideas are in direct opposition to one another with 1) being more common in my experience, perhaps as github naturally supports it better plus the fact that stacked commits can solve some of the problems 2) accounts for... but if I had a choice, 1) definitely makes more sense to me.
Comment by seabass 5 days ago
Comment by nightpool 5 days ago
Comment by jasonkester 5 days ago
Reading through the article, I'm reminded of my dismay reading this exact sentiment every time version control is discussed. So many people are so quick to throw away their history so that things look "tidy". It makes no sense, but somehow it fits a certain programmer-brain logic that is surprisingly common.
My style is to commit often. Like dozens of times per day. Commits are the record of what happened, and I want as much of that record to exist as possible. I've been saved so many times by a git bisect that landed pointing at a tiny commit to a single line that looks completely innocuous, yet broke something in a subtle way that only got discovered way later.
That's what source control is for, in my opinion. Finding stuff like that. So many of these things would have been really painful to find if I'd had to sift through every line of a big commit.
So to watch people intentionally balling up an entire PR's worth of commits and squashing them together to throw away the only (in my mind) thing that version control is good for, is truly baffling.
But yeah, there are plenty of people like the parent in that camp, so the author's plan to add even more granularity will be an uphill battle.
Comment by wvh 5 days ago
Comment by danadam 4 days ago
> So to watch people intentionally balling up an entire PR's worth of commits and squashing them together to throw away the only (in my mind) thing that version control is good for, is truly baffling.
> But yeah, there are plenty of people like the parent in that camp
I'm confused. The parent doesn't want big commits but rather, as they wrote twice, commits that are small, atomic and without noise. So presumably "fix typo" would be removed during rebase but "rename function" would stay and be separate from "implement logic".
Comment by jasonkester 4 days ago
That’s the commit I want to find six months later when the SVG text is blurry because we’re no longer forcing opacity to 1.0 at the end of a transition.
Comment by skydhash 5 days ago
I want my commits to reflect the evolution of the theory of the program, not a chronological log of my reflection and attempts. In my local branches I snapshot things that only matters to my working process. And before sharing, I make sure that the commits are atomic with a proper description.
When sending a report, do you also send all the post-it, the notebook with your notes, the books with the highlights , your conversation with your colleagues, your web history? I don’t think you do. My local history have commits that reflect my working process which can be messy. Before sharing I tidy them, so that the changes are easily understood.
> entire PR's worth of commits and squashing them together to throw away the only (in my mind) thing that version control is good for, is truly baffling
A PR is supposed to be atomic if you’re using squash and merge. Bundling different changes is the antipattern here, not the squash and merge.
Comment by foobarbecue 5 days ago
IMO squash 4 the win. Github squash defaults work well. Gitlab squash defaults don't.
Comment by avaq 3 days ago
Well. That's what a merge commit is.
Your approach is nearly identical to creating a merge commit, except the pointer to the second parent (the "original branch") is indirectly recorded via the PR link, instead of directly inside git.
If you create merge commits, then you have your "clean main branch" (via git log --first-parent), as well as the extended history with all the source commits (via git log). And as a bonus, merge commits are supported by every git host, and they work the same in all of them.
I think the whole "squash merge vs merge commit" discussions would be a lot less prevalent if --first-parent would be how git and git hosts displayed commit histories by default. :(
Comment by KajMagnus 4 days ago
Comment by isleyaardvark 4 days ago
I make a ton of backup copies. I rearrange the history to how I want before I share it (git history split is great). I keep my nonsense, others see a readable changeset. (Only downside is the occasional housecleaning of old branches, but after a while their usefulness diminishes.)
Comment by foobarbecue 4 days ago
Comment by palata 5 days ago
I find it sad to see it as a battle. Can't we agree on the idea that different people may have different preferences?
"Converting everyone to Linux or vim" would be an uphill battle... if it was worth fighting at all. I don't care what OS or text editor others use, as long as I can use the one that is best for me. If I am happy with commits, I don't want to fight with people who aren't... what would be the point?
Comment by vbezhenar 5 days ago
I did git bisect exactly zero times in my life.
Comment by thomasfromcdnjs 5 days ago
Not overly confident in my position, but I believe agents prefer the extra information albeit noise to some.
Comment by lmm 5 days ago
Comment by WorldMaker 5 days ago
The git backend already has a ton of "delta DB optimizations" (in git packs and other tools) and it's really just the git frontend that needs a little massaging (`--first-parent`, primarily) and the vast world of "subway-diagram-first/only" Git UIs that should have more "drill down" `--first-parent` counterparts simply because so many people find the subway diagrams ugly/confusing/distasteful.
Comment by tectec 4 days ago
Comment by WorldMaker 4 days ago
Comment by jchw 5 days ago
Yes.
> DeltaDB captures every operation in between [each commit]
No.
First of all, that feels intrusive. I would also prefer to not have a screen recorder that is running 24/7 while I work. Yes, I suppose there's nothing wrong with having my mistakes on display, but also, if I'm doing my job, all of the value I produce is captured by the commit, and it just feels significantly less intrusive that way.
Second of all, I use many different tools, and I don't really want to have to have all of them be integrated into some weird DB. What's the point of capturing everything if randomly it has to go "some external process did something"? Yes I do like that Zed can integrate so many things but that doesn't mean I will use everything integrated into Zed. Last I checked if you use Claude Code in Zed via ACP you can't even rewind and edit old messages.
Finally, personally, I think that we've already lost the plot with commits. It's clear to me that most people are just doing some arbitrary unbounded set of changes then running git commit, then the changeset is reviewed as one giant blob, and then those commits get squashed together. It isn't the end of the world, but having nice hand-crafted commits is amazing. If you've ever ran `git blame` on a project that enforces this, you will understand exactly what I am talking about. Doing stuff like DeltaDB is just going to re-enforce and solidify the practice of slopping together commits. Wonder what's going on? Now you can voyeuristically replay it and view the conversation the user had with LLMs...
And that last point is as interesting as it is frustrating. You couldn't convince someone to write documentation for their changes and the motivation behind those changes just because it's good engineering practice that helps your teammates, but everyone will happily explain it to an LLM. Sure that is in large part because it's needed for the LLM to do the work for them, but it is interesting how much work we will do to please the LLMs that we would not have done before. Suddenly a bunch of weird undocumented things are documented. In CLAUDE.md.
Comment by tomjakubowski 5 days ago
I don't want my thoughts to be serialized, version controlled and publicly accessible.
Comment by subygan 5 days ago
but feels like, I'm in the minority.
Comment by steveklabnik 5 days ago
Comment by subygan 5 days ago
Comment by steveklabnik 5 days ago
(I actually think it’s tremendously valuable for a number of reasons but it’s fine to simply disagree about that.)
Comment by soulbadguy 5 days ago
Comment by skydhash 5 days ago
That could be probably done by jj. But the git’s way is already fine for me.
Comment by steveklabnik 5 days ago
Comment by eddd-ddde 5 days ago
If you give me your commit ID I can immediately print it on my workspace without you having to upload a formal change request.
Comment by steveklabnik 5 days ago
Comment by kccqzy 5 days ago
Comment by soulbadguy 5 days ago
Comment by steveklabnik 5 days ago
Comment by hinkley 5 days ago
The worst actor would write a new module and check nothing in until it kinda worked. I think it went along with the fragile ego that had people sneaking around fixing bugs in his code without talking to him about it first. He wrote convoluted code that exhibited Kernighan's law and he was about 10 years too senior to still be doing that shit. He bragged about how 'powerful' his code was as if that was a compliment instead of a harbinger. Many times I found bugs in code from the initial commit. Just... give me something man. Anything. Fuck.
Just because you tried random shit until you found the problem doesn't mean you have to fess up to it. You can tell any story you want that gets us from point A to point B now that you know point B is attainable. You can rearrange the commits the way you would have written it if you knew exactly what needed to be done. Drop 90% of the code you wrote and immediately deleted again, anything that doesn't support that narrative.
In law enforcement you have something called Parallel Construction. You can know a suspect is guilty by knowing facts that are not admissible in court. So you need to rediscover those same facts by the book. Grab his trash on trash day. Interview neighbors. Get enough circumstantial evidence to get a search warrant, then go find that evidence again.
Comment by crimsonnoodle58 5 days ago
Main then has a nice single commit with a reference to the branch it came from if you wish to see how it developed. Why would we want to litter main with your 100 commits? You own your code, and if you wish to dig into why you did something in a commit, go look in your branch history.
Comment by hinkley 5 days ago
Yeah sorry that's a toy project. You have 50 people push commits for six years and see if those branches don't 'accidentally' get deleted. We need a different VCS tool to get what you're after there.
Comment by jason_oster 5 days ago
The main branch remains compact with a linear history without the commit noise. Deleted branches can be restored, commits that otherwise do not exist in the history can be interacted with, and so on.
Comment by sn0wleppard 5 days ago
Comment by sheept 5 days ago
But I agree on not rebasing PRs. Another benefit to avoiding force merges is that it's easier for reviewers to compare changes since their last review.
Comment by giraffe_lady 5 days ago
Comment by bonzini 5 days ago
Comment by hinkley 5 days ago
Comment by jimbokun 5 days ago
Comment by giraffe_lady 5 days ago
Comment by skydhash 5 days ago
Comment by sharts 5 days ago
Comment by hinkley 5 days ago
But if you add a function in commit 2, then realize three hours later than you just need to call another function, I don't need to see the function arrive, get used, half the tests written, the whole thing be deleted, and then a couple commits that do it the easy way and only needs 3 tests added.
That fakeout will be in the code tree forever and each new dev who is trying to grok the code will see that the line of whitespace on line 35 came along with a function that doesn't exist anymore and only really ever did on David's machine.
Comment by bmitc 5 days ago
This forces people to work in a very linear fashion that doesn't match how people actually work.
A 400 line commit from a squashed PR should be very manageable when tracing a bug in the main branch, especially if the PR has a good description and review. Having a bunch of "fixed, added, deleted" commits all pushed into main seems like a disaster of noise unless you now force everyone to bundle perfectly reversable actions in every commit.
Comment by Joker_vD 5 days ago
unless you skip non-merge commits when reading the history of main. And personally, I don't remember needing to read main's history more often than probably once a year, and even then mostly out of curiosity.
Also: having a bunch of "ticket resolved" commits all pushed into main seems like a disaster of noise, compared to simple "release 203", "release 204", etc. series of commits that comprise the main. Squash even further! Just as you don't need to track every small development change inside a feature request, you don't need to track every small feature or fix inside a full release. Right? You write a changelog (if you even write them) using those 400 merge-commits, then squash it into a one commit for you release, bang, clean history.
Comment by hinkley 5 days ago
You're probably delegating that work to someone like me who actually figures out what the systemic problem is that caused the same class of bug to make it to production 5 times in the last 3 years. If you're a lead or a principal and still saying this ^ then you need to expand your skillset.
Bad luck doesn't happen very often. Mostly it's blindspots.
I will confess though that the sort of forensics I do is probably not divisable from the fact that I'm also the designated VCS surgeon on every project I've been on since 1998.
Comment by hinkley 5 days ago
I'm saying get rid of those before you invite people to look at the code. Keep the 'code review changes' one because that's comedy gold when the PR changes forced on you by some snowflake actually cause a production outage at 2:00 am.
Comment by bmitc 5 days ago
Comment by hinkley 5 days ago
We notice, we just reduce your trust level instead of confronting you. I can think of a lot of things that get bitched about over lunches or coffee much more often, but you're still being complained about.
Comment by jeremyjh 5 days ago
Comment by jcgrillo 5 days ago
> DeltaDB breaks your work into a stream of fine-grained deltas. Where Git captures a snapshot at each commit, DeltaDB captures every operation in between and gives each one a stable identity.
I was curious about giving Zed a try, now that it has an emacs keymap. Not anymore. This is such a horribly invasive feature, I absolutely do not want my colleagues reviewing every single intermediate edit, down to the keystroke, that went into the commits I publish for review.
Before I put a PR up for review, I'll sometimes edit my commit history a little bit in magit to make it more linear and digestible--maybe update descriptions, squash some adjacent commits together, etc. This just throws that whole aspect of the job out the window and says "hey, colleague, hoover up this firehose of deltas and enjoy it".
And what the hell does this even mean?
> What we're really after is simple: the conversation with the agent becomes the only conversation you need to have.
Lmao. No. Wrong.
Comment by fridder 5 days ago
Comment by slackpad 5 days ago
Comment by jcgrillo 5 days ago
Producing code edits itself is such a small fraction of the job I'm really not convinced these are valuable data. Mostly the effort and time goes into reading and understanding code, not producing or transforming it.
Comment by selicos 5 days ago
Comment by lwyrup 5 days ago
But I am skeptical because just create a text file and put a reference to the commit.
Also, why not just use Fossil? It already lets you bundle whatever in there since it’s an SQLite database. It has all kinds of things built in that can reference commits.
Comment by fridder 5 days ago
Comment by sdesol 5 days ago
https://github.com/gitsense/gsc-cli/blob/main/internal/cli/r...
you can see that every file has a code block header with a UUID and the AI that was attributed to it. With the UUID, I can tell exactly how the code came about.
What they are working on will be more useful for AI code provenance. It is only a matter of time before you are expected to show your chats with AI as part of the code review and for performance reviews.
So I don't see human collaboration being the main use case. I see tracking, studying and improving the Human-AI relationship...and seeing if somebody should be promoted or not.
An interesting take I've heard is, we will have a token/impact stat where if you spent a shitload of tokens to produce the same impact as somebody else who spent a lot less, you will be the prime candidate for layoffs and/or less pay. This is why I think AI code provenance will become a serious thing in the future.
Comment by selicos 5 days ago
A vendor conference I was at a few weeks ago focused heavily on this, for most of their Agentic workflow items. How can you show the AIs work, prove what it did was within guidelines, then audit the process and result.
Like, if your system has an AI backed federated search for documents and you ask it a question about those documents, you need an audit trail of the ask, what documents were referenced, and what was returned to the user.
Then if wrong information was supplied that can be pinned down and explained in case of lawsuit or other need.
Comment by jorl17 5 days ago
Seems like you copied the ellipsified version, so what we get is https://github.com/gitsense/gsc-cli/blob/main/internal/cli/r
Comment by sdesol 5 days ago
Comment by bmitc 5 days ago
Comment by 0xb0565e486 5 days ago
Comment by NewJazz 5 days ago
Comment by pdimitar 5 days ago
Unless of course you also have to explain your thinking and problem-solving process in meetings, which happens quite a lot the more senior you get.
Comment by xboxnolifes 5 days ago
Comment by aakresearch 5 days ago
Comment by bauldursdev 5 days ago
Comment by malyk 5 days ago
Comment by NewJazz 5 days ago
Comment by oriolid 5 days ago
Comment by muadddib 5 days ago
Comment by sieabahlpark 5 days ago
Comment by gmueckl 5 days ago
Comment by MaulingMonkey 5 days ago
I don't want the unkind rant about a coworker's design as I attempt to figure out what they were smoking when they made the thing I'm trying to use, needlessly offending them. For starters, once it clicks, it might all make sense, and have turned out to be my mistake. For another, even if a rant is warranted, a pass for "tact", or at least limiting the blame to the blame that is warranted, is proper.
I don't want to drag a coworker through my chain of confusion until I've made an appropriate amount of effort to unconfuse myself first. To do otherwise is likely to bring us both to confusion, possibly in different ways, possibly including confusion about what we're confused about, which is just a mess and dead weight. There's a time and place to explain and teach, and a time and place to expose my own confusion and ask for help, but neither is step 1.
Even if the API is undocumented and confusing, even if you're expected to ask for help as step 1, there's value in a fresh set of eyes getting a feel for exactly how the API is confusing before that, thus informing directions for potential improvement (be that API changes or improved documentation.)
Comment by gmueckl 5 days ago
But you can learn to phrase your WTFs about your colleague's code politely and constructively. I would even argue that this an absolutely basic skill for professionals. It typically leads to faster and better answers whenever a discussion arises.
Even if confusion seems to spread in a discussion, I would expect the person who realizes this first to call that out and and to reset the conversation.
There is nothing magic or onerous about this.
Comment by palata 5 days ago
I see a fundamental difference between thoughts and whatever words I pronounce. You're saying "you should share your thoughts", and I disagree. My thoughts are mine. Whenever I want to share something with the world, I phrase it and share the result of that process.
Comment by MaulingMonkey 3 days ago
Phrasing things politely and constructively is what I'm explicitly advocating for when I'm calling for "tact", yes. But said phrasing is not necessairly the very first thoughts out of my mind. When we push back on sharing our raw thoughts, it's precisely because we want a moment to be able to translate from passionate, driven, and perhaps rude thoughts - to polite, if perhaps a bit professionally dispassionate words. From unconvincing incendiary moral judgements against the cult of the singleton, to concrete examples of maintainence concerns and tradeoffs that can be discussed by everyone. From things that barely make sense in the context of our own minds, to things communicated clearly within the context and bounds of our shared understanding.
> Even if confusion seems to spread in a discussion, I would expect the person who realizes this first to call that out and and to reset the conversation.
Simply calling out confusion is insufficient to resolve confusion. Being able to narrow down what I'm confused about is an important skill and first step towards either unconfusing myself, or seeking help from others, allowing them to aid me in solving said confusion.
Unconfusing others is a step more difficult. Unlike with my own confusion, I find it necessary to build an accurate mental model of their thought process through my own indirect observation and questions, to understand where they've misunderstood, the correct understanding, and then a means of explaining and contrasting those two states through nothing more than clear communication to bring them out of said confusion. I may have to construct full blown examples, showing a concrete way their own initial biases fail them.
These are important skills and steps to take, of course, and you're right that there's nothing magic about it, but this is something I've expended a lot of time on over the decades I've been puttering around in development circles. It's time intensive, requiring one or more people focusing on a single individual's issues, just to reset things to a baseline of being unconfused enough to do good work.
And, of course, it will always be necessary, and I'm glad to help. It's a skill I believe I'm good at, and by unblocking coworkers and friends, I can potentially spend minutes of my time to save hours or even days of theirs, which is well worth it. But it's also worth taking the time to avoid such scenarios coming up again. It saves me time, and it saves them time.
Sometimes that means clearing up ambiguous or confusing documentation.
Sometimes that means keeping others at arm's length - at least until I'm at least no longer confused about what exactly I'm confused about.
Comment by InfinityByTen 5 days ago
In my life, I've never liked people who deliberately polish up their articulation to the level that it obfuscates how they arrived at that understanding (whether it's academics or engineers). They might not do it for attention and they might not be doing it knowingly. IMO, they are taking away the opportunity of learning from the people they are talking to. For me the conversation is one sided. I'm there to listen, but rarely can I ask questions, give feedback or grow from where they have possibly reached.
Comment by ozim 5 days ago
I don't need your fluff. No one cares how you arrived writing another crud line to save an object to database or sent yet another AJAX call.
If you wrote some genuine great compression algorithm that's a different take on compression, I would like to see step by step reasoning and eventual dead ends.
Comment by InfinityByTen 5 days ago
I get it, that the overall discussion is about DeltaDB. I'd say interesting concept to toy with. I'd pay more attention to "micro commits" as the idea more than the keylogger.
Comment by 8note 5 days ago
why didn't you add these three other parameters to it?
how does this default value make sense when unset?
mostly things that end up not-in-the-commit that 3 years from now people are gonna wonder about is really handy to know
Comment by jimbokun 5 days ago
Comment by hinkley 5 days ago
Don't fucking do that. Do something way less than halfway to that line.
Comment by jimbokun 5 days ago
Food writing is its own genre where the recipe is one part of a larger story. Can often include travel stories as well.
Maybe not your thing. But definitely has its place.
Comment by hinkley 5 days ago
Comment by jcgrillo 5 days ago
Comment by InfinityByTen 5 days ago
Maybe this is the mathematician's lament rejigged. And I have held it for probably 20 years of my life. I try to do things differently when I write, but I have to say there are enough people who find it sub-standard. It's too imprecise or ambiguous or not clear enough for their taste. They aren't wrong. But I'm not done learning and I start building my thoughts as I go along.
Comment by hinkley 5 days ago
They don't need to know I was brushing my teeth and thinking of bacon and an argument I had with my spouse right before I thought that though. Or how rude the customer in front of me was to the new barista who was just trying her best.
Comment by ablob 5 days ago
Comment by hinkley 5 days ago
Comment by aeonik 5 days ago
It makes one vulnerable though, that's for sure. Psychologically I mean.
Comment by hinkley 5 days ago
Comment by aeonik 5 days ago
Probably a pipe dream though.
But for sure I don't want to force it on people.
Don't use the feature if you don't want to, I'm all about freedom of choice.
Just saying the upside to it.
Comment by hinkley 5 days ago
I know I'm done with a module when people add features to it the way I would have done so. That sounds like a non-statement, but I bet if you watch your projects closely, you'll see that's often not the case and sometimes it's laughably bad. It goes along with Knuth's thing about code meant to be read by humans and incidentally by computers, and also Kernighan's Law. My code eventually just says exactly what it does. And I don't use the same noun to mean three different things in three different places. Why? Because then I can take my name off of the bus number list and pick something else up. This module that I wrote is Steve's baby now, and that one is David's. In fact taking it over is how David got promoted.
Comment by jimbokun 5 days ago
Comment by aeonik 5 days ago
The only reason they'd go deeper is for a bisect, or some other analytical method.
At least one day I hope they level up to be able to do that.
It's a golden rule thing for me.
I like more information because it's easier to filter too much data, than to reconstruct destroyed information.
Comment by hinkley 5 days ago
Comment by 8note 5 days ago
if you're calling what you're doing engineering, you are following a standard best practice, and should easily be able to run through a checklist and show your work at each step.
not every thought needs to be expressed sure. its irrelevant what you thought about your lunch. Its important how you picked what latency numbers are important, and how you went about predicting volume, including what factors your did and didnt look at.
software developers havent been rigourous engineers over the last several decades, and that isnt a good thing
Comment by hinkley 5 days ago
What ended up happening is you committed the safe bits and the reversible decisions first to buy yourself time to work out the tricky bits before you had to commit (literally and figuratively).
I think trunk-based development is greater than PRs, but the values are close enough that the politics of PRs (specifically, consensus-based development) win out, or at least aren't worth fighting.
Comment by prodigycorp 5 days ago
Comment by clickety_clack 5 days ago
Comment by elevation 5 days ago
Why stop at zed? The trillion dollar investment AI companies have amassed was nominally for datacenters, but as those costs rise and completion timelines extend past the typical business planning horizon, it becomes more efficient to put the money to work elsewhere. You can buy whatever you want with a trillion dollars.
Comment by whazor 5 days ago
I personally want better read-only code tools, or maybe the return of UML?
Comment by prodigycorp 5 days ago
Comment by jimbokun 5 days ago
I imagine many people have tried this but I haven’t yet. And mermaid swim lane diagrams are my go to tool for designing system architecture.
Comment by darepublic 5 days ago
Comment by Xotic007 5 days ago
Comment by mplanchard 5 days ago
I can’t help but feel like it is all enabling a level of developer surveillance with which I am deeply uncomfortable, though.
Comment by jimbokun 5 days ago
Comment by skydhash 5 days ago
Comment by jmole 5 days ago
If Gemini seems stupid nowadays, it's only because they're being stingy with compute allocation.
0 - https://en.wikipedia.org/wiki/Piper_(source_control_system)
Comment by OtherShrezzing 5 days ago
Comment by teach 5 days ago
My company is remote-only, and my coworkers mostly don't live anywhere near me. We see each other a couple of times a day on video chat, but communicate mostly during the day via Slack.
We're also, uh, pretty far along the curve in adopting LLM agents to write good code for us. With a good model and the extremely good guardrails our of specific coding harness, LLMs are writing the majority of our code these days.
So on a typical day I'll grab a ticket off the top of the stack, point my LLM at it, and start working with it to solve the problem. We'll make architectural decisions, etc, create a plan and execute the plan. The feature I shipped most recently cost $19 in tokens and the LLM was churning without my input for like half an hour at one point in the thick of it.
MAYBE if there's a question I'm not sure which way is best I'll post a question in the team chat for my teammates to weigh in on. But a lot of my tickets are done completely autonomously.
Then I'll open a PR, and post a link to the PR in Slack, requesting their review and my teammates will see the implementation for the first time. They sometimes have questions! Often, they'll post these questions in the Slack thread rather than as PR comments, because we're having a fast real-time conversation and GitHub comments aren't a great fit for that.
These questions have answers in the chat log with the LLM that lives on my laptop, but I can't trivially show it to them.
So I end up playing telephone with the LLM -- copying my teammate's questions from Slack to the LLM chat, pasting the answers back, etc
The idea that my coworkers and the LLM and I can all be more easily a part of the same conversation appeals to me greatly
None of this means the Zed team is on the right track. Nor that my team might work better in a different way! But we're too "successful" with this approach for there to be much institutional pressure to change our ways at the moment.
Hope that helps.
Comment by spaqin 5 days ago
Comment by skydhash 5 days ago
Comment by jimbokun 5 days ago
Which makes more sense I think than describing it as an alternative for Git PRs.
Comment by OtherShrezzing 5 days ago
It feels like this communications problem could be solved through draft PRs and a decent slack app integration.
Comment by thom 5 days ago
Comment by jimbokun 5 days ago
The current state of the code is not sufficient for modern software development.
Comment by thom 5 days ago
Comment by flerchin 5 days ago
Comment by chrishill89 5 days ago
That agents need something "beyond git" is lost on me but it keeps coming up. For one subject the tool doesn't matter -- in fact it can be obtuse like git or bash and it's fine because agents will handle it. Then for another thing the story is opposite.
Comment by softwareseko 5 days ago
Comment by chrishill89 2 days ago
Comment by localhoster 5 days ago
Comment by dkdbejwi383 5 days ago
Comment by pjm331 5 days ago
i've settled on all of this context attached to issues in a project management system and referenced from commits
it works just fine - its not like your agent cannot read your issue tracker
Comment by QuercusMax 5 days ago
Comment by jackxlau 5 days ago
Comment by jimbokun 5 days ago
Comment by ericyd 5 days ago
Unrelated: I started using Zed a few weeks ago and really love it, it is everything it promises to be.
Comment by vitally3643 5 days ago
Most engineers I know keep such notebooks when they're full, because it's kind of neat to open a random page and see a brain dump scrawled out. Nobody has ever looked at another engineer's scratch notes and drawn useful insight. Frankly, I wouldn't even want to other than for novelty.
Comment by tengbretson 5 days ago
Comment by commentsaregood 5 days ago
Perhaps not. But I'm not going to be the guy training the Team on how not to do it. They have shaky grasp of the full set of standards for PR's as is.
Comment by j16sdiz 5 days ago
The only alternative to PR review is pair programming - where you can discuss with your peer in real time, discuss the design, asking questions or clarifications.
Without real time communication, those small delta are pure noise.
Comment by skydhash 5 days ago
I’m highly skeptical of this claim. For any complicated feature, there’s always a design doc (or an RFC, or a wireframe) and that’s what people used for discussion. Discussion in a PR are mostly about whether to accept the code, reject the feature, or provide feedback about alternate implementations. It’s not for pair programming or directing design.
Collaborating together in a research lab (brainstorm session) is not the same as asking feedback for a journal article (PR). What is described in the article is pair programming with extra steps.
Comment by bison_fan 5 days ago
I don't care about any of the collaboration or AI tools that they are working on and I hope that these efforts don't detract from the text editor. At the very least I hope I can hide these features in the UI and continue to ignore them. I also hope that these features don't lead to a bloated, sluggish text editor like VSCode and IntelliJ.
Comment by seanclayton 5 days ago
This benefits those who make the machines you have conversations with and those that invest in them.
Comment by jerf 5 days ago
AI's code writing velocity makes this even worse, there's no way I can be simultaneously working on a code base while an AI agent is running around it doing something else.
It feels like maybe there's a ghost of an idea here about how to get the best of both worlds, but I'm not sure I follow the throughline on it.
Comment by overgard 5 days ago
Comment by jimbokun 5 days ago
Comment by timuthang 5 days ago
Comment by llamacld 5 days ago
Comment by slopinthebag 5 days ago
I also like the AI tools, the inline assistant is good and the agent is also pretty nice and well integrated into the editor without it being the focus point. I'm not against using AI but I certainly don't use it as much as a lot of people do.
That being said, I really dislike this recent push towards becoming more like a cursor wannabe. They have a new (for now) opt-in default layout that almost hides the editor panel in favour of the agent threads and agent panels. And now this. I don't want to switch editors, but if they keep pushing a different workflow from what I use it might send me back to Jetbrains...
Comment by jumploops 5 days ago
This is close, but not quite spot on. I've found that I'll test more ideas _with code_ using agentic tools, then before, leading to an excess of conversation history that is no longer representative of the final outcome.
A simple example I encountered recently was dealing with performance issues on an iOS application (I haven't written mobile code since before Swift..). If you viewed the chat, you'd dive down a diverging path of rabbit holes, few of which were relevant to the final outcome[0].
To solve this in my own work, I've started relying on "context hierarchy" - which is essentially live documentation that lives next to the source files (using markdown).
This approach avoids comments being removed erroneously, and helps codify the intent behind the code and how it relates to the overall architecture. As an added bonus, it also forces the LLM to edit _two_ things instead of just one (which might actually be the biggest benefit).
My workflow is currently maintained via some repo level scripts and AGENTS.md prompts, but I've tried to pull it out into a skill for others to use[1].
Candidly, I'm not sure the skill is the best approach yet, as the agent can sometimes get too focused on the "skill" as a separate tool rather than a core part of the workflow. I'm currently exploring other options here (repo bootstrap, side-loaded subagents, hooks, etc.)
[0]For more context, I was using a 3rd party library and trying to make it performant during a streaming operation, by removing the SwiftUI view layer (LazyVStack) and implementing a custom rendering path with UIViewController. The final solution ended up as a custom implementation of the 3rd party library, and moving back to LazyVStack.
Comment by these 5 days ago
If previously you needed to take action 1, 2, 3 to go from state A to B, all you saw was the change from A, B. Now you see intermediates 1, 2, 3 and can train the models to skip straight to B with the added context of the intermediate states.
Comment by cbovis 5 days ago
Where shared collaboration I think becomes much more interesting is when agents start behaving like a member of your team. Not someone you delegate to, but someone that actively seeks out conversations and interacts with others as though they're just another member of the team.
You shouldn't be aware that version control is happening behind the scenes, you're just interacting with a persistent persona through Slack/teams/notion/figma/linear/etc with something that's logging issues, fixing bugs, writing PRDs, designing mockups, etc. The only point at which you know there's version control is when you're asked to review something before it's integrated.
Comment by fridder 5 days ago
Comment by alok-g 5 days ago
I agree with a lot of comments here saying that the "conversation that generates the code" is often not meaningful once the code is there. It is however important to me as development history. Commit messages, meanwhile, are not the right places to hold this conversation.
As of now:
1. I save the conversations as "Prompt ###-XX.md" files into a 'completed prompts' folder within the repository and cite "Prompt ###" in the commit message.
2. I explicitly have the coding agent explain the decisions from the conversations in the generated code/artifacts.
Comment by commentsaregood 5 days ago
> this is what comments are for
> that is usually unnecessary, but if it were, a comment would fulfill it
> I literally solved this problem with a comment yesterday
> if the AI needs to know that, I'd explicitly ask it to put it in a skill or AGENTS.md. if a human needs it, I'd put it in a comment
> this is overengineering a purpose comments already fulfill
I dont want a second set of commit changes and a freaking schema that tracks me Ctrl+Z and Shift+Ctrl+Z'ing a bunch just to accomplish what comments already do, wtf.
Comment by UndyingHorse 4 days ago
Comment by abahgat 5 days ago
One thing I would really love to see, however, is a way to better attach code review comments to the specific version of code they were left on. I find it quite difficult to do with git and github, considering that commit hashes change every time one is forced to rebase (say, for example, to handle a merge conflict).
Do you expect DeltaDB to help address this problem?
Comment by shibel 5 days ago
> I have never been a big fan of pull requests.
I guess this partly explains why Zed (still) lacks a PR review flow, let alone a coherent one, despite some interest [1]. Pretty much the only reason I’m still with JetBrains.
[1]: https://github.com/zed-industries/zed/discussions/34759
Comment by literallyroy 4 days ago
Comment by hyperhello 5 days ago
Comment by ChrisMarshallNY 5 days ago
The problem is, is that it works, if you assume "working" means the software sellers get wealthy.
There's a reason that most waitstaff wear black. They should blend into the background, and not be what the folks at the table are talking about. In rare instances, restaurants exist, where the waitstaff is the service.
In software, though, you're being served by a waiter wearing a clown suit, screaming slogans at you, and serving you lukewarm, pre-chewed goo.
Comment by jimbokun 5 days ago
Probably easier with an ad blocker or just Reader view. But I really enjoy tapping on all the overlays and moving ads and videos and see them evaporate one by one, leaving just the text I wanted to read.
The default state of the page is much like the restaurant you describe.
Comment by skydhash 5 days ago
The “calm technology” book has an handful of advices, but one of the best example is the xbiff program. It switches picture when you have new mail on your local spool.
Comment by hyperhello 5 days ago
Comment by BigTTYGothGF 5 days ago
A table saw does tho.
Comment by darepublic 5 days ago
Comment by plq 5 days ago
So maybe just switch to a code review tool and use its interface to converse with the bots?
Comment by amichayg 5 days ago
Comment by opem 5 days ago
Gives jj vibes, interesting!
Comment by nchmy 4 days ago
Comment by Zanfa 5 days ago
Comment by ivanjermakov 5 days ago
Not without cons of course: commit byte size, public WIP work and leaked secrets/unwanted edits.
Comment by pgedge_postgres 4 days ago
Comment by _pdp_ 5 days ago
Comment by gnunicorn 5 days ago
There has also been a lot of discussion about the value of the peer review process recently, in in general. But I wonder if this isn't all going into the wrong direction. Quite honestly, even with the previous review and discussion system of (squashed) commits how often did you really use git blame and opened up the original PR discussion of that changed line that caused the bug? And how often did it help you beyond learning it was done by that rockstar developer who has left long ago? And that the discussion on that PR was a point in time and the code around it has evolves beyond that and it would need looking at another 10 PR discussion to get the entire context.
What I am saying is that git (and before that Subversion and CVS) has a full history is so that it can resolve the latest state. Period. We made that commit ritual somewhat of a hallmark in putting more supposed meaning into recording ever more in that history. But we rarely stopped to check if that is all that useful. Recording even more, all the time, reminds me of these work group meetings that have minute records of every bike shedding meeting word said by everyone, that, honestly, no one ever looks at after the next meeting ever again. I don't think there is value in minute record keeping, it becomes too much noise that just makes it harder to parse. Now also adding all AI conversation and agent thinking to that tree? What's the value of that in like 3 months down the line? I don't see it.
Comment by jimbokun 5 days ago
That’s about it.
Comment by sangeeth96 5 days ago
Excited to see what Zed team comes up with! :)
[1]: https://builders.ramp.com/post/why-we-built-our-background-a...
Comment by coneonthefloor 5 days ago
Comment by bicepjai 4 days ago
Comment by BigTTYGothGF 5 days ago
I didn't see anything in there about branching which seems like a big thing not to have.
Comment by ukprogrammer 5 days ago
Our human ability is not defined by our _absolute_ output, but, by the quality of the _delta_ applied to an engineering artefact
Great engineers obsess over every keystroke
With LLMs, a much smaller number of keystrokes can create a much larger and more positively impactful delta
Every delta to the codebase can tell us some informational property about the behaviour of the system and storing that information WILL prove to be useful in the future
Comment by lijok 5 days ago
Comment by boomlinde 5 days ago
I can already see the change. What I need to know is why, not how exactly. It should be clear from a commit message why a change was made. If it's not, that problem should be addressed during review. I shouldn't have to watch a recap of your conversation with a virtual idiot to understand your commit. If the tools you use to generate code can't be coaxed into producing that level of quality, or if you don't understand the output of your generative tools to the extent that you can describe for someone else why they made a particular change, you have a tooling and competency problem.
If further tooling can solve these problems, then I'm all for it, but the idea here seems to be to not solve that problem, but to burden anyone interrogating the history of a repository with also scrolling through chat histories so that virtual idiots can keep shitting out low-quality changes and so that operators can keep accepting those changes as-is without thinking too much about why.
I guess it doesn't help that tools like GitHub don't really care about commit messages. You can't even comment directly on commit messages during review.
Comment by csours 5 days ago
Comment by coldtea 5 days ago
Comment by afzalive 5 days ago
Comment by thesurlydev 5 days ago
Many of the product decisions that Zed's made caused me to switch to Zed for my daily driver IDE (previously JetBrains). The recent AI agent threads and improvements around diffs really solidified the move.
Comment by b33j0r 5 days ago
Honestly all of this drives me back towards nvim or notepad sometimes.
I have had a jetbrains subscription since pycharm came out, and the killer feature was always the visual debugger. Seems nearly quaint now.
What specific things do you like about zed?
Comment by brainless 5 days ago
Commits are great but for an agent that works for the non-engineers (what I am building), commits cannot be represent the chain of thought since that chain has happened before - in English and has lots of debate/discussion with agents.
Zed is focused on engineers. I am focused on everyone else but I came to similar conclusions since my situation is tighter. Software has to be defined by humans, then codified (in development) by agents and then tested by humans. Deployment, rollbacks, etc. also has to come into the scene.
I have been breaking down the conversation into agents playing roles like PO, PM, Architect, etc. Then taking outputs from those into structured inputs for Rust engineer, Typescript engineer and so on. It is all WIP but holding on to this chain of "chats" is key in my opinion. That is where the software is made.
Comment by wxw 5 days ago
Not convinced DeltaDB is useful for humans directly but assume new and interesting interfaces can arise from the abstractions it provides.
Agree that PRs/snapshots is an antiquated way of sharing information.
Comment by hackermanai 5 days ago
Comment by bronlund 5 days ago
Comment by protocolture 5 days ago
Comment by uwagar 5 days ago
Comment by axegon_ 5 days ago
1. It is fast and snappy. Nothing comes even close besides vim (and I don't mind going full time to it if I have to)
2. The ability to completely shut off and block any slop machine features from interfering with my workflow or leak code back to sloppenai, sloppus or any other self-installed-worst-security-practice-backdoor garbage.
Having said that, I hope they don't remove that ability in the future and enforce the "slop is so good man, you should try it" philosophy.
Comment by dematz 5 days ago
I am happy about even though I've never tried gram, because if zed goes to shit there will be an alternative, which hopefully pressures zed to stay sane
Comment by Aerolfos 5 days ago
> I also object to making myself and my work depend on paying a subscription fee to anyone. I don't want an outage at Anthropic to affect my ability to do my work. I think it is a grave mistake to build anything on such shaky foundations as the sustainability and profit margins of the AI industry.
Someone actually sensible, excellent.
Comment by narnarpapadaddy 5 days ago
Any particular model almost doesn’t matter at this point. Harnesses are built around them. OpenAI and Anthropic are basically interchangeable in an open-source harness like OpenCode; the switching cost is virtually zero. Local models are improving rapidly and are already “good enough” for many use cases already. The bet that LLMs will continue to exist as an algorithm is pretty solid.
Comment by axegon_ 5 days ago
Edit: After further inspection, I think I'm jumping ship before it's too late. And I'll look, see if there's a way to lend a hand or two when I have time!
Comment by bigstrat2003 5 days ago
Comment by opem 5 days ago
Comment by gib444 5 days ago
Your boss will also demand that you narrate your thought process 8 hours a day. Speakmaxxing will be required to keep your job. There will be a "silence" wall of shame for the non-compliers.
Comment by overtomanu 5 days ago
The Indian workers training AI robots to take their jobs
Comment by messh 5 days ago
Comment by fHr 5 days ago
Comment by distalx 5 days ago
Comment by soulbadguy 5 days ago
Comment by hmokiguess 5 days ago
Comment by yurlyCLOCLOCK 5 days ago
Comment by ins199 5 days ago
Comment by yaodub 5 days ago
Comment by nicechianti 5 days ago