What do I want
Selflessness is something I am having to think about more deeply
Over the past couple of months, I’ve found myself wrestling with the ethics and responsibility of LLMs, especially around open-source software and contributing to large legacy codebases.
And honestly, the more I think about it, the more complicated it becomes.
If you work in tech right now, particularly in large organizations or startups, you’ve probably noticed the shift already. I’ve had conversations with people across startups and billion-dollar companies, and one thing is becoming very clear: many companies are restructuring themselves around AI. The playbook is almost predictable now. Reduce headcount, invest heavily in compute and AI tooling, give engineers access to the best coding models or interfaces available, then expect teams to produce significantly more output with far less time.
And strangely enough, there’s often no clear roadmap for what this new world should actually look like long term. Just speed. More shipping. More automation. More code.
While all this is happening, I keep thinking about open source. Because underneath most of these systems, underneath the copilots, coding assistants, agents, and generative tooling, there is a giant invisible layer of open-source software carrying the ecosystem. PostgreSQL. Linux. Python libraries. Framework maintainers. Old forums. Stack Overflow posts. Years and decades of accumulated community effort quietly powering the modern AI stack.
Which makes me wonder: what happens when the ecosystem consuming the code begins moving faster than the ecosystem maintaining it?
Historically, product development has always been constrained by the famous triangle: fast, cheap, good. Pick two. But generative AI is beginning to challenge that assumption, or at least it appears to. Teams can suddenly move faster and cheaper at the same time. Features that once took weeks can now be prototyped in hours.
But there’s a hidden trade-off.
And I think the trade-off is responsibility.
Especially in open source.
Because open-source software doesn’t just rely on code. It relies on a social contract built around trust, maintainability, transparency, and long term stewardship. The question isn’t simply whether the code compiles or passes CI. The real question is: who understands the consequences of this code existing? And maybe even more importantly, who is responsible when it breaks?
While thinking through this article, I came across an interesting article that spells out Google’s leaders position regarding this. Their stance was essentially this: use AI coding tools as much as you want, but whoever commits the code owns responsibility for it.
And honestly, I think that makes sense.
Because somewhere along the line, there still has to be accountability. The model cannot carry moral responsibility. The prompt cannot carry engineering judgment. Eventually, a human types “git commit -m “I’m don’t understand this code”` and create a pull request or merge request. And that human becomes responsible for the outcome, along side the person you press merge.
But this raises another difficult question: what does responsibility actually look like in massive legacy systems? Especially codebases with years of accumulated abstractions, undocumented behaviors, edge cases, tacit knowledge, and architectural decisions made by people who may no longer even work there.
This is where I think modularity becomes extremely important.
Lately, I’ve been fascinated by the rise of structured AI engineering workflows. One example that stood out to me was Andrej Karpathy’s CLAUDE.md approach, which gained a surprising amount of traction online. What interested me wasn’t the hype around it, but the philosophy underneath it: the idea that AI systems should operate within bounded contexts, that changes should remain localized, and that agents should understand the scope of modifications they introduce.
That is useful.
Because when changes are modular, isolated, and well-scoped, they become easier to test, easier to review, and easier to reverse. And I think this may become one of the hidden engineering patterns of the AI era. Not just writing code faster, but constraining complexity better.
What worries me more is the opposite pattern. Huge AI-generated commits. Massive refactors. Thousands of generated lines no one fully understands. That feels dangerous to me. Not because AI-generated code is inherently bad, but because software engineering has never only been about generating syntax. It has always been about understanding systems. And systems carry consequences.
There’s a quote from Brian Kernighan that keeps coming back to me: “Debugging is twice as hard as writing the code in the first place.” If we are now generating code at unprecedented speed, then logically, we may also be generating future debugging complexity at unprecedented speed.
Which perhaps explains why many teams now quietly admit something interesting: they are shipping features faster, but spending significantly more time reviewing code.
So what does responsible AI-assisted engineering actually look like?
Honestly, I’m still figuring that out for myself.
But currently, my workflow tends to look something like this: I use AI coding agent to understand unfamiliar codebases, reason through implementation paths, accelerate repetitive tasks, and explore ideas quickly. But I still ensure the thinking remains mine. I want to understand what the system is doing. I want local environments running properly. I want tests reproducible. I want to verify using my thought out assumptions.
And maybe that’s the balance I’m personally trying to protect.
Not rejecting AI, but also not outsourcing engineering judgment entirely. At least not yet.
And perhaps this is the real opportunity cost of AI in engineering. Not just what we gain in speed, but what we slowly risk losing in understanding. Because if engineering eventually becomes prompt orchestration without deep systems thinking, then over time we may unintentionally weaken the very thing that made good engineers valuable in the first place: Judgment.
Reason. Context. Architectural intuition. The ability to reason through ambiguity.
I also think this changes how open-source communities may evolve. Maintainers might become less concerned about whether contributors used AI, and more concerned about whether contributors understand what they submitted. Because trust in open source has always been less about perfection and more about stewardship. And stewardship requires care.
So if your company is pushing aggressive AI adoption, or encouraging what people jokingly call “token-maxxing,” I think it’s worth remembering something simple: the responsibility still belongs to the person committing the code.
Not the model. Not the tool.
You.
Which means your workflow may need to look very different from someone else’s. And honestly, maybe that’s okay. Because perhaps the future of engineering is not about resisting AI or blindly embracing it.
Maybe it’s about learning how to remain thoughtful inside acceleration.
Join the community and get new insights delivered to your inbox.