Skip to Content

Why It Took Me Twenty Years to Build a Report Writer for Odoo

How forty years of ERP experience and four months of AI-assisted coding finally brought a twenty-year-old architectural dream to life.
30 June 2026 by
Jonathan Wilson

For most of my professional life, I have been a builder of software. I don't mean websites or mobile apps; I mean the heavy-lifting machinery of business. Over a career spanning forty years, I’ve navigated the complexities of ERP systems as a developer, a founder, and a consultant. More recently, I’ve had the privilege of serving as Australia's first Odoo partner. Looking back on that journey, I’ve realized something rather amusing: the report writer I’ve just finished didn’t really take four months to build. It took nearly twenty years of observation, frustration, and architectural sketching.

The Missing Piece

Long before Odoo became the center of my professional world, I relied on reporting tools like Crystal Reports and FastReports. Anyone who used them seriously understood why they became industry standards. They weren't just generators; they were bridge-builders. They gave ordinary users and consultants the ability to design professional, complex reports—complete with headers, footers, nested groupings, and running totals—without ever needing to touch raw code. Once you understood the "banded" layout model, designing a report became an intuitive, visual process.

When I began working with Odoo back in 2008, the contrast was immediate. Odoo was, and is, an excellent ERP framework, but its reporting story felt incomplete. Reports were generated through QWeb templates combined with a mix of HTML, CSS, and XML. While this is undeniably powerful, it is not approachable. Over the decades, I watched highly capable consultants avoid report writing because they simply weren't comfortable with that specific technology stack. Something that should have been a standard business task had become an arcane programming challenge. I always felt Odoo deserved a tool that returned that power to the implementer.

Knowing the Solution vs. Finding the Time

It is one thing to identify a solution and quite another to bring it to life. Throughout my career, I was occupied with the daily realities of running businesses: implementing systems, supporting customers, and leading teams. There was never enough of that rare, uninterrupted time required to disappear for months and build a complete reporting framework from scratch. Furthermore, while I have spent my life in software, I had never previously immersed myself deeply enough in the Odoo Python framework to tackle a project of this magnitude entirely on my own.

So, the idea lived in my head as a series of sketches and "what-ifs." Every few years, I would refine the architecture in my mind, only to have client work and immediate priorities take over once again. However, the core idea never changed: a report writer shouldn't depend on HTML or browser rendering quirks. It should be a pure-Python engine driven by a structured document. Eventually, this evolved into the heart of my current application: a JSON-first report definition where every report is a validated, structured description of the data’s layout and logic.

The AI Development Team

The landscape shifted dramatically four months ago. While I had been watching AI coding tools mature, I hadn't yet found a workflow that felt like a true partnership—until I started using Codebuff and OpenCode. For the first time, I felt like I had assembled the high-level development team I could never otherwise have afforded. I wasn't asking AI to invent the product; I was asking it to implement a very specific architecture that I had already designed.

The process was rigorous. I would describe a subsystem, review the AI's design suggestions, challenge the implementation, and ask for alternatives. We worked through a cycle of generating code, refactoring it, and writing over 1,100 automated tests to ensure total reliability. Four months of this intense, collaborative rhythm resulted in a working application that I can hold up with pride. It resulted in a pure-Python rendering engine that is deterministic, testable, and entirely independent of Odoo’s UI layer.

Dealing with "Imposter Syndrome"

I wasn't expecting the emotional weight that came with this journey. I found myself wrestling with a strange sense of "imposter syndrome," wondering if I had somehow cheated because I hadn't typed every semicolon myself. I suspect many developers are currently feeling this same tension. Eventually, I realized that if I had hired a team of human programmers to build this, no one would question my authorship. My role was to provide the vision, the architecture, and the quality control. AI simply became a faster, remarkably efficient version of that development team.

This experience reinforced a vital truth: AI is exceptionally good at writing code, but it is much less capable of deciding what should exist. It didn't invent the banded model, and it didn't understand the forty years of ERP implementation experience that informed the design. It didn't know why a JSON schema is better for future-proofing than an XML template. Those decisions came from decades of watching businesses struggle. AI accelerated the implementation, but it could never replace the seasoned judgment of a craftsman.

A Foundation for the Future

In designing the Banded Report Writer, I made a conscious choice to ensure the Free Edition was genuinely useful, not a "crippled" demo. It contains the complete engine and an Automated Report Builder to lower the barrier to entry as much as possible. For those who need more, the Pro Edition adds the "professional" features I once found indispensable in tools like Crystal Reports, such as watermarks, SQL data sources, and image handling.

I am often asked if I am finally slowing down. The truth is that I am simply refocusing. I am no longer interested in building companies; I am interested in building tools that reflect a lifetime of learning. This project has been incredibly satisfying, regardless of its commercial outcome. It is the product of an idea that sat in my head for twenty years, finally finding its way into the world thanks to a new generation of tools. If it saves an Odoo consultant even a fraction of the frustration I’ve felt over the years, then the journey was worth every hour.