Code is No Longer the Source of Truth. Your Spec Is.

Artificial Intelligence

PART 1: Moving from Vibe Coding to Intent-Driven Development with Kiro

The Double-Edged Sword of "Vibe Coding"

The advent of AI-powered coding assistants has been nothing short of revolutionary. There is a distinct thrill in providing a natural language prompt to a tool like GitHub Copilot or a large language model (LLM) and watching it generate a complex function or component in seconds. This process, often called "vibe coding," is powerful for rapid prototyping and exploring new ideas. It feels like magic, allowing a developer to quickly scaffold an application or test a concept that might have taken hours to build manually.

However, this magic comes with a significant cost, especially when moving from a prototype to production-ready software. The generated code often exists in a "black box"; it works, but the underlying logic can be opaque. It may not align with the project's existing architecture, coding standards, or testing strategies. Iterating on this code with follow-up prompts becomes a frustrating exercise in context management, as the developer must constantly remind the AI of previous constraints and decisions. This approach, while fast for initial creation, creates code that is often fragile, difficult to debug, and unmaintainable in the long term. Vibe coding excels at the "zero-to-one" phase but struggles in the "N-to-N+1" reality of building and maintaining complex systems.

Meet Kiro: An IDE with an Opinionated Workflow

Kiro.dev emerges as a direct response to the inherent chaos of unstructured vibe coding.Developed by a team within AWS, Kiro is not merely another IDE with an integrated chat window; it is an "agentic development environment" designed from the ground up to bring structure, discipline, and predictability to AI-assisted software development. Its core philosophy is to transform the developer's interaction with AI from a series of ephemeral prompts into a durable, collaborative partnership.

A key strategic decision that lowers the barrier to entry is that Kiro is built on Code OSS, the open-source foundation of Visual Studio Code. This provides immediate familiarity for a vast number of developers. Settings, themes, and Open VSX-compatible extensions can be migrated seamlessly, allowing users to retain their customized environment. This choice allows Kiro to focus its innovation not on reinventing the text editor, but on its truly unique value proposition: a new, opinionated workflow for working with AI agents. Kiro's power lies in its structured approach to turning high-level ideas into production-ready code, a process it calls spec-driven development.

My First Project: Building a Hostel Management System

To truly test Kiro's capabilities, I decided to build a greenfield project from scratch: a comprehensive Hostel Management System. This is a non-trivial application with multiple modules, user roles, and complex business logic—the perfect candidate for a structured, spec-driven approach.

My workflow began outside of Kiro. I first used ChatGPT to generate a detailed Product Requirements Document (PRD), outlining the high-level features for modules like user management, room allocation, billing, and inventory. This gave me a solid, well-structured starting point.

Then, I moved into Kiro and initiated a "spec" session. Instead of a simple prompt, I fed Kiro the entire PRD I had generated. This is where Kiro's unique power became apparent. It didn't just generate code; it begaqn a collaborative planning process. A key moment was seeing how Kiro parsed the large PRD and intelligently broke it down into distinct, organized modules, creating a separate spec for each one.

For each module, Kiro created a directory containing three structured Markdown files: requirements.md, design.md, and tasks.md. This was the revelation: Kiro transformed a comprehensive product document into a set of concrete, editable, and version-controllable engineering specifications.

Part 2: The Paradigm Shift: Taming AI with Spec-Driven Development

From a PRD to an Executable Plan

Building a complex application like a hostel management system from a text document is a recipe for ambiguity and scope creep. Spec-Driven Development (SDD) provides the necessary bridge between a high-level product vision and a low-level implementation plan. It shifts the development process from a "code-first" to an "intent-first" model, where the primary artifact is not the initial code but a shared, structured specification that serves as the source of truth for both the human developer and the AI agent.

The Anatomy of My Hostel Management Spec

Kiro's implementation of SDD codified the mental model of a senior engineer into a tangible, three-part workflow for each feature.

requirements.md (The "What")

This file served as the foundational contract. Kiro took the PRD and broke it down into user stories and acceptance criteria for each module. For the "Room Management" module, it generated precise requirements using the EARS (Easy Approach to Requirements Syntax) notation.

  • User Story: As a hostel administrator, I want to view a list of all rooms with their current occupancy status, so that I can manage room allocations efficiently.
  • Acceptance Criteria: WHEN the administrator navigates to the room management dashboard THEN the system SHALL display a list of all rooms.
  • Acceptance Criteria: WHEN a room is occupied THEN the system SHALL display the name of the student assigned to it.

This structured format provided the AI with unambiguous, machine-parseable instructions, creating clear, testable acceptance criteria before a single line of code was touched.

The Feedback Loop: Refining Requirements with UI Mockups

With a solid set of initial requirements, I took the process a step further. I used the user stories and features described in the requirements.md file as a prompt for a UI/UX design tool, UXPilot. This generated visual mockups for the application's screens, like the main dashboard.

This visual feedback was invaluable. Seeing the dashboard design made me realize I had missed a key requirement: a "Quick Actions" section for common tasks. I then went back into the requirements.md file in Kiro and manually added a new user story for this feature. This iterative loop—from text spec to visual mockup and back to text spec—allowed me to refine and solidify the requirements with much higher confidence.

design.md (The "How")

Once I finalized the requirements, Kiro generated the technical blueprint in design.md.This document proposed a complete technical architecture, including data models for

Student, Room, and Booking, REST API endpoints, and the component structure for the Angular frontend. It even included data flow diagrams to illustrate key interactions.

tasks.md (The "Plan")

With the design approved, Kiro generated the final artifact: a granular, step-by-step implementation plan in tasks.md. The entire "Room Management" feature was broken down into discrete, trackable tasks, each linked back to the requirements and design.

This one-task-at-a-time execution model kept me in complete control, transforming a complex application build into a series of small, manageable, and easily verifiable steps.

Part 3: The Control Panel: A Practical Guide to Kiro's Agentic Toolkit

Building a production-ready application requires more than just a plan; it requires enforcing consistency, automating repetitive work, and giving the AI access to the right tools. Kiro's agentic toolkit—Steering, Hooks, and MCP—provides the control panel to manage this.

Persistent Context with Steering and llm.txt

Steering files are Kiro's mechanism for providing the AI with "persistent knowledge" about project conventions. For the hostel management system, I created steering files specifying the use of Angular Material for UI components and defining the project's REST API standards.

Furthermore, Kiro supports framework-specific context files like llm.txt for Angular. By downloading and including this file in my project, I provided the AI agent with a rich, pre-packaged set of best practices and conventions specific to modern Angular development, ensuring the generated code was idiomatic and high-quality without needing to specify these details in every prompt.

Extending Kiro's Brain with MCP Servers

The Model Context Protocol (MCP) is an advanced feature that allows Kiro to connect to external tools and APIs, effectively extending its "brain." This is crucial for real-world development where the AI needs to interact with the command line or other services.

I configured two key MCP servers for this project:

  1. Angular CLI MCP Server: This gave the Kiro agent direct access to the Angular CLI. When I executed the task "Initialize new Angular project," Kiro didn't just write the code; it used the MCP server to run ng new hostel-management with the correct flags, just as a human developer would.
  2. Context7 MCP Server: This provided a more general-purpose context of all the libraries and their documentation to be used as a toolset for the agent to use throughout development.

These servers transformed Kiro from a code generator into a true agent that could interact with my development environment to accomplish tasks.

Part 4: Case Study: Building the Hostel Management System

With the spec defined, steering files in place, and MCP servers configured, it was time to execute the plan. I worked through the tasks.md file for the initial project setup and the core modules.

  1. Task: "Project Setup: Initialize Angular 20+ project with standalone components, TypeScript strict mode, and SCSS styling." I clicked "Execute." Kiro, using the Angular CLI MCP server, ran the necessary commands and configured the tsconfig.json and angular.json files according to the design spec. I reviewed the diff, confirmed it was correct, and approved.
  2. Task: "Implement POST /api/students endpoint." Kiro generated the server-side logic for adding a new student, including data validation and database insertion, adhering to the API conventions defined in my steering file.
  3. Task: "Create StudentRegistrationForm Angular component." Kiro generated the component's TypeScript, HTML, and SCSS files, correctly using Angular Material components as specified in the steering context.

This granular, step-by-step process provided complete control and transparency. The final result was a clean, consistent, and well-architected foundation for the application, built not from a chaotic series of prompts but from a disciplined, architectural exercise where the AI handled the implementation details under close human supervision.

Part 5: The Horizon: SDD and the Evolving Role of the Software Engineer

From Coder to Architect: The Agentic Revolution

Working with an agentic IDE like Kiro fundamentally changes the nature of the developer's role. The cognitive load shifts away from the minutiae of syntax and boilerplate and toward higher-level, architectural concerns. The developer's primary activities become:

  • Problem Decomposition: Breaking down complex business requirements into clear, unambiguous specifications.
  • Architectural Design: Making critical decisions about system design, data models, and technology choices.
  • Critical Review: Evaluating AI-generated designs and code for correctness, efficiency, and maintainability.
  • Orchestration: Guiding the AI agent through a structured implementation plan and orchestrating various tools (like ChatGPT and UXPilot) to create a cohesive workflow.

In this model, the developer acts as the senior architect, while the AI agent functions as a highly proficient junior developer that requires clear, explicit direction.

Conclusion: Why Intent is the New Source of Truth

For decades, the guiding principle in software engineering has been that "code is the source of truth." The running implementation was the ultimate arbiter of what a system actually did. The rise of agentic AI is forcing a fundamental re-evaluation of this principle.

When an AI agent can generate, refactor, and rewrite vast amounts of code based on high-level instructions, the code itself becomes more transient. The constant, the durable artifact, is the human intent behind it. In this new paradigm, the specification is the new source of truth. A clear, structured, version-controlled expression of intent—captured in artifacts like Kiro's spec files—becomes the most valuable asset in the development lifecycle. It is the blueprint from which code is derived and the anchor to which all future changes are tethered.

Tools like Kiro are at the vanguard of this monumental shift. They provide the first glimpse of a future where a developer's primary value lies not in their ability to write flawless code, but in their ability to articulate a flawless plan. Mastering these new patterns of structured collaboration and intent-driven development will be the defining characteristic of the next generation of elite software engineers.

Author : Natraj Thuduppathy

Share this:

Take a look at the lastest aricles

CloudIQ AI Engineering Series — Part 5 Most teams picked a model and called it a day. The teams shipping faster and spending less are learning that model selection is only one part of the equation. In a multi-agent pipeline, orchestration design can matter just as much — and is often overlooked. There's a bill […]

The QA report came back clean.  The developer had migrated an approval workflow module from a legacy stack to a modern stack. Parity check passed. Functionality verified. The page looked right, behaved right, and matched the spec.  The bug report came in the next day. Data entered in that module wasn't propagating correctly to a […]

Six months into AI-assisted development, something predictable happens.  The team has gotten good at prompting. The spec workflow is running. Output quality is solid. Then the codebase crosses a threshold — too many files to reference manually, too many interdependencies to hold in a session — and the approach that worked at month two stops […]

Let’s shape your AI-powered future together.

Partner with CloudIQ to achieve immediate gains while building a strong foundation for long-term, transformative success.