This is how I build complete features with AI as a developer
As an independent developer and digital problem solver, I am always looking for ways to work smarter, more efficiently, and with greater precision. Anyone following developments in Artificial Intelligence knows that AI is now capable of generating vast amounts of code. However, if you think you can simply fire off a quick prompt and "vibe-code" your way to a solution, you’re in for a rude awakening. Often, this approach results in disjointed snippets of code that don’t fit into an existing architecture—or, worse, it leaves you trapped within a rigid, proprietary ecosystem.
In my view, the key to success isn't just a random prompt; it lies in thorough preparation, the right supporting tools, and maintaining independence. By integrating AI into a well-structured, controlled workflow, I can now build entire features and modules within a custom-tailored architecture—without compromising on quality or risking vendor lock-in.
What does this setup look like under the hood? Here is my approach.
LLM-agnostic development with PhpStorm and Junie
To maintain full control over the tools and AI models I use, I avoid closed platforms that tie me to a specific vendor. Instead, I prefer working within my trusted environment PhpStorm combined with Junie. This allows me to switch flexibly between different Large Language Models (LLMs) without being tethered to a single ecosystem. This way, I retain complete authority over both my codebase and the AI technology I choose to implement.
Context is king: Skills and the Gitnexus MCP server
Naturally, an AI model doesn't inherently know your codebase. To address this, I employ smart safeguards within the development environment:
- Specific Skills: I utilize predefined skills that precisely define the technical composition of my project, the standards I adhere to, and the architecture being followed.
- Gitnexus MCP Server: By leveraging the Gitnexus Model Context Protocol (MCP) server, the LLM gains a precise understanding of code dependencies and the direct impact of any change and eliminating guesswork in favor of deep structural insight.
Structured instructions via the OpenSpec framework
Once the context is clear, the instructions for the task itself follow. To prevent the AI from veering off course, I ensure that instructions are drafted—either by the AI or by me—according to the OpenSpec framework. This results in crystal-clear, well-defined specifications that detail exactly what needs to be built and the constraints that must be met.
Quality assurance: Automated checks and human validation
Generated code must be rock-solid. To maintain code quality, I have the AI agent immediately deploy standard tools, such as running automated unit tests and performing code-quality checks.
Furthermore, the human element remains the most critical link in the process. In every instance, I personally conduct a thorough review and validation before an agent or tool is permitted to proceed to the next step. The AI serves as a powerful engine, but I remain firmly in the driver’s seat.
The result: Bespoke solutions delivered with speed—without vendor lock-in
True software development with AI extends far beyond simple prompting. By strategically deploying AI within a flexible, well-considered development pipeline, I can deliver complete features and modules—built on a custom architecture—that are high-quality and robust from the very start. No hassle with endless vendor lock-ins or glitchy code, just pure control, scalability, and speed.