October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk4 min

349 Tests, Zero Module Mocks: Building Blast Radius Spec-First with Kiro

A project-specific account of building an infrastructure-change analyzer with Kiro’s requirements-to-design workflow, explicit dependencies, and property-based tests.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Scott Burgholzer says he built Blast Radius by settling its requirements and architecture in Kiro before writing implementation code. In his September 30, 2026 account, the TypeScript infrastructure-change analysis project had 349 passing tests across 29 test files and no vi.mock( calls. The approach centered on explicit dependencies for Lambda handlers and property-based tests for pure logic; the figures and runtime lessons below are Burgholzer’s report, not independently verified results.

What “spec-first” meant for Blast Radius

Burgholzer describes a sequence of requirements, design, task breakdown, and then code. He says he decided the canonical data format, analysis pipeline, and dependency-injection testing strategy on paper before implementation. The practical value, in his account, was making tests part of the planned work and reducing early refactoring of structural choices.

As an Amazon Associate I earn from qualifying purchases.

Blast Radius is intended to show the potential impact of infrastructure-as-code changes before deployment. Adapters for CDK, CloudFormation, and Terraform normalize proposed changes into a shared ResourceChange representation. Examples include mapping create, update, and delete operations to Add, Modify, and Remove, and mapping provider-specific replacement forms to Replace.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How the project was divided

The project uses npm workspaces in a TypeScript monorepo, rather than Nx, Turborepo, or Lerna. The author describes a one-way internal dependency pattern: core has no internal package dependencies, and the other workspaces consume its shared types.

#1 Best Overall
Mini AI Voice chatbot, smart Voice Assistant, Multiple AI Models, Emotional Interaction, 100+ Stickers, Suitable for Home and Office use, (Black)
  • 1. Emotional Interaction: This chatbot can recognise and respond to your emotions, offering a more personalised and human-like interaction
  • 2. A wide variety of emojis: The bot comes with over 100 lively emojis, covering a range of emotions from happy and shy to mischievous, allowing you to switch between them freely depending on your current mood
  • 3.Perfect Holiday Gift:A fun and interactive companion ideal for birthdays, holidays, and special occasions. Great for kids, friends, and anyone who enjoys smart gadgets
  • 4. Compact and Convenient: Its compact dimensions make it an ideal companion for your desk or shelf, adding a touch of technological sophistication to any space
  • 5. Intelligent Voice: Equipped with several leading AI large language models, including DeepSeek and Doubao, it supports intelligent voice dialogue and seamless switching between models, creating an intelligent desktop companion that understands the user and meets smart needs across all scenarios
Workspace Role described by the author
@blast-radius/core Shared models, validation, caching, retry logic, verdicts, and authorization scoping.
@blast-radius/lambdas Lambda handlers used in the analysis pipeline.
@blast-radius/frontend React, Vite, and Cytoscape.js single-page application.
@blast-radius/cli Command-line integration for CI/CD workflows.
@blast-radius/infra CDK deployment stack.

The frontend keeps its own API type definitions instead of sharing core’s types directly. Burgholzer identifies this as a potential source of drift: duplicated contracts need deliberate maintenance as the API evolves.

Why the tests avoid module mocks

The reported total is 349 passing tests across 29 files, with a search for vi.mock( returning no results. That does not mean the tests use no test doubles. Burgholzer distinguishes module mocking from vi.fn() stubs: handlers receive fake AWS clients through explicit dependency arguments, rather than having imported modules replaced.

This design makes a test call the handler with the same general shape as production while supplying controlled dependencies. It also makes dependencies visible at the function boundary, rather than hiding them in module-level behavior. The account is specific to this project and does not establish that avoiding module mocks is always preferable.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Where property-based tests fit

For deterministic logic, the project uses fast-check to generate input cases and check invariants. The author lists scoring, validation, filtering, sorting, and caching among the targets. Examples span core validation and cache behavior, Lambda scoring and dependency-chain logic, and frontend filtering, sorting, and JSON export.

One representative property checks that sorting produces non-increasing impact scores for generated resource lists of up to 100 items. Generated cases can expose edge conditions that a handful of hand-picked examples might miss, but they do not prove correctness for every possible input.

What local tests did not catch

Burgholzer says two problems emerged only after deployment to AWS, illustrating the boundary between application-level tests and the environment that invokes the application.

Lambda handler behavior under Node.js 22

He reports that synchronous adapter handlers returned null in the runtime and that declaring the handlers async resolved the issue in this project. Treat this as a project-specific observation, not a universal rule for Node.js 22 Lambda handlers; runtime behavior can depend on the handler and its invocation contract.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Lambda Context mistaken for dependencies

Lambda invokes a handler with event and context arguments. The author says a fallback that selected injected dependencies using null-coalescing could therefore accept the truthy Context object as though it were a dependency container. His reported fix was to verify that the injected object contained an expected client key before using it, and otherwise construct default dependencies.

Other deployment adjustments

The article also mentions tuning an API Gateway timeout and correcting Bedrock model configuration after the initial expectation proved wrong. It does not quantify either adjustment, so these are useful reminders to validate deployed service configuration, not values to copy into another system.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

How changes move through the analysis workflow

The adapters convert infrastructure changes into the canonical model. A DynamoDB-backed adapter registry maps formats to Lambda ARNs, and the article says the CDK deployment seeds the default registry rows. In the CLI, the main entry point is blast-radius analyze, which can generate input from CDK, Terraform, or CloudFormation.

For CloudFormation, the described workflow creates and inspects a changeset, then deletes it rather than executing it. The CLI polls for status every three seconds, up to a 90-second ceiling, and treats five unchanged polls as stale status. The author calls that ceiling soft: the Step Functions timeout is 120 seconds, and a large dependency graph could outlast the CLI’s wait window. A version-tagged release workflow bundles the CLI into a single Node-targeted file.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Tradeoffs the author identifies

  • Analysis duration: Large dependency graphs may exceed the CLI’s 90-second polling ceiling, even though the described Step Functions timeout is 120 seconds.
  • Coverage labels: The full, partial, and unknown labels summarize coverage coarsely; they do not say which relationships failed to resolve.
  • Risk scoring: The scoring weights are hand-tuned constants. The author raises team configuration or learning from incident outcomes as possible future directions, not existing capabilities.
  • Repository and deployment shape: A single repo and deploy model may become awkward if the frontend and backend need different release cadences.

These are Burgholzer’s reflections on the version he describes, rather than claims about the project’s current state.

What the example does—and does not—show

Burgholzer writes that “The Kiro spec workflow genuinely changed how I work.” The reported test count and architecture provide a concrete example of planning test seams and runtime concerns before implementation. They do not show that Kiro alone caused the result, that 349 tests guarantee safe infrastructure deployments, or that spec-first development will produce the same outcome on another project. The article is best read as one builder’s account of how requirements-first planning, explicit dependencies, generated property checks, and deployment feedback fit together.

Source: Scott Burgholzer, “349 Tests, Zero Module Mocks: Building Blast Radius Spec-First with Kiro”, DEV Community / AWS Community Builders, September 30, 2026.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.