A Future of Software Engineering

Ultimately it comes down to taste.

— Steve Jobs

AI will definitely revolutionize the way we build and use software, but in which ways? I will share my thoughts based on some recent observations and my own experiences.

Here are two facts about the current state of AI coding agents:

  • They have the ability to finish a project end to end without human intervention (only a minimal initial prompt is needed with the help of Ralph Loop), but we need to grant them the permission to do arbitrary operations to maximize their capabilities. Claude’s C Compiler (CCC) is a good example of how capable these agents are — they can build a complete C compiler from scratch (not really because they use existing test suits as a very good source of oracle but still impressive) and it can compile some real world C projects like Linux kernel, SQLite and Doom.
  • However, projects fully automated by AI agents are difficult to reason about and maintain, and they can easily make poor design choices. Once an agent generates a large codebase from scratch, substantial refactoring becomes impractical and effectively requires starting over with human intervention. CCC also shows evidence on this point: CCC-compiled sqlite can be 158,000x slower in some cases and the author also mentioned that it’s really hard to add any new features to it as every new change will break the existing code like a whack-a-mole.

Based on these points, I think there will be two types of software engineering in the future:

  • Personalized Software.
  • Taste-Driven Development.

Personalized Software: everyone will be able to create and customize their own software very easily in the future. This type of software is not meant to of high code quality or even reusable. They are created to meet specific needs and solve specific problems. People can use their own user experience to iterate their own software and even fix bugs on the fly whenever they encounter unwanted behaviors. This can also be great for privacy as many tools can be replaced by personalized software running locally (protecting privacy from LLM providers is another serious issue tough). For that to happen, we still need two prerequisites: 1) cheap enough tokens, and 2) sandboxing techniques to isolate both the agents and the code generated by them. The first one is straightforward. As for the second one, we cannot trust the agents as we need to grant them great permissions to get the best out of them, and we cannot trust the code generated by them as we do not know what the code is doing under the hood because no one reads it. Both should be sandboxed and we need to provide them a secure API layer for them to interact with the environment (e.g., persistence, networking, etc.).

Taste-Driven Development: great software is not only about coding, it is about providing a great user/developer experience. Designing and architecting software to achieve a clean interface, maintainable codebase and high performance is the difficult part; and coding is just the act of interpreting those ideas into whatever your favorite programming language’s syntax and semantics. It’s a good thing that AI can greatly help with the coding part so that we can focus more on the design part. As I mentioned above, AI’s average design capability is already sufficient for many everyday scenarios. But in other contexts—such as infrastructure software deployed at massive scale, or work driven purely by human curiosity and creativity—I believe AI will serve as a strong companion rather than a competitor.

Related reading: