Everything started with a model capable of predicting the next token in a sequence of tokens. The neural network able of doing so has been trained on the Transformer architecture made famous by the paper āAttention is all you needā.
Then, researchers scaled the capabilities of these networks through more data and more compute. We reached a ceiling. We basically found out that improvements in these systems are not linear, but require exponentially more data and compute. As per today, with the current architecture, we donāt have enough data and compute to do so much more progress.
Ā
Within a few years though, we found out a lot of ways to improve and optimize these models. Iām not a ML Engineer, so Iāll not go through the details, but I want to give the insights for a couple of techniques which are currently used and made the models better:
Chain of Thought (CoT) is a prompting technique that encourages a model to generate step-by-step reasoning or intermediate explanations before delivering a final answer. There are several forms of CoT prompting, but the simplest approach is to include instructions in the prompt such as, āPlease reason through this problem and explain your steps before giving the answer,ā which guides the model to articulate its logic prior to responding.
Mixture of Experts: several specialized sub-networks (āexpertsā) handle different parts of the input, and a gating network decides which expert(s) to activate for each input, enabling efficient, scalable, and accurate processing.
Knowledge Distillation: In this process, a large pre-trained "teacher" model transfers its knowledge to a smaller "student" model, enabling the smaller model to retain much of the accuracy of the larger model while being more computationally efficient.
Ā
These techniques improved quite a bit the models and are still showing signs of improvements. Researchers also use fine-tuning, reinforcement learning and other techniques to still improve model accuracy on our questions.
Ā
At this point, LLMs are able to reasonably write decent code. This is just the starting point though. While people used LLMs, we found out something interesting: the prompt and the context act as inference-time learning! So we can drastically change and tweak the output of the model, based on the context we pass. This has been proven by an article released in July 2025.
Ā
Now we can think āalright, my network can learn at inference-time for free, so I can just give it more and more context and the results will work better for my use caseā. Unfortunately, reality is more complex. There are two major limitations:
Context window is limited
Even with a long context window (letās say 1M tokens), another paper found out that, the more information we put in the context, the worse the results are as. the LLM āstrugglesā to retain all the information.
Ā
Therefore, unfortunately, we cannot just max out the context window, pass all our data and hope that the results will be better. Also, given that we usually pay per token, reaching the ceiling of our context window is also very unpractical from an economic perspective.
Ā
We need to find a set of techniques which allows us to simultaneously maximize the amount of context we provide to the LLM so that we improve the performances on the current task, and minimize the amount of context we provide, so that we donāt affect LLM performances and the costs are kept under control.
Ā
These techniques are the basis for āContext Engineeringā. Context engineering is the art&science needed to retrieve the relevant context, so that we can allow the LLM to correctly perform the task we need, while maintaining the context size under control.
Ā
The rise of vibe coding
One of the best scientists of our time does a tweet, Internet explodes and a new term is born.
People are fascinated: it looks like Software Engineers are cooked! Even my mom can now build software system, right?
Ā
Interestingly enough, it looks like the attention span of people in 2025 is not even a single tweet. If we read everything, especially in the second part Karpathy explains that this is not really coding, itās something that feels like it and produces artifacts that youād otherwise generally with coding, but itās definitely not coding.
Ā
Tools like Lovable, Bolt, v0 and so on emerged very quickly. People started playing with them and using them. These tools target non-developer. This is not what we really care. We care about tools built for devs by devs.
Ā
In a small amount of time we now have:
Cursor
Codex
Copilot
Claude Code
Gemini CLI
Windsurf
The list is so long that I donāt want to to spend so much time. You got the gist: we now have a lot of tools which will help developers to write code.
Ā
These tools are not just models: they are what we call Agents. An agent is a software system, which wraps a model (Gemini 2.5, GPT-5, Sonnet-4.5 etc). This agent has a few things:
Access to tools like fetch, grep, terminal usage, filesystem, MCP servers
A way to inject context (through memory with RAG, rules, commands, workflows and much more, depending on the tool)
A system prompt and a definition of the agent like how it should behave and so on. Please note that all the content that goes in the agent definition, then becomes a part of the agent context.
Ā
Software engineers quickly figured out that in complex production systems vibe coding (just writing what you need and hope for the best) just doesnāt work.
Vibe coding falls short on security, testing and so many aspects. It also focuses on just writing code that barely works, not creating maintainable systems.
There has to be a better wayā¦
Spec-driven AI-development comes into play
Itās all about context, tools, and implementing AI in the right phases of the SDLC.
The idea behind spec-driven development is that we donāt just ask the AI to do something. We start with an high-level goal, we break it down into tasks, analyze the architecture, create stories and then the AI will work on a task which has been refined together with a human, small enough to fit into a PR and relatively easy to implement.
Ā
There are several reasons why this approach works much better.
The first is that it introduces a much stronger Human-in-the-Loop (HITL) component. Instead of the human simply defining the high-level goal, they actively participate after each phase, reviewing artifacts generated by the LLM such as architecture diagrams, user stories, and other deliverables. This ensures continuous alignment between what the LLM produces and whatās actually needed.
This process helps minimize drift. The key idea is straightforward: the more guidance we provide to the LLM throughout the process, the better it follows our intent. In contrast, when the LLM is left to operate entirely on its own, for example, with a single zero-shot prompt, each additional round of iteration performed by the agent itself increases the likelihood that the model will go off road and produce results that diverge significantly from the desired implementation.
Ā
The second main reason Iāve found is that interacting with the agent naturally forces us to think more deeply about the problem. Through this process, we often uncover edge cases, potential improvements, and flaws in our initial approach. The AI, therefore, isnāt just a passive executor of our instructions: it becomes a copilot, helping us reason more critically and explore the problem space from new angles. This dynamic has repeatedly helped me identify issues and insights I likely wouldnāt have discovered on my own.
Ā
Ā
Currently, there is no single approach to spec-driven design. As this is a relatively new approach, multiple vendors are investigating different routes. As the market is crowded with tools and approaches, Iāll briefly discuss some of them which Iāve found to be interesting.
Even if these tools and approaches have different workflow and offer different capabilities, there is a common ground:
The vast majority of them saves intermediate artifacts (as plans, requirements, design documents, architecture) as Markdown files.
There is usually a way to inject more context, as rules, commands, persistent knowledge and so on. This allows the model to know better our codebase and plan accordingly using our coding standards, best practices and preferences.
Code indexing is performed, so that when needed, the tools can grep the needed code to follow a pattern, look into a specific file and get references to required functions
HITL is required from the requirements document creation to the commit. Each step generates text artifacts which needs to be reviewed. Then the code needs to be reviewed to ensure that it aligns with the expectations before opening a PR.
Use it when you need it and donāt overcomplicate things: the cool things about these approaches is that youāre not locked in. Youāre still 100% responsible for the code you write, so if you want to write a feature without AI, or if it doesnāt make sense (because we know we will implement that feature faster than using AI) we can just proceed on our own without breaking the approach.
In order to not bloat the context window, itās usually a good recommendation to open a new chat every time weāre starting a new operation
Kiro
Kiro is an entire IDE (a VSCode fork) which offers a full UI to implement a spec-driven flow. The key idea is that, instead of starting from a chat window where we ask the model to perform a coding task, we create a requirements spec, saved as markdown, then from the spec we generate a design document, and from the design document, we create a set of tasks.
Ā
During the generation of all these artifacts, the system and the human work together to refine everything up to the point where the tasks are well defined and implementing them is relatively straightforward for the model.
The human can define what task is implemented and in what order thanks for a simple, yet effective UI.
Spec-kit
Spec-kit works through a CLI and can be used with a lot of different agents (differently from Kiro where you end up using their IDE). The idea is relatively simple: you create a spec, then an implementation plan, you break down the tasks and then implement each one.
All the specs are saved in a folder and can be versioned.
BMAD
BMAD is more complex and has a learning curve. Differently from Kiro and spec-kit, BMAD offers the usage of multiple agents, each one with multiple workflows. The BMAD general workflow is similar to the others, but as itās more powerful itās also more complex to learn and use correctly. BMAD is more a full E2E approach rather than a development methodology. With BMAD we do everything from the initial PRD to the actual implementation.
BMAD also allows to build custom agents, which makes it perfect to be tailored to custom needs.
BMAD vs. Spek Kit vs. Open Spec: Which AI Coding Methodology is Best?
Just typing vague prompts at an AI chatbot, or "vibe-coding," is a dead end for any serious software project. It leads to poor output, lost context, and unmaintainable code.
A new wave of structured AI development **methodologies** is here to fix that. But are they any good?
I decided to find out. I took one projectābuilding a landing page for The Gray Cat channel with Next.js, Tailwind, and three live API integrationsāand built it three separate times using three competing **approaches**: the heavyweight BMAD method, GitHubās Spek Kit, and the fast-moving Open Spec. The results were shocking: one took eight hours, and another took just seven minutes.
In this video, I break down the entire process for all three **approaches**: the setup, the philosophy, the painful, slow parts, and the final results. By the end, you'll know exactly which one is right for your project and which one might be a colossal waste of time.
*[ LINKS ]*
- *BMAD:* [https://github.com/bmad-code-org/BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD)
- *GitHub Spek Kit:* [https://github.com/github/spec-kit](https://github.com/github/spec-kit)
- *OpenSpec:* [https://github.com/Fission-AI/OpenSpec/](https://github.com/Fission-AI/OpenSpec/)
*[ TIMECODES ]*
- 00:00 - Intro: The Problem with "Vibe-Coding"
- 01:10 - The Project & Tech Stack
- 02:09 - Method 1: The BMAD Beast (8 Hours)
- 04:02 - Method 2: GitHub's Spek Kit (Under 2 Hours)
- 05:47 - Method 3: The Open Spec Speedrun (7 Minutes)
- 07:28 - Head-to-Head Comparison
- 08:55 - Conclusion: Which One Should You Use?
- 10:44 - Outro
---
The Gray Cat: Where AI meets code. Your essential guide to building next-generation software with modern AI tooling. Master AI IDEs, structured development, and practical AI app development. Welcome to the future of coding.
Deciding what to use definitely depends on your use case and needs. This approach is also similar to what engineers are doing at FAANG companies to leverage AI correctly:
Ā
Apart from global context optimizations (like rules and skills), some companies are also developing tools to perform local context optimization. For example, if in our codebase weāre using a specific version of a library, the model might not be trained on that library and therefore hallucinate the surface APIs or not use the best practices. Thatās why companies like Tessl are building tools which allow our agent to work better with our codebase, based on the libraries and frameworks weāre currently using. It all goes down to improving the context quality in multiple ways!
Current limitations and future
Spec-driven AI as per now itās still evolving quite fast, the tools are not stable and there are breaking changes.
Ā
One first limitation is the usage of these tools within the SDLC.
Ideally, at some point we will have something which better integrates all the aspects of the SDLC: our IDE will be able to ātalkā to our PM tool (as Jira, ADO, etc). The breakdown of the stories will be AI-assisted as well in a unified workspace. The discovery phase will happen in tools like Miro, which will then generate complete requirement documents after the product discovery phase.
Then, after the AI writes code, we will be able to perform automatically code reviews on GH, test our code and ship it to production with AI connected to our observability stack to perform preemptive alerting and logs analysis.
This will be available at some point in the near future as vendors are already starting to expose these features.
Ā
Currently, there are multiple tools scattered across the ecosystem and weāre starting to see protocols to let them communicate (as MCP, A2A).
Ā
Other limitations are inherited from the models (hallucinations, accuracy, context window, reasoning capabilities, tool usage), but ML researchers and engineers are working to overcome them by working on multiple fields.
Ā
Month after month, the surface of the tasks we can tackle with AI becomes wider and wider with the hope that we will build better systems in less time, with less stress and more quality.
Ā
Software Engineering is changing again, and maybe faster than ever. People are excited and scared of losing their job at the same time. I strongly believe that this evolution will be net positive even if we have a lot of challenges ahead of us.
My recipe to survive and grow in this environment is the same: be curious, try to push yourself to the edge of the knowledge in this field, build something that makes sense and, most importantly, enjoy the journey.