The Tech Stack Selection Dance in the age of Generative AI
Managing the "Paradox of Choice" and moving towards the highest level of abstraction for GenAI application development
In my previous post, My Yearly Tech Stack Review, I shared the technologies currently on my radar for exploration and possible use in upcoming personal projects. This year, supporting Generative AI workflows is the core focus that ties together my other choices.
One of my objectives with this tech stack is to have a modular set of components that I can use at the highest level of abstraction possible. With so many tools and frameworks evolving around Generative AI, my aim is to create a stack that can easily adapt to the rapid changes in the ecosystem—something both robust and flexible. Ideally, I want a foundation where I can focus more on exploring concepts and less on spending time wiring systems together and learning new syntax and semantics. After all, natural language is essentially the latest programming language.
I suggested that I felt confident in my research on each layer of the proposed stack, having settled on the final contenders. However, after digging in further, I've reassessing that assertion—I'll revisit this point at the end of the post. For now, I'll review the stack layers I'm currently working with or planning on using:
🟢 Continue 🔴 Stop 🟡 Explore
Swift
🟢 Mobile Development (my bread and butter)
Swift and iOS development is a given no matter where my Generative AI explorations go. It is at the heart of my day job. That being said, Apple Intelligence and the evolution of Siri Intents that will turn apps into Retrieval Augmented Generation (RAG) data sources for Siri is something that I'm keenly interested in exploring more this year.
Ruby on Rails
🔴 Full-stack Web Development / CMS
This has been my default web stack for nearly a decade, and I've always appreciated its conventions and full-stack coverage. However, the ongoing changes to the JavaScript layer, along with attempts to avoid it, have increasingly become a long-term liability. Now, the approach is to embrace JavaScript, especially since other tools I want to leverage depend on it.
Strapi
🟡 Headless Content Management System (CMS)
I need a CMS to replace my custom-built Rails solution, and I was looking for one that offers advanced capabilities for managing content hierarchies and more complex relationships. After exploring several options, Strapi checked many of my boxes during the initial review. The fact that it is open source was another influencing factor.
Next.js
🟢 Web Application Framework
This is my chosen replacement for Ruby on Rails. While there are lots of options available, this one suits my style well. I’ll also integrate Prisma as my new Object Relational Mapping (ORM) layer to help encapsulate data models and database interactions. Additionally, Vercel's (the authors of Next.js) hosting and service add-ons provide a complete end-to-end platform, allowing me to focus on development rather than infrastructure management.
FastAPI
🟡 Python-based API Framework
I've only worked with Python a bit over the years, so this is mainly an opportunity to revisit it. Given its ubiquity in the Generative AI space, the general exposure has value. While somewhat redundant given Next.js's API capabilities, I found a reference architecture on Vercel's site that allows combining a Next.js app with a FastAPI service within the same codebase, so that should be fun.
LangChain & LangGraph
🟡 LLM Application Framework & Agentic Workflow Orchestration
For my LLM-backed application development needs, this is where I'll begin. They offer both JS and Python versions, providing flexibility in case I need to integrate tools that may not be supported in both languages.
Postgres
🟢 Relational Database and Vector Store
I'm not ready to abandon my preference for ORMs and relational databases, so I'll continue using Postgres for now. Since Postgres also has vector store capabilities, I'd prefer to avoid adding another tool and give it a try in this new LLM-backed application space. I'm actually more interested in graph databases and RAG at this point, so I'm hoping Postgres's vector store capabilities will meet my initial needs.
Neo4j
🟢 Graph database
I haven't yet deeply explored graph databases, but given my experience with highly related data and CMSs, I'm optimistic about their potential utility. Specifically, in the Generative AI space, I'm particularly interested in using Neo4j as my graph database and incorporating it into agentic workflows using RAG.
That covers the overview of the core elements of my new proposed stack. The next part is to actually start pulling together the shell of an app that stitches them all together and get it up in the cloud. Before I do that though, my thought was that I should stand up a CMS so I’ve got a place to keep my content as we hit the ground.
The Rubber Hits the Road: Let’s get building
When I initially chose to explore the Content Management System layer from my selected tools first, I quickly realized I might need to reassess my priorities.
After running into a few issues with library dependencies while setting up the local development environment for Strapi, I had a bit of a reality check. I decided to step back from Strapi and explore some other CMS options, each offering different levels of abstraction from a developer's perspective. I reviewed platforms like Wix, Storybook, Builder.io, and Contentful—each with its own idiosyncrasies, learning curves, and specific features aimed at different audiences.
So that begged the question: Does a CMS fit into my desire for a streamlined, abstracted workflow for delivering GenAI backed applications? I do need to manage content, but learning another complicated tool now seems like a distraction.
Instead of a CMS, I’m abstracting a level and exploring a low-brow admin interface for Next.js apps. I think Next Admin might do the trick. I need to manage basic content at this point, not a full ecosystem of content managers, users and another standalone application. I also came across Novel, a WYSIWYG web editor that, teamed up with a basic admin, lets me handle the basic content needs I’ve got at the moment.
Thus ends my first tangible step forward on this adventure.
I’ve actually already got a Next.js app fired up with FastAPI swizzled into it along with a Postgres database, all comfy and cozy over on Vercel. I have one more tool to explore before I go full steam ahead, but I’ll save that for another post.
These are not the Tech Blog Posts You Are Looking For
I should mention that I don't plan to posting many in-depth articles about the technologies I'm using in my GenAI application development journey.
I believe that application development is fundamentally changing now, and will grow less and less familiar in the next couple of years. My writing on this site will focus on exploring that shift—from the syntax and semantics of programming languages to a future where natural language becomes the primary tool for instructing computers to achieve specific business objectives and other desired outcomes.
This is a massive paradigm shift that is also coming on a wave of research, tools, frameworks and architectural patterns that are being developed and released on a cadence that makes it nearly impossible to keep up as an engineer.
This is site is my pulling out the surfboard and riding that wave as I enter into the fourth season of my programming career.