DEV Community

Cover image for When Is 100% Vibe Coding OK ?
Viorel PETCU
Viorel PETCU

Posted on

When Is 100% Vibe Coding OK ?

Brute-forcing a wooden puzzle via AI

Recently, I lost a lot of time reviewing and would have lost even more implementing, what I can only describe as vibe-written specs.

Requirements that felt coherent while saying almost nothing concrete. The kind of document where every paragraph sounds reasonable until you scratch the surface a bit and realize the thing is not applicable in the existing ecosystem.

To be clear: I am not against vibe coding.

I use it myself all the time.

If I need:

  • a one-off script,
  • a throwaway visualization,
  • a temporary parser,
  • a document nobody else will maintain,

then speed matters more than rigor.

But maintenance changes the equation completely.


This weekend accidentally gave me a good example of where vibe coding actually shines. During my usual Saturday clean-up, I knocked over one of those wooden cube puzzles:

25 identical pentacubes that are supposed to fill a perfect 5×5×5 cube.

Specifically this one:

wooden cube puzzle

I tried reconstructing it manually for a while and failed ( blaming the fact that I was tired and there was heat dome over EUROPE messing with the comfort index 🥵 )

Needless to say this really bugged the engineer in me and on Sunday morning I was ready to throw AI at this. I realized that:

  • the rules are precise,
  • the state space is finite,
  • the problem is absolutely solvable,
  • and computers are very good at brute force.

So I opened Go and started vibe coding.

The single piece shape is simple:

pentacube puzzle piece

A planar pentacube of which there are 25 instances.

At first the challenge was not the algorithm. It was the representation or the domain specific language (DSL).

Even explaining the puzzle to ChatGPT took multiple iterations. We had to establish:

  • coordinate conventions,
  • slice notation,
  • legal piece states,
  • rotation semantics,
  • and eventually a labeling system for pieces.

Once the model stabilized, the rest followed naturally:

  • generate transformations,
  • normalize orientations,
  • recursively place pieces,
  • backtrack on collision.

Classic brute force.

I fully expected to need serious optimization eventually:

  • pruning,
  • bitboards,
  • placement precomputation,
  • maybe even Algorithm X.

But modern hardware is absurdly efficient.

The naive recursive solver found solutions fast enough that optimization stopped being necessary and became optional engineering curiosity instead.

Somewhere in the middle of this, the project accidentally became a generic mono-pentacube solver.


computing unique orientations for default piece...
unique orientations: 24
solution found

z = 0
1 1 1 1 2 
3 1 4 2 2 
3 3 5 6 2 
3 7 8 9 2 
3 8 8 8 8 

z = 1
A B C D E 
A 4 4 4 4 
A A 5 6 6 
A 7 F 9 9 
G H H H H 

z = 2
I B C D E 
I I C D J 
I 5 5 6 J 
I 7 F 9 J 
G 7 F H J 

z = 3
B B C D E 
K K K K E 
L M 5 6 J 
G 7 F 9 N 
G O O O O 

z = 4
L B C D E 
L M K P N 
L M P P N 
L M F P N 
G M O P N 
Enter fullscreen mode Exit fullscreen mode

Then I wanted visual output.

So we added OBJ/MTL export and grouped the generated geometry by piece so the solutions could be inspected directly in Blender.

At that point I left the chat entirely, opened Codex, cleaned the implementation up, packaged it properly, and turned it into something reusable for solving this entire family of problems.

Solution Exploded View
Solution Exploded Solution

Not bad for roughly two hours of vibe coding.

But I think the important part is this:

My attempt only worked because I already knew the problem itself was solvable.

That certainty let me push through:

  • incorrect assumptions,
  • hallucinated constraints,
  • broken code generation,
  • malformed OBJ output,
  • and multiple rounds of ChatGPT confidently misunderstanding the puzzle.

That is where I think vibe coding genuinely works well:

When the human already owns the invariants.

If you know:

  • the problem is solvable,
  • the constraints are real,
  • and the output is verifiable,

then AI becomes an accelerator and vibe coding is 100% OK in my book.

But if the requirements themselves are "vibes", then the system has nothing solid to converge toward.

You do not get speed.

You get, well, nonsense.

PS:

should you knock over your puzzle, or ever need to fill a 5x5x5 cube with a planar pentacube, while also needing to visualise the solution...
I got you: vibe coded go implementation

Top comments (7)

Collapse
 
itskondrat profile image
Mykola Kondratiuk

your throwaway script always gets a second user two weeks later with zero context it was vibe-coded. that metadata never survives a handoff.

Collapse
 
realvorl profile image
Viorel PETCU

That's why I added this badge to the REPO

All I can do is: hope that users read the README.MD

Collapse
 
itskondrat profile image
Mykola Kondratiuk

honestly readme-as-covenant is the most honest contract you can offer - you just can't force anyone to read it

Collapse
 
harjjotsinghh profile image
Harjot Singh

my honest answer to 'when is 100% vibe coding OK': when there's a harness catching what you're not reading. 100% vibe coding with validation between steps + a hard gate on irreversible actions is fine; without it, it's a time bomb. that's the line Moonshift draws: agents build + deploy + market a SaaS overnight, fully hands-off but gated. good question to put to the community. first run's free if you want to see where the line sits.

Collapse
 
lcmd007 profile image
Andy Stewart

"Spot on! 'Humans must own the invariants' is the absolute core logic of Vibe Coding. If the requirements and boundaries themselves are just vague 'vibes', AI will only bring chaotic entropy and messy code. AI becomes a true productivity accelerator only when the problem is solvable and constraints are deterministic. Massive thumbs up!

Collapse
 
zulqurnan profile image
Zulqurnan Aslam

Well nicely put. The transition from 'vibe coding' to 'engineered solution' is really just the transition from exploration to verification. I think a lot of developers overlook that they need to be the 'architect' in the loop. Once you've solidified the constraints, AI is a massive force multiplier. Thanks for sharing the Go implementation—it’s a great example of where this workflow shines.

Collapse
 
kyej_dev profile image
Kye Jones

hey super clean post! I believe it's 100% okay purely in a controlled environment and you definitely need to understand the code to a degree to save your self on any risks!

Some comments may only be visible to logged-in visitors. Sign in to view all comments.