We should be more ambitious with the software we build
The Case for Increased Ambition in Software Development
The primary takeaway for modern software developers is that the barrier to entry for complex, high-performance projects has dropped significantly, allowing individuals to build sophisticated tools that were previously considered too costly or time-consuming. Rather than using AI merely to speed up existing workflows, developers should leverage these new capabilities to tackle ambitious projects that were once deemed infeasible.
The New Reality of Software Capability
Recent advancements in AI have fundamentally changed the economics of software development. Tasks that previously required deep domain expertise and months of labor—such as writing high-performance regex engines, building specialized compilers, or developing complex game AI—can now be completed in a fraction of the time. This shift allows developers to move beyond "works for me" prototypes toward tools that meet professional quality bars, provided they maintain rigorous testing and benchmarking standards.
Avoiding the "Vibeslop" Trap
There is a justified skepticism regarding AI-generated projects, often dismissed as "vibeslop" due to the prevalence of low-quality, unverified code. However, the solution is not to avoid ambition, but to apply it with rigor. Successful projects, such as those that uncover real bugs in established systems like Postgres, demonstrate that AI-assisted development can produce high-quality, durable improvements when paired with thorough validation.
Strategic Ambition vs. Incrementalism
While some argue that we should be less ambitious to avoid failure, the most productive approach is to focus on problems where the impact is direct and the feedback loops are clear.
- Identify High-Leverage Problems: Instead of simply speeding up existing tasks, look for domains where the cost of entry was previously prohibitive.
- Implement Self-Checking Systems: Even when working with black-box models, developers can design systems with consistency checks or property-based testing to ensure correctness.
- Focus on Maintainability: Avoid over-fitting code to specific use cases. The goal is to build systems that are not just fast, but also maintainable and generalizable.
The Role of Human Expertise
AI does not replace the need for human judgment; it amplifies it. The gap between what a model can implement and what a human can effectively verify is widening. As models improve, the level of expertise required to distinguish high-quality engineering from "counterfeit" code increases. Developers who possess deep domain knowledge are better equipped to steer AI agents, verify their output, and ultimately build more reliable, high-performance software.
Community Insights and Counterpoints
Discussions surrounding this topic highlight a tension between the excitement of new capabilities and the risks of unchecked AI usage.
- The Risk of Over-Optimization: Critics warn that using AI to optimize random parts of a system can lead to messy, unmaintainable code. As one observer noted, "if you have a manager who thinks there's no reason for software to be slow and he pushes people to use AI to make random parts of the software fast... Run for cover."
- The Need for Process: Many developers emphasize that shipping software is not just about writing code; it involves coordination, security, and long-term maintenance. AI can assist in these areas, but it cannot replace the human need to understand the problem space and define clear success criteria.
- The Value of Unique Skillsets: Some argue that as coding becomes commoditized, the real competitive advantage lies in finding unique combinations of skills that AI cannot easily replicate.
Ultimately, the current technological landscape offers a rare opportunity to "hill climb" on deep systems problems. By carefully designing goals and identifying salient metrics, developers can use modern AI as a powerful toolkit to build software that was previously impossible to create.
Sources
Related
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch