AI lets you move down the stack, not just up
The initial stack
Building a good foundation for new software projects is critical for maintainable software. The big AI companies want you to think you don't even have to open a code editor anymore, but having AI do the initial setup still feels a bit messy and is a recipe for a vibe coded mess. But if you can create a well defined foundation for AI to build off of, AI is fantastic with replicating the existing code to new features. Today I barely write new CRUD routes as Claude can do all of the simple scaffolding work to be reviewed by a developer. When setting up a new app I'm now thinking about how to structure everything in a repeatable way so AI can quickly add a new feature by copying the existing files.
This includes documenting:
- How to add a new DB table/column
- How to create any DTOs (data transfer objects)
- How to manage any permissions
- How to register new routes and endpoints
- And how to consume that endpoint
Using backends that are strongly typed and can generate corresponding Typescript types for the frontend are critical for LLMs to be able to resolve data flows and check issues at compile time as they develop new features. When I was first getting into development, I was using higher level languages to make simple backends in both Python and Typescript because it was simple to read, write, and share types within a monorepo, but with the current state of AI, having loose types is now more of a liability than just being able to develop fast in a simpler programming language.
Moving up the stack
If you have been following AI you have probably heard about developers "moving up the stack" and moving into more of an orchestrator role for agents, rather than directly coding in their IDEs. For the most part this is turning out to be true. In a well defined system for new CRUD-like features, the AI is getting incredibly good at adding all the boiler plate needed to go from database -> backend -> frontend, and then back when needing to update data. Designs still need some work and hand holding but by and large it will get some version of creating and viewing data wired up very quickly. From there you can focus on directing the AI to make minor tweaks or just go in and make them yourself. Earlier this year, this would not have been the case, but after slowly integrating more and more AI into my workflows, it does seem to be moving this direction. The critical role of experienced software developers now is to make sure that the AI is not generating code slop, and that the code that it is generating meets your code and security standards during review.
Moving down the stack
While many people are saying "just move up the stack" and let the AI manage your code, this is also the perfect opportunity to move down the stack to be able to build highly performant systems.
While my backends used to focus on higher level languages, I'm looking more and more at lower level languages like Golang and Rust with typegen and rpc connectors to continue keeping the full stack type safe. While I may not know the languages as intimately as Typescript, and it takes longer for me to write by hand, with AI doing a huge majority of the work after the initial server setup, it can take it and run just as fast as it would develop in Typescript. This can lead to being able to build hyper performant systems with minimal additional investment if you are already a decent software developer.
Looking towards the future
This is an exciting time and opens up more opportunities in both my day job and personal projects. Harnessing AI, I can take on much more ambitious projects while also developing better and faster products in a shorter amount of time. By also not being stuck in the weeds, it's possible to focus more on building better user experiences that would typically not be possible in the same time constraints. While the initial project setup (sometimes with AI assistance) still needs to be mostly developer led, once it's at a point where everything looks good for the first couple endpoints, I feel it's safe to hand it over to AI and let it code almost 80-90% of the CRUD workflows by feeding it simple specs with the requirements for backend and frontend functionality.