{"id":10841,"date":"2025-08-22T11:30:06","date_gmt":"2025-08-22T18:30:06","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cosmosdb\/?p=10841"},"modified":"2025-11-13T09:32:40","modified_gmt":"2025-11-13T17:32:40","slug":"everyone-is-talkin-bout-vibes","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cosmosdb\/everyone-is-talkin-bout-vibes\/","title":{"rendered":"Everyone is talkin\u2019 bout vibes"},"content":{"rendered":"<p id=\"ember1163\" class=\"ember-view reader-text-block__paragraph\">Leading up to Microsoft Ignite, I wanted to pressure-test something the community keeps talking about: <strong>vibe coding<\/strong>. It\u2019s a style of AI-assisted development where you describe outcomes in natural language and your assistant does most of the scaffolding, refactoring, and glue. You keep momentum by <strong>talking through the work<\/strong>, and you only drop to raw code when you need to tighten the screws.<\/p>\n<p id=\"ember1164\" class=\"ember-view reader-text-block__paragraph\">If you\u2019ve ever written music, the metaphor fits: you\u2019re <strong>chasing a riff<\/strong>, not over-theorizing scales. A writing partner sits beside you, nudging phrasing, trimming bars, and pushing you through the bridge. After a few loops, you\u2019ve got a demo worth sharing. That\u2019s the goal here: <strong>prove that I can get to a demo in ~an hour<\/strong>. That&#8217;s including building and troubleshooting\u2014<strong>purely via conversation <\/strong>with the assistant.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/Designer-5.jpeg\"><img decoding=\"async\" class=\"aligncenter size-large wp-image-10846\" src=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/Designer-5-1024x683.jpeg\" alt=\"person vibe coding to the music\" width=\"1024\" height=\"683\" srcset=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/Designer-5-1024x683.jpeg 1024w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/Designer-5-300x200.jpeg 300w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/Designer-5-768x512.jpeg 768w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/Designer-5.jpeg 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p id=\"ember1165\" class=\"ember-view reader-text-block__paragraph\">What follows is the playbook I used to generate the app quickly, the exact prompt patterns that helped, and how I validated the result inside VS Code without leaving the editor.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2 id=\"ember1166\" class=\"ember-view reader-text-block__heading-3\">Tools I used (and how they fit the flow)<\/h2>\n<ul>\n<li><a class=\"QdvICwepTyAitoklDVPFOhvhgDqeXXldAw \" tabindex=\"0\" href=\"https:\/\/code.visualstudio.com\/\" target=\"_self\" data-test-app-aware-link=\"\"><strong>Visual Studio Code<\/strong><\/a> \u2014 editing, terminal, and inline chat.<\/li>\n<li><a class=\"QdvICwepTyAitoklDVPFOhvhgDqeXXldAw \" tabindex=\"0\" href=\"https:\/\/learn.microsoft.com\/azure\/cosmos-db\/emulator-linux\" target=\"_self\" data-test-app-aware-link=\"\"><strong>Azure Cosmos DB Linux-based Emulator (vNext Preview)<\/strong><\/a> \u2014 a local Docker container so I can iterate fast without provisioning anything.<\/li>\n<li><a class=\"QdvICwepTyAitoklDVPFOhvhgDqeXXldAw \" tabindex=\"0\" href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-azuretools.vscode-cosmosdb\" target=\"_self\" data-test-app-aware-link=\"\"><strong>Azure Databases (VS Code extension)<\/strong><\/a> \u2014 attach to the local emulator and browse databases\/containers\/documents directly in the sidebar.<\/li>\n<li><a class=\"QdvICwepTyAitoklDVPFOhvhgDqeXXldAw \" tabindex=\"0\" href=\"https:\/\/code.visualstudio.com\/docs\/copilot\/overview\" target=\"_self\" data-test-app-aware-link=\"\"><strong>GitHub Copilot Chat (VS Code)<\/strong><\/a> \u2014 the \u201cwriting partner\u201d that turns intent into code, then helps me iterate.<\/li>\n<\/ul>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2 id=\"ember1168\" class=\"ember-view reader-text-block__heading-3\">\ud83c\udfb8 What is \u201cvibe coding,\u201d in practice?<\/h2>\n<ul>\n<li><strong>Intent first.<\/strong> You describe the outcome (\u201cAdd a numbered delete flow with a confirmation\u201d) rather than issuing line-by-line directives.<\/li>\n<li><strong>Tight loop.<\/strong> Ask for a change \u2192 run it \u2192 immediately validate \u2192 ask for a tighter or safer version.<\/li>\n<li><strong>Human judgment.<\/strong> You still own testing, security, and maintainability; the assistant speeds up scaffolding and edits.<\/li>\n<\/ul>\n<p id=\"ember1170\" class=\"ember-view reader-text-block__paragraph\">My objective: <strong>prove a real demo lands fast<\/strong> when you work this way\u2014and document the conversational moves that make it work.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2 id=\"ember1171\" class=\"ember-view reader-text-block__heading-3\">The code-generation playbook I used<\/h2>\n<p id=\"ember1172\" class=\"ember-view reader-text-block__paragraph\">Below are the <em>actual<\/em> kinds of prompts that moved the work forward. Feel free to copy\/paste them into your own flow.<\/p>\n<h3 id=\"ember1173\" class=\"ember-view reader-text-block__heading-3\">1) Kickstart: \u201cPlan \u2192 code\u201d two-step<\/h3>\n<p id=\"ember1174\" class=\"ember-view reader-text-block__paragraph\">Ask for a plan first, then ask it to implement.<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cOutline a minimal Python console app that uses the Azure Cosmos DB Python SDK against a local emulator. \r\nFeatures: add\/list\/delete \u2018vibes\u2019. Partition key is \/id. Use friendly, colorized console output. \r\nThen propose a file layout and any environment variables you expect in a .env file.\u201d <\/code><\/pre>\n<p id=\"ember1175\" class=\"ember-view reader-text-block__paragraph\">Follow with:<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cGreat\u2014now generate a single-file implementation in vibes_manager.py using your plan.\u201d <\/code><\/pre>\n<p id=\"ember1176\" class=\"ember-view reader-text-block__paragraph\"><strong>Why it works:<\/strong> The assistant reveals assumptions and dependencies before it writes code. You catch problems early (SDK choice, partition key, error paths).<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h3 id=\"ember1177\" class=\"ember-view reader-text-block__heading-3\">2) Constrain the diff<\/h3>\n<p id=\"ember1178\" class=\"ember-view reader-text-block__paragraph\">Don\u2019t ask for \u201ca bunch of changes.\u201d Ask for <strong>one<\/strong> change.<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cAdd a delete-by-number workflow: \r\n- list existing vibes with numbers \r\n- prompt to choose one \r\n- show a detail preview \r\n- confirm before delete \r\nKeep the rest of the file intact. Only return the new\/changed functions and any changes in main().\u201d <\/code><\/pre>\n<p id=\"ember1179\" class=\"ember-view reader-text-block__paragraph\"><strong>Why it works:<\/strong> Tiny diffs are easy to review, and the assistant stays focused.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h3 id=\"ember1180\" class=\"ember-view reader-text-block__heading-3\">3) Describe UX, not code<\/h3>\n<p id=\"ember1181\" class=\"ember-view reader-text-block__paragraph\">Paint the experience you want, not the implementation you imagine.<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cWhen removing a vibe, I should be able to scroll through them and delete one at a time. \r\nUse a numbered menu and a final \u2018Are you sure?\u2019 confirmation. \r\nIf there are no vibes, return to the main menu with a friendly message.\u201d <\/code><\/pre>\n<p id=\"ember1182\" class=\"ember-view reader-text-block__paragraph\"><strong>Why it works:<\/strong> You get behavior that feels right, and the assistant chooses idiomatic APIs to achieve it.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h3 id=\"ember1183\" class=\"ember-view reader-text-block__heading-3\">4) State runtime facts up front<\/h3>\n<p id=\"ember1184\" class=\"ember-view reader-text-block__paragraph\">Give the assistant the operating context to avoid dead ends.<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cRuntime facts: Python 3.10, VS Code on Windows (WSL available), Cosmos emulator running locally. \r\nWe use a .env file for COSMOS_ENDPOINT, COSMOS_KEY, COSMOS_DATABASE_NAME=vibes, COSMOS_CONTAINER_NAME=items. \r\nAdd an optional DISABLE_SSL_VERIFICATION flag for local dev.\u201d <\/code><\/pre>\n<p id=\"ember1185\" class=\"ember-view reader-text-block__paragraph\"><strong>Why it works:<\/strong> Removes guesswork around certs, ports, and configuration.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h3 id=\"ember1186\" class=\"ember-view reader-text-block__heading-3\">5) Ask for guardrails<\/h3>\n<p id=\"ember1187\" class=\"ember-view reader-text-block__paragraph\">Bake in reliability and readability early.<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cWrap Cosmos calls with clear exception handling (not walls of tracebacks). \r\nReturn user-friendly messages and keep logging concise. \r\nAdd type hints and small docstrings to public methods.\u201d <\/code><\/pre>\n<p id=\"ember1188\" class=\"ember-view reader-text-block__paragraph\"><strong>Why it works:<\/strong> You won\u2019t have to retrofit error handling later.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h3 id=\"ember1189\" class=\"ember-view reader-text-block__heading-3\">6) Debug by symptom, not speculation<\/h3>\n<p id=\"ember1190\" class=\"ember-view reader-text-block__paragraph\">When something\u2019s \u201cred in VS Code,\u201d don\u2019t guess. Describe what you see.<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cvibes_manager.py is red in VS Code and won\u2019t run. Investigate likely causes (docstring markup, imports, missing env values). \r\nPropose minimal fixes and show diff-only results.\u201d <\/code><\/pre>\n<p id=\"ember1191\" class=\"ember-view reader-text-block__paragraph\"><strong>Why it works:<\/strong> The assistant considers environment, syntax, and imports\u2014not just one line number.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h3 id=\"ember1192\" class=\"ember-view reader-text-block__heading-3\">7) Refactor with explicit acceptance criteria<\/h3>\n<p id=\"ember1193\" class=\"ember-view reader-text-block__paragraph\">When changes get bigger, set tests\/checks as the target.<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cRefactor the main menu to use a single loop with a choice dispatcher. \r\nAccept if: \r\n- add\/list\/delete all work \r\n- invalid input returns to the menu without throwing \r\n- exit path prints a friendly goodbye.\u201d <\/code><\/pre>\n<p id=\"ember1194\" class=\"ember-view reader-text-block__paragraph\"><strong>Why it works:<\/strong> \u201cDone\u201d becomes testable, not subjective.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h3 id=\"ember1195\" class=\"ember-view reader-text-block__heading-3\">8) Documentation on demand<\/h3>\n<p id=\"ember1196\" class=\"ember-view reader-text-block__paragraph\">Keep your repo coherent with prompts that maintain docs as you go.<\/p>\n<pre class=\"reader-text-block__code-block\"><code>\u201cUpdate README.md to reflect the numbered delete flow and the .env requirement. \r\nUpdate copilot-instructions.md with the runtime facts and the prompt patterns we\u2019ve been using.\u201d <\/code><\/pre>\n<p id=\"ember1197\" class=\"ember-view reader-text-block__paragraph\"><strong>Why it works:<\/strong> Future you\u2014and collaborators\u2014get context without spelunking through commits.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2 id=\"ember1198\" class=\"ember-view reader-text-block__heading-3\">Minimal setup (without the deep dive)<\/h2>\n<ul>\n<li><strong>Python venv<\/strong>: create\/activate, pip install -r requirements.txt.<\/li>\n<li>.env: endpoint, key, database, container, optional SSL flag.<\/li>\n<li><strong>Emulator<\/strong>: run the start script (Docker required).<\/li>\n<li><strong>Run<\/strong>: launch the app (or use the helper script that sets up and runs it).<\/li>\n<\/ul>\n<p id=\"ember1200\" class=\"ember-view reader-text-block__paragraph\">That\u2019s all you need to start prompting and iterating.<\/p>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2 id=\"ember1201\" class=\"ember-view reader-text-block__heading-3\">A quick validation loop\u2014inside VS Code<a href=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/vibes_vscode-scaled.jpg\"><img decoding=\"async\" class=\"aligncenter size-large wp-image-10843\" src=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/vibes_vscode-1024x550.jpg\" alt=\"vibes vscode image\" width=\"1024\" height=\"550\" srcset=\"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/vibes_vscode-1024x550.jpg 1024w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/vibes_vscode-300x161.jpg 300w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/vibes_vscode-768x413.jpg 768w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/vibes_vscode-1536x825.jpg 1536w, https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-content\/uploads\/sites\/52\/2025\/08\/vibes_vscode-2048x1100.jpg 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/h2>\n<div class=\"reader-image-block reader-image-block--full-width\"><\/div>\n<p id=\"ember1203\" class=\"ember-view reader-text-block__paragraph\">I did one crisp, reproducible check to confirm the flow end-to-end without leaving the editor:<\/p>\n<ol>\n<li><strong>Add a new vibe<\/strong> in the console app; note the printed ID (UID).<\/li>\n<li>In the <strong>Azure<\/strong> panel: <strong>Cosmos DB Accounts \u2192 Local Emulators \u2192 NoSQL Emulator : 8081 \u2192 vibes \u2192 items \u2192 Items<\/strong>.<\/li>\n<li>Open the document whose <strong>id<\/strong> matches the printed UID and confirm the fields. No browser required; the Azure Databases extension keeps you in flow.<\/li>\n<\/ol>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2 id=\"ember1205\" class=\"ember-view reader-text-block__heading-3\">Troubleshooting playbook (prompts I actually used)<\/h2>\n<ul>\n<li><strong>Environment &amp; syntax<\/strong> \u201cIt\u2019s red in VS Code. Investigate malformed docstrings, imports, and missing env values. Propose fixes; show diffs only.\u201d<\/li>\n<li><strong>Feature regression<\/strong> \u201cThe delete-by-number functionality is gone. Reintroduce it, integrating with the main loop and confirmation prompts. Return only the sections that changed.\u201d<\/li>\n<li><strong>Connection issues<\/strong> \u201cOn connect, show a short \u2018make sure the emulator is running\u2019 hint if we can\u2019t reach the gateway. Don\u2019t print stack traces by default.\u201d<\/li>\n<li><strong>Polish<\/strong> \u201cTighten user messaging: friendly success ticks, short error lines, and a \u2018no vibes yet\u2019 note when the list is empty.\u201d<\/li>\n<\/ul>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2>Patterns worth keeping<\/h2>\n<ul>\n<li><strong>Plan \u2192 code<\/strong> in two messages.<\/li>\n<li><strong>One change per prompt<\/strong> (constrain the diff).<\/li>\n<li><strong>UX first<\/strong> (\u201chow it feels\u201d beats \u201chow to implement\u201d).<\/li>\n<li><strong>State runtime facts<\/strong> early.<\/li>\n<li><strong>Acceptance criteria<\/strong> for bigger edits.<\/li>\n<li><strong>Docs prompts<\/strong> to keep the repo fresh.<\/li>\n<\/ul>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2 id=\"ember1209\" class=\"ember-view reader-text-block__heading-3\">What mattered less (and why)<\/h2>\n<ul>\n<li>Dumping large code blocks into chat. It\u2019s faster to <strong>select a region<\/strong> in the editor and say \u201cmake this do X,\u201d or paste <strong>short<\/strong> excerpts with the exact change you want.<\/li>\n<li>Premature architecture. For a one-hour demo, the assistant\u2019s \u201cgood enough\u201d scaffolding is exactly what you want\u2014save grand designs for later.<\/li>\n<\/ul>\n<hr class=\"reader-divider-block__horizontal-rule\" \/>\n<h2 id=\"ember1211\" class=\"ember-view reader-text-block__heading-3\">Closing riff<\/h2>\n<p id=\"ember1212\" class=\"ember-view reader-text-block__paragraph\">You can find the complete output of my work in <a class=\"QdvICwepTyAitoklDVPFOhvhgDqeXXldAw \" tabindex=\"0\" href=\"https:\/\/github.com\/jaydestro\/ignitevibes\" target=\"_self\" data-test-app-aware-link=\"\"><strong>this GitHub repository<\/strong><\/a>. Feel free to fork it and then iterate upon it! Have any other improvements you created with vibes? Submit a PR! Vibe coding doesn\u2019t replace engineering; it <strong>accelerates the path to understanding<\/strong>. By treating the assistant like a capable writing partner\u2014and by giving clear, incremental prompts\u2014you can stand up a credible demo fast, fix issues conversationally, and validate everything without leaving VS Code. From there, you can tighten reliability, security, and structure at your own pace.<\/p>\n<p id=\"ember1213\" class=\"ember-view reader-text-block__paragraph\">If you try this approach, use the playbook above. Start small, describe the experience, constrain each change, and keep your loop tight. You might be surprised how quickly that riff turns into a track you\u2019re proud to share.<\/p>\n<h2>About Azure Cosmos DB<\/h2>\n<p>Azure Cosmos DB is a fully managed, serverless NoSQL and vector database for modern app development, including AI applications. With SLA-backed speed and dynamic scalability, it supports high-performance distributed computing. To stay in the loop on Azure Cosmos DB updates, follow us on\u00a0<a href=\"https:\/\/twitter.com\/AzureCosmosDB\" target=\"_blank\" rel=\"noopener\">X<\/a>,\u00a0<a href=\"https:\/\/aka.ms\/AzureCosmosDBYouTube\" target=\"_blank\" rel=\"noopener\">YouTube<\/a>, and\u00a0<a href=\"https:\/\/www.linkedin.com\/company\/azure-cosmos-db\/\" target=\"_blank\" rel=\"noopener\">LinkedIn<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Leading up to Microsoft Ignite, I wanted to pressure-test something the community keeps talking about: vibe coding. It\u2019s a style of AI-assisted development where you describe outcomes in natural language and your assistant does most of the scaffolding, refactoring, and glue. You keep momentum by talking through the work, and you only drop to raw [&hellip;]<\/p>\n","protected":false},"author":39313,"featured_media":10847,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[14,19],"tags":[],"class_list":["post-10841","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-core-sql-api","category-tips-and-tricks"],"acf":[],"blog_post_summary":"<p>Leading up to Microsoft Ignite, I wanted to pressure-test something the community keeps talking about: vibe coding. It\u2019s a style of AI-assisted development where you describe outcomes in natural language and your assistant does most of the scaffolding, refactoring, and glue. You keep momentum by talking through the work, and you only drop to raw [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/posts\/10841","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/users\/39313"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/comments?post=10841"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/posts\/10841\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/media\/10847"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/media?parent=10841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/categories?post=10841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cosmosdb\/wp-json\/wp\/v2\/tags?post=10841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}