Non-functional requirements
Non-functional requirements are the implicit quality standards and behavioral constraints that govern how a software system should work, as distinct from what it should functionally do — encompassing concerns such as performance, reliability, maintainability, security, and acceptable code style.
Role in agent-driven engineering
In the context of AI-assisted software development, non-functional requirements take on renewed importance because LLM-based agents do not automatically inherit the tacit professional standards that human engineers absorb through experience and team culture. Ryan Lopopolo (OpenAI) argues that it becomes "our job to specify those non-functional requirements to write them down in a way that the agents can see this is what it is to do a good acceptable job" — meaning that criteria which human developers might leave unspoken must be made explicit and machine-readable so that agents executing tasks can evaluate whether their output meets the bar. (source)
This framing positions non-functional requirements as a key interface between human intent and agent behavior in a workflow where humans steer and agents execute. Without explicit encoding of these requirements, agents optimize for functional correctness alone, potentially producing output that passes tests but violates organizational standards around latency, security posture, error handling, or code hygiene.
Relationship to adjacent concepts
Specifying non-functional requirements for agents is closely related to the practice of writing evals, since both involve translating fuzzy human quality judgments into structured, checkable criteria. It also connects to system prompt and context engineering: the channel through which agents receive these specifications is typically the task description or surrounding scaffolding rather than the codebase itself.