Why does DMP use an external data validation and CWR generation service?

Django Music Publisher (DMP) uses our commercial service for data validation and CWR generation. In this article, I will explain the reasons for this.

Proof of Concept

I started working on DMP while I was on the seaside with a cold. By the time the cold has passed, the initial (18.7) release was mostly done. From the start to the beta, it took exactly one week. The main motive was to make a proof-of-concept project that uses our CWR Developer Toolset, or more specifically, the docs and tools available in the free 15-day demo. Without this motive, I would not have done it.

The Dilemma

With all the experience I have, if I chose to make a stand-alone project that would not need this external service, it would have taken me at least a month. Well, it would have taken me a few more weeks to make the validation and then just a few hours to do the CWR generation. But this validation and generation would not have covered everything the service does. Each time the functionality would be expanded, most of the developing time would have been spent in extending the validation. Without the experience, it would have taken many months.

And every project in this domain now faces the same dilemma. Whether to go directly for a complete, stand-alone solution or to use our CWR Developer Toolset, have a working solution much faster and then, optionally, replace the functionality that the service provides with their own code.

Now, Ever or Never

The real difference is not just in timing. The main reason why we introduced the service is that we have seen so many projects dealing with batch registrations fail. Bad data structure and underestimating of work needed for achieving compatibility with various entities, due to documented or undocumented differences in CWR implementations, are the two most common reasons for projects failing.

CWR Developer Toolset is solving both issues. It has been tested with dozens of entities already and it provides several CWR generators with various data structures. All result in valid CWR files or in explicitly reported errors.


This is the data structure required by our Original CWR Creator, the simplest of the bunch. Original CWR Workflow actually describes in detail how it can be normalized and DMP follows these guidelines. But this is just one option, as any structure that can be modified into the one depicted above, will work. The more advanced CWR generators accept more complex data structures, but just as here, their goals and limitations are well documented.

With DMP being released now, it gives original publishers an option they did not have before. To have a custom software fast. They can ditch our service in favor of a custom replacement at any point. And experience they will gather along the way will probably be of value. But DMP is an open source solution, with a very permissive licence, and going directly for complete freedom is supported. If you achieve that, I hope you will support DMP with a pull request.