{
    "componentChunkName": "component---src-templates-note-note-js",
    "path": "/notes/vibe-coding",
    "result": {"data":{"mdx":{"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Best practices:  \"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Test driven development: TDD has been there for decades, but Vibe coding makes it even more necessary. In fact, it is the only way to go. I tried without TDD and it was painful. Now, I have 100s of test cases and focus on code coverage even though I run a startup. This along with vulture, ruff and pylint makes for good balance with AI. This way I can quickly hunt for deadcode from AI and remove them. I also instruct my AI tools to use the right test cases after each major generation.  \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Generate a lot of mockups as SVG and keep them in the repo that your code can look at periodically to keep alignment. For backend, generate system diagrams with mermaid. They might not look beautiful, but it is a good bridge between the AI and the human languages. Keep visuals as text is important. Make it easier to keep in sync.  \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Keep deleting things all the time. For every 1000 lines of code you generate, 900+ lines should be deleted in a day or two.  \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Generate documentation as slides to keep it visual (no one reads your AI generated PRDs). Visuals are super important when you deal with vibe coding.\")));\n}\n;\nMDXContent.isMDXComponent = true;","inboundReferences":[]}},"pageContext":{"slug":"vibe-coding","node":{"childMdx":{"slug":"vibe-coding"}}}},
    "staticQueryHashes": []}