The Shift from Code Generation to Architectural Oversight

Jonathan Kelley, founder of Dioxus Labs, argues that while AI agents have drastically lowered the cost of writing code, they have simultaneously raised the bar for software engineering. In the context of building Dioxus—a complex, cross-platform Rust framework—the team initially fell into the "slop cannon" trap: using agents to generate tens of thousands of lines of code that were ultimately unmergeable due to poor quality and lack of architectural fit.

Kelley emphasizes that code is now a commodity, but high-quality, maintainable software remains scarce. The primary value of a software engineer has shifted from writing syntax to architecting elegant solutions, thinking 10 steps ahead, and ensuring the system remains flexible. Agents are most effective when they act as "patient specialists" that handle the cognitive burden of complex APIs or language-specific edge cases, rather than as autonomous architects.

Where Agents Excel vs. Where They Fail

  • Knowledge-Heavy Tasks: Agents excel at tasks that require deep knowledge of bespoke APIs, documentation, and build systems. For example, the Dioxus team used agents to implement deeply integrated Kotlin and Swift plugins in two weeks—a task that previously took years of manual effort.
  • Mundane Maintenance: Agents are highly effective at automating tedious release-related tasks, such as verifying release checklists, backporting bug fixes, and ensuring documentation accuracy. This allows the core team to focus on high-level architectural evolution.
  • Testing Limitations: Agents struggle to write meaningful end-to-end tests because they often lack the context to write the right tests rather than just any test. However, they are excellent at generating fuzzing harnesses that subject software to adversarial inputs.

The Human-in-the-Loop Requirement

Despite the velocity gains, Kelley maintains that human oversight is non-negotiable. The Dioxus team continues to review every pull request line-by-line. This is necessary because:

  1. Intent Communication: Contributors and agents often fail to communicate the long-term intent of a feature, leading to "glued-in" solutions that degrade the codebase over time.
  2. Substrate Quality: If the underlying architecture is poor, agents will simply produce high-quality spaghetti code faster.
  3. Prompting as a Skill: The quality of the output is directly tied to the developer's ability to communicate intent, making prompt engineering a critical, albeit technical, skill for modern builders.