You Bought the Machine. Now Build the Software Factory. A developer argues that coding agents are like fast machines that increase production but not useful output unless the surrounding 'factory'—engineering practices, executable rules, and verification—is built. The post emphasizes defining precise work orders and tolerances, encoding domain rules in code, and requiring explicit verification commands to ensure agent output stays within quality boundaries. // follow-up post from ... A factory owner buys a machine that works ten times faster than his employees. He drops it into the middle of the workshop and switches it on. Within an hour, it produces hundreds of parts. Some are correct. Some are nearly correct. Some only look correct until somebody puts weight on them. Nobody can reliably tell the difference. The drawings are outdated. The measuring equipment is broken. Important specifications exist only inside the head of one senior employee. Quality control is one exhausted person saying: Looks fine to me. Production has increased. Useful production has not. That is software development with coding agents. We bought the machine. Now we need to build the factory. Coding agents can already: That is real production power. It is not engineering maturity. A factory also needs: Without those things, an agent is just a very fast developer with incomplete context and no responsibility for the production incident. We already had developers like that. Now they scale horizontally. This is not a useful agent task: Improve customer validation. Add tests where appropriate. Do not break anything. “Do not break anything” is not a requirement. It is a prayer. A useful task defines the part: Reject an empty customer identifier before database access. Required behavior: - Reject an empty string. - Reject whitespace-only input. - Throw InvalidArgumentException. - Include "customerId" in the exception message. Constraints: - Preserve public interfaces. - Do not add dependencies. - Do not modify unrelated files. - Do not suppress static-analysis errors. Verification: - Add a regression test that fails before the fix. - Run PHPUnit. - Run PHPStan. - Run PHP-CS-Fixer in dry-run mode. - Report commands, exit codes, and results. No change is a valid result if the defect cannot be reproduced. That is not clever prompting. It is a work order. The agent does not need encouragement. It needs dimensions. Critical software knowledge still lives in: DO NOT TOUCH A senior developer may understand the invisible rules around a codebase. The agent sees files. It does not see tribal knowledge. Store durable knowledge ADRs, Skills, Docs, ... in predictable places: AGENTS.md README.md docs/architecture.md docs/domain-rules.md docs/decisions/ docs/runbooks/ But documentation is not enough. Make important rules executable. Do not merely write: Controllers must not execute SQL. Add an architecture test. Do not merely write: Money uses integer cents. Encode it: