Skip to main content
🤖 Running agents for a team, not just yourself? Get an independent review of identity, secrets, failover, observability and governance. Assess your agent platform
Luca Berton at the Datadog office in Amsterdam, in front of the Datadog User Group Amsterdam opening slide and rows of yellow chairs
AI

Datadog User Group Amsterdam 2025: Spec-Driven Development

Datadog User Group Amsterdam, September 2025: Brent McLean on platforms you inherit, then Gunnar Grosch of AWS on moving from vibe coding to specs in Kiro.

LB
Luca Berton
¡ 10 min read

On Thursday 25 September 2025 I went back to the Datadog office in Amsterdam for the Datadog User Group Amsterdam meetup. I’d been there a year earlier for the user group’s GenAI evening with AWS and Cloutive. This time there were two talks. The first was about running engineering at a company built from acquisitions. The second was AWS’s case for moving from “vibe coding” to spec-driven development, with a live demo of Kiro.

This is a throwback built from my photos and a few short video clips, so I’ve stuck to what was on the slides and what was said on stage.

Luca Berton taking a selfie at the Datadog office in Amsterdam, with the Datadog User Group Amsterdam opening slide on the projector and empty yellow and black chairs

Before the doors opened: the Datadog User Group Amsterdam slide and a room still waiting for its audience.

The agenda

The organisers opened at 18:30. Talk 1 was by Brent McLean, starting at 18:40, and Talk 2 was by Gunnar Grosch, from 19:30 to 20:15. Networking and drinks followed until the doors closed at 21:00.

The Datadog User Group Amsterdam Meetup agenda slide: kick-off by the organisers, Talk 1 by Brent McLean, a quick break, Talk 2 by Gunnar Grosch, networking and doors closing at 21:00

The talks slide showing Brent McLean's talk on operational excellence in an inherited environment and Gunnar Grosch's talk From vibe coding to spec-driven development

The running order and the two talk titles, with the Datadog User Group logo in the corner.

Talk 1: operational excellence in an inherited environment

Brent McLean’s talk had a long title: “Chasing Operational Excellence in an Inherited Environment: Knowing What Good Looks Like Doesn’t Always Make It So”. The slide introduced him as ex-CPTO at eBay and Group CTO at AVIV Group.

He started with the eBay Classifieds Group (eCG) background. Classified ads businesses, he explained, are hyper-local. Many started as a paper product that moved online, and the market leader in a country often has 15 or 20 years of history. Through acquisitions you end up with about ten very similar businesses, each with its own tech stack. His job grew from re-platforming one of them into a group role across roughly ten businesses around the world, with an obvious question: do you move them all onto one platform?

Brent McLean in front of the slide eCG - Multiple Product Lines on a Global Platform, showing Horizontal, Motors and Commercial product lines on top of shared capabilities and infrastructure

“eCG - Multiple Product Lines on a Global Platform”: thin product lines on top, shared capabilities and infrastructure underneath.

The eCG slide was his answer, drawn as a platform. Three product lines sat at the top: Horizontal, Motors and Commercial. Each had its own web, iOS, Android and API front ends. Underneath sat shared capabilities: user and identity, search, listings, category attributes, chat and e-mail communication, SEO, data products, image recognition, search intelligence and fair value. Below that was infrastructure: CI/CD, security, databases, queues, logging and orchestration. A resource-allocation axis on the left put 20% against the product lines and 80% against the capabilities and infrastructure. The diagram was also split into commodity and differentiating parts.

His other point was one I agree with. Even as a technologist, you need to understand what makes your business commercially viable. If you don’t, you’ll make decisions that seriously damage it while thinking you’re building something great.

AVIV: principles and an architecture dashboard

The second half moved to AVIV. The “Foundational principles at Aviv” slide read: one roadmap for all of Aviv, business processes and practices made global, the product and technology (P&T) teams combined into one global team, and private equity investing in the transformation. The result would be a platform that can host all Aviv brands, make it quick to integrate M&A acquisitions, and support a product that beats the competition through innovation.

Brent McLean presenting the Architecture Dashboard slide, with source-code, workforce, planning and document sources feeding a central dashboard and curated data sets along the bottom

The architecture dashboard: everything an architecture team knows about an inherited estate, pulled into one place.

This was the slide I photographed twice. A central Architecture Dashboard (“curation, aggregation, visualization, automation”) pulled in:

  • Source code: AVIV GitHub, MA GitHub, IWT TFS, IWT GitLab and IWT Bitbucket repositories, GitHub Copilot metrics and Snyk security reports.
  • Workforce data: Beebole time tracking, Workday team lines and Slack analytics.
  • Planning data: Jira tickets for planning and bugs.
  • Documents: Confluence (ADRs, diagrams) and Atlassian Intelligence AI summaries.
  • Cost: AWS Cost Explorer.

On the output side were curated data sets (a capabilities map, a legacy map, the product portfolio, AVIV brands, a developer who-is-who, AWS domain maps, an incidents index and a golden path index) and expert material such as talking points, deep dives, product reviews and expert talks.

My take: this is what “knowing what good looks like” means in practice when you inherit five Git platforms. You can’t run a golden path programme until you can see which teams, repositories and incidents belong to which capability. A dashboard built from data you already have is a cheaper first step than a reorganisation.

Talk 2: from vibe coding to spec-driven development

After the break, Gunnar Grosch, Principal Developer Advocate at AWS, gave a talk called “From vibe coding to spec-driven development”.

Gunnar Grosch next to his title slide, From vibe coding to spec-driven development, with the AWS logo

Gunnar Grosch’s title slide.

He started with a timeline called “AI is changing software”:

  • 2023, auto-complete: helping developers write code faster.
  • 2024, assistants: generating larger pieces of code and answering questions.
  • 2025, agents: completing development tasks end to end, with a human in the loop.

The slide AI is changing software: 2023 auto-complete, 2024 assistants, 2025 agents completing development tasks end-to-end with human in the loop

Three years, three modes: auto-complete, assistants, agents.

Then came the comparison the talk was built on. Vibe coding means natural language prompts, fast prototyping and intuition. The output is messy and fragile, and it’s “great for 0 → 1”. Engineering means specifications and design, reliability and scaling, testing and verification, security and maintainability. It’s “essential for 1 → N”.

Slide comparing vibe coding (natural language prompts, fast prototyping, intuition-driven, messy fragile output, great for 0 to 1) with engineering (specifications and design, reliability and scaling, testing and verification, security and maintainability, essential for 1 to N)

Vibe coding gets you from 0 to 1. Engineering gets you from 1 to N.

The next few slides explained why that still matters. “Why engineering matters” listed four properties: correct (the system behaves as expected), efficient (it uses resources wisely and scales as users grow), secure (it can withstand attacks, protect data and build trust) and maintainable (the next developer can read it, improve it and keep it alive). The “New developer skillset” slide had four items: critical thinking and verification, reading and debugging AI code, prompt specification, and ethics and system design.

“The rise of agentic AI” placed three stages on a line from more human oversight to less:

  • Generative AI assistants follow a set of rules and automate repetitive tasks.
  • Generative AI agents achieve a singular goal, address a broader range of tasks and automate entire workflows.
  • Agentic AI systems are fully autonomous, use multi-agent systems, and mimic human logic and reasoning.

The spec workflow

The core slide was one line: Prompt > requirements.md > design.md > tasks.md > code.

The Spec-driven development slide, Prompt to requirements.md to design.md to tasks.md to code, above a Kiro screenshot of a tasks.md implementation plan for a live-emoji-reactions spec

The spec chain, with Kiro showing the tasks.md of a “live-emoji-reactions” spec.

The screenshot under it showed Kiro with a spec called live-emoji-reactions. The editor had three tabs, 1 Requirements, 2 Design and 3 Tasks. The tasks.md implementation plan had checkbox tasks with a “Start task” action, such as “Set up project structure and core components” and “Implement EmojiButton component with basic functionality”. Each task listed sub-steps and ended with references to the numbered requirements it covered. The sidebar had sections for Agent Hooks (“Automate repetitive tasks with smart triggers”), Agent Steering (“Guide agent behavior and responses”, with a “Generate Steering Docs” button) and MCP Servers, including fetch, strands and two awslabs servers for CDK and front-end work.

That traceability is the point. With pure prompting, the first thing you review is the code. With a spec, you review requirements and a design first, and every task points back to the requirement it implements.

”It’s about architecture, not prompts”

The slide It's about architecture, not prompts: an agent built with Strands Agents talking sHTTP to API Gateway, which calls an MCP Server Lambda function, with a Lambda authorizer

An agent, a gateway, an authoriser and an MCP server: the spec ends in an architecture diagram, not a prompt.

The slide I liked most showed a small architecture. An Agent built with Strands Agents talks over sHTTP to API Gateway. Requests go through a Lambda Authorizer, and API Gateway forwards them to an MCP Server running as a Lambda function. The title made the argument: “It’s about architecture, not prompts.” The model writes code, but someone still has to decide where authentication happens and what sits behind the gateway.

My take: I read “sHTTP” as MCP’s Streamable HTTP transport, which is what lets you put an MCP server behind a normal API gateway with normal auth. That’s exactly the sort of decision that belongs in design.md and shouldn’t be left to whatever the agent picks.

The live demo

Gunnar then switched to Kiro itself. He explained that Kiro is built on Code OSS, so it looks familiar, and that AWS built it around spec-driven development because editor extensions only go so far. He also said the idea wasn’t AWS’s alone, since other frameworks work the same way. At the time Kiro was in preview, and it also supported plain vibe coding, which you can mix with specs.

In spec mode he asked for a user authentication system with login, logout and password reset. The model picker showed Claude Sonnet 4. Kiro generated a requirements.md with user stories, and he pointed out what was missing: “Since this is a Datadog meetup”, there was nothing about observability. A chat message later, the requirements included OpenTelemetry tracing for all authentication operations. He noted that you can review the document with your team and keep it in Git for versioning.

The design step used MCP tools to look up how to implement the tracing. He showed a fetch server, an AWS documentation server, and said you could add the Datadog MCP server too. Later in the demo, the Kiro explorer showed a .kiro folder with the spec (design.md, requirements.md, tasks.md) and three steering files: product.md, structure.md and tech.md. The generated tech.md listed TypeScript, Vitest for testing, and @opentelemetry/* packages for observability instrumentation.

Kiro on the projector during the demo, with the .kiro steering folder containing product.md, structure.md and tech.md and a Technology Stack document open in the editor

The demo project: a spec plus three steering documents, with OpenTelemetry listed under dependencies in tech.md.

A question from the audience

During the design step, someone asked whether organisations would build more of their own software now that it’s easier, and how much they’d still buy. Gunnar said companies are currently trying to build everything themselves with generation tools such as Lovable. He expected that to decline, because a lot goes wrong: in Sweden he’d noticed ads from people looking for engineers to finish projects they’d started building themselves. His answer was a mix: companies doing some things themselves, such as dashboards and tools for business decisions, and a risk of data leaks when people connect what they build to internal systems.

Kiro today

A year on, a few details from that evening have changed. Kiro left preview: AWS announced general availability on 17 November 2025, adding a Kiro CLI, checkpointing, property-based testing and team management through IAM Identity Center. The concepts from the demo match the current docs:

  • Specs produce requirements.md, design.md and tasks.md, the same three-phase flow as on the slide.
  • Steering uses product.md, tech.md and structure.md in .kiro/steering/, included in every interaction by default.
  • Hooks run shell commands or agent prompts when events happen in a session, such as running a linter when the agent saves a file.

My take: the tool matters less than the habit. The same pattern works in other coding agents too. In Claude Code, for example, it’s a written spec, a CLAUDE.md memory file and hooks, and it works for the same reason. Reviewing a page of requirements is faster than reviewing a thousand lines of generated code, and it’s the only review that catches a missing requirement, like observability, before the code exists.

Also on the table

The sign-in desk had a stack of Datadog stickers and a flyer for Cloud Native Community Days Amsterdam 2026, on 21 and 22 May, at cloudnative.amsterdam.

A flyer for Cloud Native Community Days Amsterdam 2026 on 21 and 22 May next to a rack of Datadog stickers

Stickers and a save-the-date for Cloud Native Community Days Amsterdam 2026.

Free 30-min Production AI consultation

Book Now