The rise of large language models (LLMs) has fundamentally changed the economics of software development, making the generation of code significantly cheaper and faster. This shift has prompted a debate over whether high-level frameworks—which were originally designed to increase human productivity by providing pre-built structures—still hold value when an AI can generate raw code in any language, such as Rust, at a low cost. The argument for moving toward lower-level languages often centers on performance, but the practical reality of maintaining and evolving a production application introduces complexities that go beyond simple execution speed.

Frameworks like Ruby on Rails provide a predictable structure that allows developers to navigate, debug, and extend projects more easily. Even when an LLM writes the code, the framework ensures that the 'plumbing'—such as job queues, Object-Relational Mappers (ORMs), and security protocols—is handled consistently. A full rewrite into a different language, even if functionally equivalent, can introduce subtle behavioral changes. Because many user-facing quirks and features are tied to the specific framework and language ecosystem, a rewrite can risk breaking existing user workflows or introducing bugs that were absent in the original stack. Furthermore, actively maintained frameworks provide ongoing security updates and performance improvements that are 'free' for the developer but difficult to replicate in a custom-built solution.

Beyond the structural benefits, the choice of language involves trade-offs in developer experience and iteration speed. For example, Ruby allows for instant code reloading and a REPL (Read-Eval-Print Loop) environment, which are highly effective for rapid diagnosis and testing. While a rewrite into a language like Rust might offer superior performance, it often comes with slower compilation times and more complex syntax. For many business applications, the performance gains of a lower-level language may not outweigh the costs of testing a completely new system. Instead of a full rewrite, developers can use LLMs to optimize existing applications, which is less likely to alter core behaviors while still achieving performance goals. Ultimately, the framework remains a tool for managing complexity, ensuring that the focus stays on solving user problems rather than reinventing the underlying infrastructure.