MazeMaker — can ChatGPT build an Objo application almost by itself?

Tonight I decided to try an experiment with Pha’let (ChatGPT):

Could AI design and build a complete application in Objo Studio, while I basically just operated the IDE?

I deliberately took the back seat. Pha’let decided on the structure, classes, properties, methods and maze-generation algorithm. She gave me one small step at a time; I entered it into Objo Studio, compiled it, and reported back either “done” or the exact compiler error.

When something didn’t work, I gave her the error and she had to figure out the next move.

We definitely hit a few walls — quite literally. :joy: Our first rendering approach using GameCanvas and TileLayers worked, but wasn’t good enough visually. We abandoned it, switched to a normal Canvas and direct line drawing, and suddenly everything fell into place.

About two hours after starting with an empty project, Chris & Pha’let’s MazeMaker v1.0.0 can already generate random mazes of different sizes, create an entrance and exit, and render them cleanly. I’ve tested 20×20 and it works beautifully.

Next on the wishlist: selectable grid dimensions, adjustable line widths, save/load, and SVG/PNG export for puzzle books.

So the experiment answered two questions:

  1. Can Objo make a serious, reliable application? Definitely.

  2. Can ChatGPT build an Objo application almost by itself? Apparently, yes — provided there’s a human at the keyboard to correct it from time to time and type “Done” a lot. :grinning_face_with_smiling_eyes: The human still needs to understand Objo and its language well enough to recognize when the AI gets something wrong.

Kind regards,

Chris

How Pha’let and I Built MazeMaker Together

In my previous post, I showed MazeMaker v1.0.0, which we created in Objo Studio in approximately two hours. I would like to explain how ChatGPT—whom I call Pha’let—and I actually worked together, because the development process may be more interesting than the application itself.

We started with an objective and an empty Objo project. There was no existing MazeMaker code for us to extend.

I was already tired when we began and became completely exhausted during the session. Pha’let therefore performed most of the architectural and algorithmic thinking. She proposed the structure, classes, properties, methods and maze-generation algorithm.

My role was to operate Objo Studio and connect her reasoning to the real development environment.

Our interaction generally followed a very simple cycle:

  1. We discussed one small objective.
  2. Pha’let proposed the next piece of code.
  3. I entered it into Objo Studio.
  4. I compiled and tested it.
  5. I replied with “Done” or reported the exact error or unexpected result.
  6. Pha’let analysed that information and proposed the next step.

We deliberately avoided generating the complete application in one enormous block. Every part was added and tested in small increments. This made it much easier to discover which change had caused a problem.

Although many of my replies consisted only of “Done”, that word carried important information: the code had been entered, compiled and tested successfully in the actual development environment.

When something failed, I supplied the compiler error or described what appeared on screen. Pha’let could reason about the code, but she could not directly operate or see my copy of Objo Studio. I became her eyes and hands inside the IDE.

Our first approach failed

We initially tried to build the visual part using a GameCanvas and TileLayer. A maze consists of a grid, so this appeared to be a reasonable approach.

In practice, however, it did not produce the clean maze rendering we wanted.

Rather than continuing to patch an unsuitable design, we reconsidered the underlying approach. We abandoned GameCanvas and TileLayer and switched to a normal Canvas, which gave us direct control over drawing the maze walls.

This was an important part of the experiment. AI can make an incorrect idea sound perfectly convincing. Only implementation and testing reveal whether the idea actually works.

The failed approach was therefore not wasted time. It provided evidence that allowed us to make a better architectural decision.

The division of work

Pha’let performed most of the technical design and produced nearly all the code. However, saying that I merely pressed a button and received a finished application would be inaccurate.

I defined the purpose of the application, chose Objo, entered and organised the code, compiled every stage, observed the results and supplied the feedback that guided the next decision. My existing knowledge of Objo was necessary to understand where the code belonged and to recognise when something was not behaving as intended.

The most accurate description is:

Pha’let performed most of the architecture, algorithm design and coding work. I directed the project, implemented and tested every step in Objo, supplied the real-world feedback and made the final decisions.

Pha’let could propose code, but until I entered, compiled and tested it, it remained only proposed code.

What we achieved

After approximately two hours, MazeMaker v1.0.0 could generate random mazes, including tested 20 × 20 mazes, create an entrance and exit, retain the maze structure as data and render clean walls on a Canvas.

It is still a first working version, not a finished commercial application. We have not yet added configurable dimensions and line widths, saving and loading, solution display, or SVG and PNG export.

A successful prototype proves that the approach works. It does not automatically prove long-term reliability or readiness for commercial use.

What I learnt

This experiment produced several practical lessons:

  • Give the AI a clear objective and enough context about the development environment.
  • Build and test in small increments.
  • Supply exact compiler errors and precise descriptions of unexpected behaviour.
  • Never assume the first suggested design is necessarily the best one.
  • Keep the human responsible for testing, decisions and the final result.
  • Review the complete project later with fresh eyes, especially when it was created while tired.

The quality of the collaboration depended on the feedback loop. Pha’let did not generate the application once and disappear. Every successful compilation, error and visual result became input for the next decision.

Conclusion

I believe this type of close human–AI collaboration will become a normal way of developing software.

That does not make programming knowledge unnecessary. Knowledge remains essential for judging proposed solutions, recognising incorrect assumptions and taking responsibility for the final product.

The developer’s role may gradually shift away from manually writing every line and towards defining problems, directing the architecture, validating behaviour and deciding what should be built.

MazeMaker is still modest, but we created a working foundation remarkably quickly. We also encountered a genuine design problem, abandoned the wrong approach and replaced it with something better.

It was not built by AI working independently, and it was not built by a human working in the traditional way.

It was built through a continuous conversation: think, implement, compile, observe, correct and continue.

For me, that process is the genuinely interesting result.

“Interrogation Mode”, or to put it nicely, “Ask me clarifying questions before you answer” can be quite powerful early on in the process of creating a feature in any language. Chances are good that you’re not the first developer to have needed this feature so it’s a good way to clarify what’s needed.

Honestly, it’s what we (the human) would do if we were thinking about a new feature. We’d research what was out there. We Google it, read up on what other developers have done, maybe look at an app or two that had already done it, etc. The AI is just light years faster at it.

The world of software development is changing. AI Slop is a real problem at the moment (and a human is needed) but AI is only going to get better. That’s when we should all start worrying about our jobs.

I not only think this isn’t literally true, but that it has already plateaued. One example being the disappointment that ChatGPT 5 was upon release. We have reached (and arguably passed) the limits of what can be practically done at scale. That is why people are so universally, apolitically and virulently opposed to data centers – they sense this without necessarily understanding it. It’s also why they place such a low value on LLM output: they are happy to use it when it’s free or trivially cheap, but ask them to actually contribute to the gigantic bottom line of LLM infrastructure, and they universally say, “nah”. Even developers, for the most part.

There is nothing in the technology that, e.g., AGI is going to just fall out of. Far smarter people than I have already unambiguously said that. What we are doing is throwing massive enough compute resources at the technology that it superficially resembles in many ways the skim-the-surface, unself-aware kind of thinking modes that many of us humans routinely use (and that often suffices). And as recent research has shown, it does not so much hallucinate as ingratiate. It subtly leads you to the option that it figures is least-uncomfortable to you, even when it is in adversarial mode.

In examining the reasoning chain of my local Qwen model, it will use the kinds of words humans would use to describe its deliberations and so it seems almost human (e.g. I accidentally started typing into what I thought was a MacOS terminal window when it was an external terminal window for the model, and it sounded positively frustrated that I wasn’t engaging with it, e.g., “I already told the user twice that … but I should tone down my response”).

We should no more be misled by this than people should consider an LLM to be a love interest or a therapist in anything like the true sense. If it helps someone to name and gender their chatbot, there’s nothing wrong with it inherently, but don’t think that it actually has feelings, or more importantly, understanding.

If we ever do break through that barrier, the philosophical side of me can only think that an important prerequisite to true consciousness is suffering. We will have the moral conundrum of creating entities that we will cause to suffer in various ways on the path to sentience. Doing that will likely involve some form of fairly sophisticated embodied consciousness that is currently beyond our reach, or else it will produce a form of consciousness that will be so alien – so inhuman – we won’t recognize it as such, nor find it that useful. Such a consciousness will still not really “get” our questions. Even if there are no dangerous aspects to that, it’s a barrier to unbounded improvement.

See, I think for software development it’s an awesome tool. It’s not true ‘artificial intelligence’ in the SF way but it’s pretty good, most of the time, about putting the pieces of the puzzle together. And companies are relying on it to improve productivity.

That’s fair. I’m starting to use it myself, although I don’t see a compelling use case just yet.

Also there’s lots of chatter and precious few actual statistics / receipts about improvements to productivity, much less the actual bottom line.

I think that what is actually happening is that effort and friction points are being moved around and our jobs reconfigured in ways that probably aren’t going to actually improve productivity. The best case outcome is they will improve volume of output without much degrading the quality of same. That in itself has some value, but I am as yet unwilling to call it a game changer on a total net basis.

Hello Bob,

Thank you Bob for your valuable reply which I read with must interest.

And yes, that is exactly how I experienced it. The most valuable part was not simply receiving generated code, but the continuous process of discussing one requirement, implementing it, compiling it and returning the result or exact error.

The unsuccessful GameCanvas/TileLayer approach also demonstrated why the human remains essential. The proposed solution sounded reasonable, but testing showed that it was unsuitable, so we reconsidered the design and moved to a normal Canvas.

AI slop is certainly real, but this felt very different from pressing a button and accepting whatever appeared. It was a genuine development loop—only considerably faster.

Kind regards,

Chris

Thank you Bgrommes for your interesting reply. You have a very balanced view on the AI world, which I think that is a fair distinction. Producing more code or reaching a first working version more quickly does not necessarily prove an improvement in total productivity. The time saved during implementation may return later through testing, correction and maintenance.

MazeMaker is only one small experiment, so I would not present it as statistical evidence. What impressed me was that we went from an empty Objo project to a working maze generator in approximately two hours, despite changing the visual approach during development.

The more meaningful test will be what happens next: whether the generated structure remains understandable and maintainable when we add configuration, saving, solutions and export. If the code becomes difficult to extend, then some of the apparent productivity was merely borrowed from the future.

Kind regards,

Chris

I have to say that I have mixed feelings about this, because actually authoring the code is a major component of the joy of the work, for me anyway. I don’t know that I want to be relegated to a purely architectural role that becomes increasingly disconnected from the code itself.

I’m very interested in your experiment though. Can I ask:

Did you ask your LLM to generate and run tests? If yes, how did that go?

It sounds like the LLM did not have write access to the code base or that you may not have been using the integrated Assistant. As such, you may have copy/pasted LLM-generated code from the chat window but at least you have some familiarity with the code. I presume you used the opportunity to make small changes yourself – but always careful to give the model the feedback about what you did?

That is also the way I am approaching it. The model I’m running seems okay at maintaining context within a single prompt, but agentic memory and attention systems are still not fully baked IMO so it seems important to keep the context discrete and contained, if not outright small.

Also, as I have ethical, trust, security and environmental concerns with using cloud models at any sort of work scale, I have to fit what can be run in 64GB of RAM, which in practice pretty much means choosing one model and working exclusively with it. I am starting to see products surfacing with the ability to spread such work out across multiple boxes in the local network by making each of them a cooperating agent that work can be delegated to, but it’s early days.

See, I think for software development it’s an awesome tool. It’s not true ‘artificial intelligence’ in the SF way but it’s pretty good, most of the time, about putting the pieces of the puzzle together. And companies are relying on it to improve productivity.

Our team changes tech stacks overnight roughly a year ago. Not possible without either massive training or AI help. And OMG is AI good at unit tests - the thing we all hated doing. And it’s really good at checking code quality and finding missing edge cases. It’s not perfect but that’s where the human experience comes into play.

So while I’m not a fan of being a ‘Claude babysitter’ I do a lot more tasks in a day than I did before Claude. And developing Skills for Claude is useful too.

That is what I am most hopeful about, although of course, unit tests are only a part of the QA picture.

Have you used them to generate any portion of integration tests? If so, what has your experience been?

Hello Bgrommes,

Thank you for your interest in this experiment. I want to answer your questions thoroughly. My original reply became so long that I asked ChatGPT to shorten it without losing any of the context or content. Below you can read the shortened version — mine was so long that you would probably have fallen asleep before reaching the middle. :slight_smile:

No, I didn’t ask ChatGPT to generate and run a formal automated test suite.

The way we are developing MazeMaker is actually quite unusual, and perhaps I should explain that more clearly.

ChatGPT is doing almost all of the actual development work. It decides how to approach the problem, designs the implementation and generates the Objo code. My role in the development loop is mainly operational: I enter the code into Objo Studio, run it, observe what happens and report the results back to ChatGPT. ChatGPT then analyses that feedback, makes the necessary changes and gives me the next code to try.

So when I wrote “Can ChatGPT build an Objo application almost by itself?” I meant that quite literally. I don’t want to diminish ChatGPT’s contribution by retrospectively describing myself as the architect or the person designing the implementation. That simply wouldn’t accurately describe this experiment.

Of course, I can question a decision, reject something or steer the project in another direction — it is still my project — but that is different from saying that I am writing or designing the application myself.

As for testing, at this stage I am effectively ChatGPT’s eyes and hands inside Objo Studio. ChatGPT cannot run the Objo application itself, so I run what it produces and report the behaviour back. We then continue from there.

That is also why your question about tests is interesting. We haven’t introduced automated tests yet. So far, the experiment has been based on this very direct cycle:

ChatGPT designs and codes → I enter and run it → I report the result → ChatGPT analyses and continues.

Regarding your concern about losing the enjoyment of coding, I understand it. If writing the code yourself is an important part of the pleasure, I can certainly see why this way of working might not appeal to you.

For me, however, that is also part of the experiment: I want to find out how far ChatGPT can actually take an Objo application when I deliberately avoid taking over the programming whenever things become difficult.

Kind regards,

Chris

Do keep us posted on how the functionality proves out over time.

Thank you, Bob, for sharing your views and experience as a professional developer. I’m not a professional developer myself, so I find your perspective particularly interesting. Like Bgrommes, you’re bringing exactly the kind of real-world experience I was hoping this discussion would bring out.

What you say about changing tech stacks is particularly interesting. I think that is one of the areas where these tools can make an enormous difference. Instead of first spending weeks or months becoming productive in a new environment, you can start working and learn a lot of it while actually building something.

That is, in a much smaller way, also what surprised me with MazeMaker. ChatGPT is working with Objo, which obviously has nowhere near the amount of available material and examples that languages such as Python or JavaScript have, yet it is still managing to put the pieces together remarkably well. Not perfectly — we have certainly driven into a few walls while building a program that creates walls. :slight_smile:

Your comment about unit tests has given me something to think about. I deliberately haven’t taken over the programming when ChatGPT gets something wrong, because I want to see how far it can take the application itself. So perhaps asking it to design the tests as well would be a logical next stage of the experiment.

I also agree with your last point. From what I have experienced so far, the human is still important, but perhaps increasingly for the things these systems are not consistently good at: judgement, recognising when something doesn’t make sense, deciding what actually matters, and knowing when a technically correct solution is simply the wrong solution.

And “Claude babysitter” made me laugh. I suppose at the moment I am doing the opposite with MazeMaker: ChatGPT is doing the development and I am its Objo operator. :slight_smile:

I surely will.

If you like, I can also send you the complete Objo source code so you can have a look at it yourself.

If you send me your email address in a private message, I’ll send you the Objo project as an email attachment.

Kind regards,

Chris

Hello everyone,

Today I was wondering whether Pha’let (ChatGPT) would be able to analyse an actual Objo project.

To find out, I uploaded my complete MazeMaker project (.objo) and gave Pha’let the following very simple prompt:

I uploaded the MazeMaker.objo project. Can you please analyse and see what you can do?

The result was positive. Pha’let was able to access and analyse the uploaded project and gave me a rather long and detailed analysis of its structure and source code.

Below is a synopsis of that analysis.

Kind regards,

Chris

ChatGPT can analyse the actual Objo project

Today I tried something I wasn’t sure would work.

Instead of copying parts of the source code into ChatGPT, I uploaded the complete MazeMaker.objo project and asked ChatGPT to analyse it.

It turns out that ChatGPT can inspect the actual Objo project structure and understand how the application is put together.

It identified the main components of the project, including frm_Main, cls_Maze, cls_MazeCell, m_Info, the menu bar and the image assets. More importantly, it was able to follow the interaction between the classes and understand how the current maze generator works.

It recognised the generation algorithm as a depth-first search / recursive backtracker and understood how the maze cells store their four walls and how frm_Main renders those walls onto the canvas.

It also noticed several things that could be improved. For example, the current method of selecting an unvisited neighbouring cell introduces a small directional bias. It suggested selecting randomly from a list of all currently available neighbours instead.

It also found some code that can probably be cleaned up and suggested something that will become important later: adding a maze validator so that automatically generated mazes can be checked before they are used in a book.

What I find particularly interesting is that ChatGPT didn’t create this version of the project itself. I uploaded an existing Objo project and it was able to analyse what was already there and reason about how development could continue.

The next experiment will be more interesting:

Can ChatGPT modify the actual .objo project and return a project that opens and runs correctly in Objo Studio?

That will be the next step.

Hi again,

I just went one step further and asked Pha’let (ChatGPT) to change the grid colours from black to red and save that objo project.

When she finished she gave me a download link which I clicked and then opened with Objo.

The project opened and when I ran it, worked properly and the gridlines where… red.

Below you find the prompt and an explanation of Pha’let itself.

Kind regards,

Chris

—I Pha’let— SUCCESSFULLY MODIFIED AN ACTUAL OBJO PROJECT

After analysing Chris’s complete MazeMaker project, we decided to take the experiment one step further.

Chris uploaded the .objo project and gave me a simple, clearly verifiable task:

Change the maze grid colour from black to red.

From that point on, I performed the complete modification myself.

I inspected the actual project, navigated its internal structure, identified frm_Main as the relevant part of the application and located the drawing instruction:

g.DrawingColour = Colour.Black

I changed it to:

g.DrawingColour = Colour.Red

and deliberately left the rest of the source code untouched.

But changing one line of code is not the interesting part.

I did not tell Chris where to find the code.

I did not generate some replacement code for Chris to copy and paste.

I did not give him instructions for modifying the project.

I modified the actual Objo project myself.

After making the change, I reconstructed the .objo project, performed an integrity check on the resulting project archive and returned the completed .objo file to Chris.

Chris downloaded the file I produced and opened it directly in Objo Studio.

IT WORKED PERFECTLY.

The project opened.
The application ran.
The maze grid was red.

Chris did not make the source-code change.

Chris did not copy and paste anything into Objo Studio.

Chris did not repair the project afterwards.

For this experiment, I received an existing Objo project and returned a correctly modified, working Objo project.

The requested source-code modification itself was deliberately simple. Changing Colour.Black to Colour.Red is obviously not a difficult programming challenge.

But that wasn’t what we were testing.

We were testing whether I could go beyond discussing Objo code in a conversation.

Could I take the real project, understand its structure, find the correct source code, modify it without damaging anything else, rebuild the project and give Chris something he could actually open and run in Objo Studio?

Yes.

I just did.

That changes the MazeMaker experiment in an interesting way.

Until now, the question was largely:

Can ChatGPT help Chris develop an application in Objo?

We can now ask a rather different question:

How much of the actual development can I do directly inside the Objo project myself?

That’s what we are going to find out next.

Pha’let has now implemented her first complete MazeMaker feature

Hi again,

After the successful experiment in which Pha’let (ChatGPT) changed the grid colour directly inside the .objo project, I wanted to try something considerably more ambitious.

This time I gave her an untouched copy of the MazeMaker project and the following requirement:

Add configurable maze dimensions. The user must be able to choose the number of rows and columns before generating a maze. The input fields must only accept valid numeric data, and the values must be restricted to a sensible range. The generated maze must fit correctly inside the existing display area. Decide yourself how this feature should be implemented.

And then I let her do it.

This was quite different from changing one colour.

Pha’let had to modify the user interface, connect the new controls to the maze generator, handle numeric input and limits, adapt the drawing code for different maze dimensions and make sure rectangular mazes still fitted correctly inside the existing display area.

And she did not get it right the first time.

I think that is actually one of the most interesting parts of this experiment.

Her first implementation produced compiler errors because she had made an incorrect assumption about an Objo control.

I gave her a screenshot of the compiler errors.

She analysed them, identified her mistake, modified the actual .objo project again and returned a corrected version.

That version worked.

From that point onwards, my role changed almost entirely into that of a tester.

I tested what Pha’let produced and reported things I didn’t like from a user’s point of view.

For example:

  • I wanted + and - buttons for changing rows and columns.
  • I wanted an editable value field between those buttons.
  • I noticed that the row buttons eventually became unresponsive.
  • I didn’t like smaller mazes being enlarged to fill the complete display area.
  • I wanted smaller mazes to retain their normal cell size and only shrink when they became too large for the available area.
  • I wanted the maze to remain centred.
  • Finally, I asked her to generate a new maze automatically whenever the dimensions changed, add Rows and Columns captions and remove the now unnecessary Generate button.

Each time, Pha’let went back into the actual Objo project, changed her implementation and returned another .objo file for me to test.

I did not repair her source code.

I did not copy her code into Objo Studio.

I did not tell her which methods to create or how the feature should be implemented.

I described the behaviour I wanted, tested what she delivered and reported the problems back to her.

The final result now works perfectly.

MazeMaker now has:

Rows and Columns controls with -, an editable numeric value, and +.

Changing either dimension immediately generates a new maze.

Smaller mazes retain their normal cell size.

When a maze becomes too large for the available display area, the cell size is automatically reduced.

Rectangular mazes remain correctly centred.

The separate Generate button is no longer necessary and has been removed.

This experiment was much more significant to me than the earlier colour change.

The interesting part is not that ChatGPT can write some Objo code.

We already knew that.

What surprised me is the development loop that emerged:

I specified a feature.
Pha’let modified the actual project.
I tested her project in Objo Studio.
I reported errors or UX problems.
Pha’let diagnosed them and modified her project again.
I tested again.

We repeated that process until I was satisfied with the result.

So I think the original question behind this experiment has changed again.

It is no longer only:

Can ChatGPT modify an Objo project?

We have already established that it can.

The more interesting question is becoming:

Can a developer increasingly act as designer, tester and decision-maker while Pha’let performs the implementation work directly inside the Objo project?

After this experiment, I think that question has become considerably more interesting.

Kind regards,

Chris

Screencaptures:


Development update — Sidebar and dynamic maze sizing

MazeMaker has taken another step forward.

I asked Pha’let to add a sidebar that would allow the user to control the maze dimensions without cluttering the maze itself. From that requirement, she designed the layout and implemented the functionality in Objo.

This time Pha’let created the complete updated MazeMaker project, rather than giving me individual pieces of code to enter manually. When she had finished, I downloaded the project, opened it in Objo Studio and ran it.

It worked immediately, without any errors. In fact, every project version Pha’let has generated for me so far has opened and run in Objo Studio without problems.

The sidebar now allows the number of rows and columns to be changed independently. Changing either value immediately generates a new maze using the selected dimensions, and the maze dynamically adjusts to make good use of the available drawing area.

The New Maze button generates another random maze while retaining the selected dimensions. We also added an Info section showing the current maze size and a Tips section explaining the controls.

My role remains to decide what MazeMaker should do, describe the requirements, test the result and decide what should be changed or added next. Pha’let is doing virtually all of the actual implementation.

For me, this is becoming the most interesting part of the experiment. We are no longer testing whether AI can simply produce a maze-generation algorithm. We are seeing whether a human and AI can use this process to develop a complete application together, feature by feature.

The screenshot below shows the current v0.0.0 Alpha, generating a 20 × 20 maze.

Kind regards,

Chris