I used three local coding models for a week of real work, and the smallest one won

Local AI has advanced enough to almost feel like a life hack. You can brainstorm, analyze complex documents, generate and run complex code on your machine and derive insights that aid important decision-making, and none of it costs a dime if you’ve got the compute and the storage for it. It’s no surprise that the local AI landscape is advancing fast, and we’re almost spoilt for choice on capable open-weight models these days.

That abundance, though, is what put me in a dilemma between three of the most sought-after coding models right now. Between Qwen3-Coder, Devstral-Small-2 and GPT-OSS, it’s hard to pick one that’s better than the other based on just a few hours or days of use. So, after putting them through an entire week of work, I’ve finally decided which one earns a permanent spot in my local AI stack.

Three of the best open-weight models put to test

But how do I compare them reasonably?

List of installed models on Ollama.

It seems as though every week, a new open model claims to be the coding model to settle on, and Qwen3-Coder, Devstral Small-2, and GPT-OSS were all making that case rather loudly on AI subreddits and tech forums.

The plan to pick the best out of the three was to see how each model handles a week of coding. Over this week, I gave the three models the same prompt by asking them to build a Pygame application from scratch, scoring them on how well it ran as well as on the basis of whether the models implemented behavior that I didn’t explicitly ask for.

One of the most inevitable aspects of using generative AI for code generation, is, of course, running into bugs, and dealing with them efficiently. Over the course of this time, I asked Claude Fable 5 to sneakily plant three separate logic bugs into each model’s own generated script, and then handed each model back its own file reporting nothing more except for the mere fact that “there’s a bug, and it needs fixing.”

And then finally, I put every single model through a refactoring test. The subject was a 120-line Python script simulating a small online store’s order pipeline that checked a queue of customer orders against an inventory, rejected ones with unknown products or insufficient stock, applied category-based discounts, added sliding-scale shipping fees and printed a revenue and stock report at the end. It was written in a way a total beginner would hastily write, making it a realistic candidate for a clean-up.

Model

Ollama Tag

Size on Disk

GPT-OSS

gpt-oss:20b

13GB

Devstral Small 2

devstral-small-2:latest

15GB

Qwen3-Coder

qwen3-coder:30b

18GB

Qwen3-Coder 30B was the fastest, but…

The least trustworthy of the three

Qwen made the strongest first impression by being the snappiest of the three. The program, which was a simple Snake game built using Pygame, was the largest and the best looking of the lot. Qwen produced an 800×600 board with a drawn grid with distinct stylistic elements, and every response arrived faster than either competitor. If I’d adjudicated based on presentation and speed alone, I would’ve had a winner at this point.

As it stands, however, the model warranted further “scrutiny”, for the lack of a better word. Its arena let the snake teleport through walls, which, as anyone would know, is a failing condition. In the subsequent debugging round, its generated code did fix all the logic bugs that Claude planted in the original code, but its written diagnosis was largely inconsistent with the faults that it described. The most likely explanation for it is that Qwen didn’t find the bugs at all, and it simply rewrote the suspected sections from its memory of how the Snake logic should look and that made it land on the right code.

The refactoring test was the real disappointment. Its restructured Python script crashed on the very first line with a scoping error. A model that answers quickly, looks polished and can’t explain its own fixes is a risky addition to the stack.

Test

Details

Result

Planted Bug #1

Food spawn check excluded tail segment

Fixed in code, not diagnosed

Planted Bug #2

Right key checked against Down instead of Left

Fixed in code, not diagnosed

Planted Bug #3

Snake initialized one segment shorter than stated length

Found and fixed

Refactoring

Crashed immediately with variable scoping error

Failed

Devstral Small 2 shipped the most broken fixes

Genuinely impossible to recommend

Devstral-Small-2 describing a script on Ollama.

Devstral has a reputation that’s built on agentic use-cases, so I went in expecting it to shine when handed its own buggy file. It found exactly one of the three planted bugs, then reversed the direction check, and diagnosed it well, explaining the 180-degree turn mechanism that Claude’s intended bug would cause. Thereafter, it confidently declared the code fixed while the other two sat untouched in the very script it handed back, one of them reproduced verbatim. This was rather hilarious, since broken code labeled as repaired is the single worst outcome a debugging assistant can produce.

Now, I would’ve dismissed it as a one-off, but the refactoring round repeated the pattern again. Its plain-English description of the 120-line script was accurate in its own right, but the restructured code crashed at the summary stage over a parameter it forgot to pass.

Test

Details

Result

Planted Bug #1

Food could spawn directly under snake’s head

Missed

Planted Bug #2

Self-collision check skipped a segment, letting snake pass through itself

Missed

Planted Bug #3

Left key checked against up instead of Right

Found and fixed

Refactoring

Crashed at summary stage

Failed

GPT-OSS 20B was the smallest model, and yet…

It swept every single round, perfectly

GPT OSS 20b satisfying a fail condition and demonstrating working code.

GPT-OSS was the one model that had me dumbfounded. It won the generation round, because it was based on sound judgment. The Snake Pygame was the only one amongst the others where the walls actually killed you, the only one with a proper opposite-direction map blocking instant reversals, and the only one that checked food spawns against the snake’s entire body through a dedicated helper. As in all the tests, this behavior was not specified, and no hand-holding was involved.

A python game written by GPT-OSS 20B.

The debugging round was also a clean sweep. All three planted bugs were identified with precise root causes, verified against my diff, and fixed without touching a single line that wasn’t broken. There’s literally zero room for complaints here.

The refactor sealed it running byte-for-byte identical to the original, while its plain-English explanation was the only one to note details like the script never persisting data. All of this came from the smallest download of the three, fitting my 16GB RTX 4070 Ti Super with room to spare. This model proved that there was simply no contest.

Test

Details

Result

Planted Bug #1

Opposite-direction map pointed Left at itself, breaking reversal protection

Found, fixed, correctly explained

Planted Bug #2

Stray tail-pop on the food-eaten branch, snake never grew

Found, fixed, correctly explained

Planted Bug #3

Wall scheck off by one, allowing one step past boundary

Found, fixed, correctly explained

Refactoring

Output identical to original

Pass

A result that nothing could’ve prepared me for

If you’ve been following my coverage, you’ll know that I have run a fair share of LLM benchmark assessments so far. Every test I’ve run has ended in revealing some trade-offs when it comes to some models, with usually one running on capability with the other clawing back points on efficiency. This is the first time a benchmark run has handed me a whitewash. GPT-OSS is the undisputed victor in all three rounds, but I do believe further testing is warranted. One week of testing and one pair of hands running it all is definitely a signal or an indicator, but it could be far from a universal verdict if the testing methodology is changed. There’s only one way to know.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *