This project was also a good opportunity for me to test a "coding-agent first" approach. I proudly resisted the temptation to use any coding agent until Q3 2025 but it was time to run an experiment to see for myself.
The current library in ./lib is today mostly a human-coded result, but it was quite fun working with the
agent at the beginning. The content of ./demo and ./lib/validation are still very much generated by the agent with a heavy polish coating on top.
And now, a slightly longer feedback on what happened during this process:
-
The first phase was like a honeymoon, short-lived and sweet.
- As RTF is a well-known format, the agent generated a basic set of specifications in markdown format in no time.
- It had not too much trouble generating a set of document primitives to compose the future document model.
- Asking to create a simple render logic from the document model: this worked with a bit of a nudge of simple primitives.
- Ta-da, I had a working Proof-of-Concept without having to learn the intricacies of the RTF format.
-
From there, it was quite clear that lots of things were not very orthogonal and I had to dig into the RTF format to build an understanding of how the various document elements are supposed to be combined together.
-
It started to be a bit of a pain to manage the context window, clarify things that were obvious to me and longer-than-I-would like waiting on the thing to go through its internal task list.
-
Lots a discrepancies in the output, unwieldy library api and duplication was generated as a result.
-
By then, it was time in my opinion to switch to human-first approach and I used the coding agent less and less, if at all.
-
To the agent's defense, it was quite successful at generating (rather verbose) validation assertions that are still present in the validator.
Was it worth it? I am not convinced but a single data point is not conclusive. It was some fun for sure.