February 4, 2026 4 minutes

My Take on Vibe Coding

I often enjoy vibe coding, but I think we're still far away from AI writing all your code. Read my collection of specific tasks and how well vibe coding them went.

Moritz Sichert
Moritz Sichert

I often enjoy vibe coding, but I think we’re still far away from AI writing all your code. Newer models improve your development speed, even for complex applications. However, writing a usable browser from scratch without the heavy involvement of an experienced engineer is certainly not something that’s currently possible.

For me, vibe coding works well most of the time if I have a very good understanding of what I need. For tasks that Claude Code solves well, it saves me a lot of time, but it’s still not “hands-off”. To converge to an acceptable result faster, I often need to give very specific instructions (e.g. “don’t manually create and delete temporary files in Python, just use the tempfile module”). Sometimes, I also just waste a lot of time and don’t get any working result at all.

I generally use Claude Code (currently with Opus 4.5) and regularly try it out for new tasks or older tasks that haven’t worked well in the past. This is a collection of my experience with specific tasks:

My Vibe Coding Tasks

Writing a Rust program to do ARP pings over a range of VLAN ids and IP subnets (to scan my local network):

Claude Code found suitable libraries to generate and send raw packets, understood how to generate ARP packets with VLAN tags and understood how to scan through IPs of a given subnet. It also wrote a raw packet receiver to process ARP responses and added sensible cmdline arguments. Because I already knew very specifically what I wanted, this worked super well. I didn’t need to write a single line of code myself.

Looking at my network configuration (a bunch of config files and screenshots of switch/AP management interfaces) and translating this into a human-readable Markdown file describing the network:

Claude Code asked for missing context (e.g., physical layout of the switch ports) which I think is crucial: In my experience, missing context often leads to bad results with LLMs, so Anthropic does a good job there. It even generated an overview in an SVG file that was correct!

Writing a custom clang-tidy matcher for our internal C++ code style:

It turned out that the matcher I wanted to write just isn’t possible with the current Clang AST API. Claude Code tried a lot of different things (only some solutions compiled), I had to write a lot of code manually to guide it towards a possible solution, and look at the Clang source code with the help of Claude Code to verify what Claude Code was claiming. Eventually, I (not Claude!) understood that the matcher I wanted to write just wasn’t possible and abandoned the project after several hours.

Regularly asking very detailed questions about the core CedarDB database code base:

I know the code base very well, so I tend to ask specific questions such as “We push a data block to S3 once the number of buffered rows exceeds a threshold. What’s the threshold exactly, where do we set it, and where do we check if it’s exceeded?”. Claude Code manages to answer these questions precisely, giving me exact code locations, even if answering the question requires understanding 10+ different source files in detail. This also works well with other code bases I’m familiar with, such as PostgreSQL or LLVM.

Writing a float parser for hexfloats in C++:

I had a specific algorithm in my head that I wanted to try out and implement. Claude Code got the boilerplate and parsing basic numbers correct. It even wrote several helpful test cases. Where I really wasted a lot of time were the edge cases: Overflows around the edges of representable numbers, subnormal numbers, NaN payloads, etc. Even for the tests, Claude Code really wanted to use standard library functions to verify the correctness. But the standard library functions don’t handle these edge cases consistently (which is why I wrote a custom parser in the first place) and I couldn’t convince Claude otherwise. So, I ended up writing the edge cases manually having wasted an hour talking to Claude.

Writing ansible modules in Python for different tasks that I hacked with ansible.builtin.shell before:

Claude Code processed my hacky shell scripts, understood what I wanted to do, and created equivalent Python modules. The modules also have support for check mode and display good error messages.

Writing a Python script that generates a static HTML file from a list of backups (using borg backup):

I wanted a quick read-only overview of my backups. A static HTML page was the easiest solution for me, no monitoring stack required.

How I Will Use LLMs for Coding

I have found that the more I know about a certain problem and programming language, the better the result I get from an LLM. I will definitely continues using LLMs to write boilerplate code and to solve (coding) problems that have been solved before. For really novel problems or algorithms, I think LLMs can assist very well but I’m not yet satisfied with the quality of the code.