Good Software Knows When to Stop. Most AI Doesn't.
There was an article trending on Hacker News this week about software that knows when to stop. The author made a simple argument: the best software tools have always been defined not just by what they do, but by what they refuse to do. Good software has boundaries. It knows its scope. It says no.
I've been thinking about this in the context of AI tools, and I think there's an important idea here that most AI product teams are getting wrong.
The Calculator Principle
A calculator is perfect software. You type in a math problem. It gives you the answer. If you type in gibberish, it shows an error. It never tries to guess what you meant. It never hallucinates a plausible-looking answer to a malformed input. It either knows or it tells you it doesn't.
Compare that to an AI assistant. You ask it a question. It always has an answer. Always. Even when it shouldn't. Even when the correct response is "I don't know" or "I'm not confident enough to answer that" or "you should ask a human."
AI systems are trained to be helpful. Helpfulness, in the training paradigm, means producing a response. Not producing a response gets penalized. So the model learns to always produce something, even when producing nothing would be the better outcome.
This is a fundamental product design failure, and it's baked into the training process itself.
The Cost of Confident Wrongness
I ran into this last month. I was using an AI coding assistant to refactor a database migration. The assistant confidently rewrote the migration in a way that would have silently dropped a column containing production user data. The code looked clean. The syntax was perfect. The logic was catastrophically wrong.
I caught it because I know databases well enough to review the output carefully. A less experienced developer might not have. And that's the problem. The AI didn't say "I'm not sure about this migration, you should double-check the column references." It just... did it. Confidently. Incorrectly.
This is worse than not having AI at all. Without the AI, the developer would have written the migration themselves, thought through each step, and probably caught the issue. With the AI, they got a finished result that looked right and felt authoritative. The AI's confidence was a liability, not an asset.
Graceful Degradation Is a Feature
In traditional software engineering, we talk about graceful degradation all the time. When a system encounters an error, it should fail in a predictable, safe way. A web server that can't connect to the database should show a clean error page, not a stack trace. A payment system that can't verify a card should reject the transaction, not process it anyway and hope for the best.
AI tools need the same philosophy. When an AI system hits the boundary of its competence, it should degrade gracefully. That means:
Saying "I don't know" when it doesn't know. This sounds obvious but it's surprisingly rare. Most AI systems will generate a plausible-sounding answer rather than admit uncertainty. I'd take a tool that says "I can't help with this" over a tool that invents something wrong.
Expressing calibrated confidence. Not every output should come with the same level of authority. "I'm very confident about this refactor" and "I took a guess here, please review carefully" are both helpful. The current default of treating every output as equally reliable is not.
Deferring to humans at the right moment. The best AI tools I've used know when to hand control back. They'll do the routine work autonomously and flag the edge cases for human review. The worst AI tools try to handle everything, including the things they handle badly.
Scoping themselves appropriately. If I ask an AI assistant to fix a bug, it should fix the bug. Not refactor the entire file. Not update the dependencies. Not "improve" code that wasn't part of the request. Scope discipline is a feature.
Why AI Product Teams Get This Wrong
There's a perverse incentive in AI product development. Demo-ability. When you're showing investors or potential customers what your AI can do, you want it to do things. You want it to be impressive. You want it to handle every query, complete every task, never say no.
"Watch, it can handle anything!" makes for a great demo. "Watch, it knows when to stop!" doesn't demo as well, even though it's a better product.
This demo-driven development leads to AI tools that try to do too much. They over-complete tasks. They add unnecessary flourishes. They attempt things beyond their competence. And the failure modes are insidious because the output looks professional and polished even