{"slug": "buzzword-bingo-an-experiment-in-spec-driven-ai-development", "title": "Buzzword Bingo: An Experiment in Spec-Driven AI Development", "summary": "A developer built Buzzword Bingo, a multiplayer bingo game for conferences, as an experiment in specification-driven AI development using Claude. The project explored how far AI coding agents could be pushed with strict typing and production standards, resulting in a fully typed Python application with HTMX and capability URLs.", "body_md": "*This is a submission for Weekend Challenge: Passion Edition*\n\nI built **Buzzword Bingo**, a multiplayer bingo game for conferences, webinars and meetings where players mark off the inevitable buzzwords as they appear.\n\nThe application allows someone to create a game, share a link with participants, and let everyone play along on their own unique bingo board. The first player to complete a row, column or diagonal wins.\n\nUnder the hood, though, the game itself was almost secondary.\n\nThe real goal was to answer a question I had been wondering about for a while:\n\nHow far can I push Claude with specification-driven development while still achieving reliable type coverage and maintaining the coding standards I expect from a production Python project?\n\nThe project became an experiment in AI-assisted software engineering, strict typing, and how much guidance modern coding agents actually need to produce maintainable software.\n\nThere is no live demo, but you can have a [look at the screenshots](https://github.com/cleder/bsbingo/blob/main/docs/user-guide.md) taken by [playwright](https://playwright.dev/) during testing\n\nRepository:\n\nRepository:\n\nThe project followed a specification-driven approach using Speckit.\n\nRather than iterating directly in code, I created specifications describing what the system should do and allowed Claude to implement them.\n\nA big accelerator for the project was using [scaf](https://github.com/getscaf/scaf) for the initial bootstrap. Rather than spending the first few hours wiring together repository structure, CI, containerization, infrastructure, and developer tooling, I started from a production-oriented foundation and focused on shaping it to match my own preferences. Having Kubernetes manifests, Terraform, deployment pipelines, and modern Python tooling available from day one made it much easier to concentrate on the actual experiment: how far specification-driven development and AI coding agents could take the application.\n\nI ended up needing three major specifications:\n\n`scaf`\n\n.The application uses:\n\nHTMX turned out to be an excellent fit for this type of application.\n\nMost interactions consist of:\n\nNo client-side state management was required.\n\nOne design decision I particularly liked was using capability URLs instead of authentication.\n\nEach board receives a unique UUID:\n\n```\n/board/5b97b663-1f2f-4e54-8d2f-f45f3272f870/\n```\n\nPossession of the URL grants access to that board.\n\nThis removes the need for:\n\nFor a lightweight conference game this felt like the right trade-off.\n\nI care a lot about clean code and strong typing in Python, so I decided to push the type system as far as possible.\n\nInstead of relying on a single type checker, I combined:\n\nThis was paired with a strict [ ruff](https://docs.astral.sh/ruff/) configuration with almost every rule enabled.\n\nOne of the goals of the experiment was to see whether Claude could operate effectively within these constraints.\n\nThis instruction worked surprisingly well:\n\nPrefer precise, narrow types (\n\n`Enum`\n\n,`NewType`\n\n,`TypedDict`\n\n, dataclasses with`Final`\n\nor`Literal`\n\nfields) over`Any`\n\n, untyped`dict`\n\nor`list`\n\n, or stringly-typed values. Illegal states should be unrepresentable in the type system rather than guarded against only at runtime.\n\nOnce Claude had a few examples to follow, it started producing significantly better type annotations and more expressive domain models.\n\nPre-commit hooks proved to be the first line of defence, catching issues before they ever reached CI. Linters, formatters, and all three type checkers ran automatically on every commit, providing rapid feedback and keeping the codebase consistent throughout the experiment.\n\nTo avoid spending time hand-crafting the configuration, I used [ pc-init](https://github.com/cleder/gpc-init) to generate a strict\n\n`.pre-commit-config.yaml`\n\ntailored for modern Python projects. This ensured that formatting, linting, and type checking became part of the development workflow rather than an afterthought.Claude struggled with this instruction:\n\nAll Python code MUST be fully type-annotated; untyped function signatures and untyped module-level values are not permitted.\n\nInstead of fixing missing annotations, it occasionally attempted to disable checks in `pyproject.toml`\n\n.\n\nSome manual intervention and code review were required to steer it back towards the desired standards.\n\nThe experience reinforced an observation I've made repeatedly with coding agents:\n\nAgents optimize for making the error disappear, not necessarily for preserving your engineering constraints.\n\nIf you care about those constraints, you still need strong feedback loops.\n\nRunning all three type checkers together was still faster than a single `mypy`\n\nrun.\n\nInterestingly, they complemented each other rather than duplicating effort:\n\n`ty`\n\nfound some issues the others missed.`pyrefly`\n\nfound different classes of problems.`zuban`\n\nfelt the closest to `mypy`\n\nand was by far the easiest to configure.The newer type-checking ecosystem is still catching up with `mypy`\n\nin terms of documentation and examples, so reaching the level of strictness I wanted involved a fair amount of experimentation.\n\nNot submitting for any specific prize category.\n\nThe real prize was finding out how far AI-assisted, specification-driven development can be pushed before human review becomes the limiting factor. 😉️", "url": "https://wpnews.pro/news/buzzword-bingo-an-experiment-in-spec-driven-ai-development", "canonical_source": "https://dev.to/ldrscke/buzzword-bingo-an-experiment-in-spec-driven-ai-development-1m88", "published_at": "2026-07-12 21:23:52+00:00", "updated_at": "2026-07-12 21:44:22.076260+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence", "ai-tools"], "entities": ["Claude", "Speckit", "scaf", "HTMX", "ruff", "playwright", "Python"], "alternates": {"html": "https://wpnews.pro/news/buzzword-bingo-an-experiment-in-spec-driven-ai-development", "markdown": "https://wpnews.pro/news/buzzword-bingo-an-experiment-in-spec-driven-ai-development.md", "text": "https://wpnews.pro/news/buzzword-bingo-an-experiment-in-spec-driven-ai-development.txt", "jsonld": "https://wpnews.pro/news/buzzword-bingo-an-experiment-in-spec-driven-ai-development.jsonld"}}