of software engineering and slopware

So as I wrote before, I’m pretty skeptical of “vibe coding” and the movement among non-technical users to create software through description and “vibes” and then deploy it to the internet without really knowing or caring to know what your code actually is. That way lies a crappy user experience, and potentially even being sued over a security breach.

However, if you’re not out to get rich quick by uploading slopware on to the internet, and actually care about your code, things are a bit different…

Slopware, or an easier route to MVP?

Most of the slopware out there right now is slopware due to it being full of LLM-generated code that isn’t ready for prime-time. The LLM-generated games I played, for instance, were full of bugs and were unplayable, but as proof of an idea rather than a final product that was soliciting money (and oh, how they did!) I would have viewed them a lot kinder.

If you’re a software engineer, and you just need a quick demo of something to check out an idea, I’d actually suggest that LLM code is fine.

Physics engine while you wait!

For instance, asking Grok to whip up a simple physics demo of several shapes moving around using matter.js and having basics such as friction and collisions took around one minute to come up with using the “Think” mode, and the prompt:

“Using appropriate javascript libraries such as matter.js, create me a simple demo of collision physics that shows 2D wireframe shapes colliding, using a verlet solver.”

To be honest, that’s not bad. I decided to prompt a crappy platform game out of it next:

“Do me a simple platform game where a square has to make it to the right side of the screen while jumping from rectangle to rectangle. This is controlled by the WASD keys, and the game has gravity so the square can fall through gaps.”

The next big AAA game

Of course, this is again a pretty cruddy demo, but it’s one that I didn’t have to spend much time setting up or doing, and if I wanted to start making a platform game much of the mechanics are already there. I’d never dream of releasing this as a product on the internet and charging money for it, but just as a demo with simple shapes to try and see if my idea works, it’s not a bad start!

The “game” was set up using Phaser.js, a JavaScript game framework I’m not overly familiar with, but by this I’ve got a solid piece of code that fulfils my specification (a platform game), and I have an example of something I might want to iterate on. If I want to carry on developing this, Grok gave me a pretty good head start!

The Potential of LLMs for Non-Technical Stakeholders In Business

Of course, I’m not going to develop Blue Square Vs. The Platforms of Doom much further – it’s just a bit of throwaway code that I wanted to see if I could create, but I can see a role for this in business, for example in allowing MVPs to be worked on by non-technical stakeholders such as product owners.

I’ve worked on products before where there’s been an MVP requested, which has then required developer time to get the MVP up and running in collaboration with stakeholders. While this ensures that the stakeholders get the product they want, the code for the MVP has to be written by software developers.

Up until now, this could take up several tickets’ worth of developer time, but using LLMs, it’s quite conceivable that a stakeholder could come up with a rough version of what they were aiming for to show the developers, who can then easily take the LLM-written MVP and use it as the basis to come up more quickly with a much more polished version of the software that could be actually shipped. This would conceivably help to bring the time to deployment down, as the initial idea will have been already shown to “work” in some fashion.

LLMs As Boosters

So for final, shipped code, I wouldn’t recommend LLMs. However, for providing a developer with an initial starting point without having to sit down and spend time coding up a basic proof of concept, I’d say it’s not half bad. I was able to get a (very basic) platform game generated for me in around a minute without having to try, and if I’d wanted to iterate on the concept for a more detailed demo I imagine that half-an-hour would have been productive.

For the final product, I would probably tear out and refactor most of the code in order to create something that I could take full responsibility for as a developer, but compared to say, a year ago I’m not as opposed as I used to be to doing this. Copilot of a year ago gave me some pretty crappy suggestions, but what LLMs can do now is getting pretty decent for a first pass to try and understand what you want from your software.

Using an LLM as a booster to get more done, at least in prototyping? I think that’s quite a good and responsible use of them, and allows for us as developers to be able to see if something will work without having to commit too much time to something that might not work.

As for just accepting whatever comes out of an LLM, and shipping slopware?

A Cautionary Tale

The short answer is: don’t, or you’ll probably end up like this:

Surprised? Well…

Using LLMs to “just write code” and not understanding it will lead to trouble, and I’m sure we’re going to see plenty of cautionary tales occurring over the next few months as what I’m calling the “slopwave” washes over the internet, but take heart. If you actually know what you’re doing, LLMs could actually save you time.

The Churn

A 2024 study of code written by LLMs found that an awful lot of it was shit that needed refactoring. As much as LLMs will improve in the future, most LLM code will probably be still pretty cruddy due to the fact that what comes out is non-deterministic, and although you get thoughtchains it doesn’t fully capture the “decisions” that were made when writing the code in the LLM.

LLM code will always have a very high churn rate, and most of what say, Copilot generates will probably have to be rewritten by humans in order to get things going well.

Software engineering, at heart, is a craft, and requires things like human intuition in order to create a polished, high quality end product. While we may have LLMs now with us producing code, we’ll still have to have humans who know what exactly is coming out of these tools to ensure that what we put into production is actually right, and doesn’t leak customers’ credit card details all over the web…

Leave a comment