Itransition transformed and enhanced Ditto Music’s core platform to help the company keep up with the competitors and attract more creators.
Ditto Music is an online music distribution company with headquarters in the UK. The company aims to help independent artists with releasing tracks across 160+ digital music stores, including Spotify, iTunes, Google Play, Apple Music, etc. Ditto Music provides content distribution, publishing, record label, and artist management services to 200k+ independent artists and labels across the globe and offers a subscription plan to help them release their tracks with Digital Service Providers or DSPs whilst retaining music rights and earnings.
Digital Service Providers (or DSPs, encompassing digital music stores and streaming services) are becoming increasingly popular among both artists and music listeners alike. However, DSPs rarely collaborate with independent artists as platforms are incapable of dealing with the massive number of ensuant contracts and payments.
For this reason, DSPs prefer to sign contracts with labels, that in turn conclude agreements with individual artists. Some artists refrain from signing with a label as they would like to fully retain their copyright and royalties. Catering to the independent artists’ needs, Ditto Music offers a subscription plan that enables creators to release their tracks on DSPs, whilst retaining their music rights and earnings.
Ditto Music had a fully functioning solution, offering end-user functionality through the website. The platform with the existing features was mostly a legacy monolith, with part of the solution implemented on AWS as microservices by previous vendors. To keep up with the competition and attract more creators to their platform, Ditto Music wanted to modernize its solution and was looking for an all-around service provider experienced in AWS consulting to replace its current vendor. They wanted their new service provider to:
Ditto Music hired Itransition for our extensive experience in the media and entertainment domain and our status as the Advanced Amazon Consulting Partner.
To meet the full scope of Ditto Music’s needs, we built a dedicated team to handle the development of new features and improvement of the existing system. Our team replaced the legacy website with a new one and created a new admin panel, developing major functionality for both that significantly altered the scope of services provided by Ditto Music and improved the platform’s performance. We also provided QA services, established DevOps infrastructure practices, improved the existing L1, L2, and L3 support workflows, and created a platform monitoring system.
Artists need to pay a subscription fee to access the features listed below and upload and release their tracks on DSPs. More advanced plans allow users to manage multiple artists and their tracks and create compilation releases, essentially functioning as independent music labels.
The solution offers end users the following functionality:
The customer had long wanted to implement a feature that would enable co-creators to share the royalties. It was also highly requested by artists and collaborators since music releases often require contributions from several creators.
Ditto Music approached Itransition with a business idea, but requirements and the exact workflow were yet to be designed. The Product Owner/Business Analyst (PO/BA) on the customer’s side wrote the requirements. Our dedicated team worked in close collaboration with them, thoroughly analyzing and testing the requirements and offering potential solutions for the identified issues.
We created the functionality and made it available through the website. To share profits with their collaborations, users can invite them to the platform by entering the collaborators’ names and email addresses. Then, collaborators have to register with the platform and either confirm or reject the royalty percentage assigned to them.
When developing Royalty splits, we ensured the process of profit-sharing is completely transparent and auditable. To provide admins and end-users with accurate and up-to-date information on split payments, we realized the functionality as three interdependent microservices that accurately calculate and distribute royalties among the collaborators.
The feature revamped the already complicated process of managing sales and user account data, with the system now accurately redistributing money among several collaborators instead of assigning all royalties to one track owner.
The Royalty splits implementation was further complicated by the fact that new functionalities impacting user balances were developed at the same time. For example, Ditto Music wanted to implement a new commission on the platform, which significantly altered the Royalty splits flow. We implemented the possibility to assign a commission to a certain release in addition to the existing commissions for the user account as a whole or for advance payments. To align commissions with Royalty splits, we changed the trigger for automatic commission capturing from the payout request by the user to the point when the sales data is first logged into the system.
We developed the Music publishing feature that provides composers and songwriters with another option to earn royalties from their music, allowing writers to claim royalties from their compositions broadcasted, played live, or used in movies, video games, TV shows, etc. With the Music publishing feature, Ditto Music serves as an intermediary between writers (copyright owners) and a variety of performing rights organizations (PROs) and music rights organizations (MROs) that collect royalties from parties wishing to use copyrighted content for commercial use.
Having implemented Music publishing, we helped songwriters significantly simplify the collaboration with PROs and MROs since they only need to register their works on the platform now. From the tracks that passed the quality check by Ditto Music admins, writers can select a track to register and claim publishing royalties.
The feature also allowed music authors to add co-authors in a way similar to the Royalty splits feature. The Ditto Music admins have to check the application, and after their approval, the release can be registered on PROs and MROs through integration with Iris, a third-party service gathering and sending data on the songwriters and tracks.
To let the customer release the Music publishing feature on the market faster, Itransition first released it with a manual registration and integration with Iris, establishing an API integration with Iris after some time to automate the process.
The customer had originally intended that admins would register the uploaded tracks in the system manually. First, we implemented the manual registration, but with time Ditto Music decided to develop an automatic registration and integration with Iris to simplify and speed up business processes. However, at the time Iris did not have a suitable API, but they agreed to adapt the existing API to fit the required functionality, requiring collaboration and assistance from Ditto Music to better adjust the API to the needs of the project.
Itransition collaborated with both Ditto Music and Iris, aiding the teams in adjusting the API. When the new API was finished, our team integrated it with the platform, fully automating the registration process which reduced admin work efforts. The integration helps efficiently merge the customer’s database with Iris, resulting in a simplified and more efficient workflow.
The Music publishing feature brought major changes to the sales flow as it closely intertwined with new subscriptions and commissions which were being implemented on the platform at the time. This is why we realized the functionality as an additional subscription plan, available once the user activates the general subscription. We also enabled the solution to collect platform commissions (a percentage of royalties) for Ditto Music from the music writers.
The initiative to develop the new admin panel came from our team, as it aligned with the customer’s wish to advance their sales management functionality, allowing for more complex financial operations. Furthermore, the customer wanted to develop more user roles with various permissions and access rights. Since the admin panel couldn’t support the intended changes, we suggested building a new admin panel on the Symphony framework, outside the legacy system.
When developing the new admin panel, we enhanced the system of user roles and permissions, so that only selected admins could perform sensitive sales and balances management tasks. We also enabled Ditto Music to precisely configure the scope of functionalities for certain admins.
To manage and support the end-user functionality, the admin dashboard has the following features:
The Data mapping functionality enables admins to automatically edit raw sales reports, which are CSV files with detailed listings on the royalties earned by each artist per track/release. They are initially sent to Ditto Music by DSPs when DSPs transfer the money earned from releases to the platform through bank transactions.
Since each DSP has unique sales report templates, admins had to manually edit the DSP sales reports to align them with the Ditto Music templates. Furthermore, admins needed to apply custom exchange rates, recalculating royalties to convert them from USD/EUR into GBP. The existing process was time-consuming, lead to errors, and required a lot of manual labor, so the customer wanted to automate it.
With the Data mapping feature implemented, admins need to upload the files into the system and fill in the initial information, selecting parts of the table in the raw sales reports that need to be identified as headers and the desired DSP. We also ensured the initial information can be auto-populated or predefined if the file name includes the DSP name. Having filled in the DSP and headers, admins activate the parsing functionality that recognizes text and numbers from the sales files. When the system has parsed the reports, the Data mapping feature requests admins to match the parsed headers from raw reports with the corresponding ones in the Ditto Music template, allowing the system to migrate data to the appropriate sections of the template. Our team also created the currency field, where admins can enter exchange rates for the system to convert the royalties from USD/EUR into GBP.
When the system has transferred all the data from the raw sales reports to the template, admins validate the processed information to eliminate any issues before importing. To accelerate the validation process, our dedicated team implemented the summary functionality that concisely presents key automation outtakes, including the import history, the total sum of the parsed income, and currency exchange results. We also ensured the system notifies users about the unprocessed data, displaying rows with errors for admins to correct the mistakes in the raw reports and resubmit them for processing.
The Data mapping functionality allowed Ditto Music to cut down on manual efforts previously required for sales reports processing, as now admins need to only confirm and verify key processing stages.
After the sales reports have been processed via the Data mapping functionality, admins import them to the platform to assign authors’ and co-creators’ royalties. However, sometimes the initial data, sent by the DSPs in the reports, would contain too many inaccurate data logs. What is more, the same file could be mistakenly uploaded twice. To resolve the issue, admins had to manually extract the sales reports, which was inefficient and counterproductive. Our dedicated team developed a feature allowing admins to automatically delete or roll back large batches of sales reports from the system.
Itransition ensured the reports are extracted without overloading the system since some of them may contain 500k+ entries. We also provided the exactly-once processing, so as to enhance the solution stability.
Prior to the feature implementation, releases were linked to the end-user account they had first been registered on. However, releases often had to be transferred to another user’s account due to a change of ownership or similar situations. Besides, certain subscription plans enabled end-users to release tracks for multiple artists, operating as an independent music label. In this case, the need for moving releases arises when one of the artists desires to sever relations with the label to establish their personal account, publishing their releases individually from now on.
Itransition developed the functionality that enables admins to move releases between accounts. To ensure process continuity, we ascertained that royalties earned by the release in transference also get redistributed to the destination account. The whole account balance history is similarly transferred to the new account, with the log of all the royalty receipts and drawings preserved. We also made sure admins can choose to move the release without the royalties if necessary to maximally cover the scope of potential use case scenarios.
When performing the release move, admins first choose the release that needs to be transferred and fill in the email of the target user. At this stage, they also decide whether release earnings have to be moved as well. Before transferring, the system conducts a variety of checks, ensuring the release, target and source accounts meet all the requirements. For example, the music industry utilizes ISRC codes to uniquely identify music releases, therefore, when moving the release, we need to ensure the ISRC code of the release in transference also changes ownership, now belonging to the target user. Having ensured compliance with the transference requirements, the system either confirms the move was successful or displays the type of error.
Sometimes, the sales reports that DSPs send to the platform contain erroneous logs, attributing the royalties to the wrong artists. To correct the mistake and ensure the release owner receives the royalties, admins had to manually find the needed sales report in the system, delete the entry, recalculate the royalties and re-assign the report to another user. Our dedicated team implemented the functionality that allows admins to automatically reallocate royalties and sales records to another end-user account.
To reallocate sales records, admins first need to find the necessary sales entries and fill in reallocation parameters, choosing the time period, source and target releases. Similarly to the release move workflow, the system runs checks before conducting sales reallocation to ascertain the sales reallocation seamlessly fits into other workflows and system requirements.
Our customer recognized the need to provide additional functionality for Ditto Music admins to manage royalty availability for certain users. Our team suggested implementing the feature as part of the new admin panel because the architecture of the old panel is unsuited for adding new sales manipulation functionality.
Our dedicated team developed the Freeze/unfreeze sales functionality that enables admins to prevent users from withdrawing the earned money from the system in case of issues with their accounts. The functionality is used if, for example, the user has not supplied necessary copyright proof or admins suspected a copyright violation upon inspecting a release. Once the issues are resolved, admins can “unfreeze” royalties, allowing users to collect their royalties.
Employing a system of accesses we created for the new admin panel, we enabled Ditto Music managers and admins to effortlessly access the information on the money freeze initiator, and the amount of blocked money.
Using the customer’s mockups, we developed a new Ditto Music website that catered to their emerging marketing needs and provided multifaceted end-user functionality.
To enable easy content management on the website, we utilized headless GraphCMS which acts as a backend-only content management system. It enables teams to use a single content repository to deliver content to a variety of frontend platforms (websites, apps, etc.). Instead of delivering content as compiled HTML, headless CMS uses a variety of APIs which ensures a seamless omnichannel experience. Itransition suggested the headless CMS as it helps eliminate restrictions on potential content, pre-imposed by device types, templates, or the chosen tech stack, allowing content teams to focus on creating effective materials.
Ditto Music caters to a worldwide audience, so we made sure the content seamlessly adapts through the integrated GraphCMS that allows for easy localization management and supports three languages, with admins assigning one default and two secondary languages. Our team also set up that if the CMS cannot find certain content in the requested language, it automatically pulls the same content in one of the available languages, starting with the default one. What is more, we implemented tracking of visitors’ IP addresses to identify their geographical location and displaying of the most user-relevant content and media.
Since the beginning of the project, our dedicated team thoroughly tested the new functionality while also checking the legacy code for alignment with the current business goals.
Our QA team provides the full scope of testing for the project, including:
Most of the mentioned testing types were carried out for both backend and frontend, with localization and integration testing reserved for frontend only.
Our team applied a combination of manual and automation testing and employed the following tools:
To provide a content release preview, our team had a password-protected staging environment that provided Ditto Music staff access to the upcoming features and content updates for the testing period.
When we started working on the project, we discovered the customer used a combination of manual and automatic deployment (GoCD, Bamboo), but the existing approach could not ensure smooth and uninterrupted code deployment. Ditto Music also had an underdeveloped monitoring and alerts system, which resulted in lower solution stability and poor transparency into the state of the system. Based on the project needs, we created an AWS Cloudwatch system of monitoring, logging, and managing alerts for all major system parts.
Considering new functionality and part of the older features were realized on AWS as microservices, our DevOps engineer applied continuous integration and delivery (CI/CD) practices via a combination of AWS and the Bitbucket pipelines, which led to higher release frequency and quality. Itransition utilized Bitbucket as the repositories were already hosted there which helped us simplify the deployment process. Our team also established integration between Bitbucket and Jira Cloud, enabling the efficient visualization of the code and deployment status. The integration provides dashboards with overviews of code commits, deployment data, and development status.
The current deployment pipeline is that the development team pushes the commits to the repository, activating the CI/CD process of building and testing code, for the code then to be deployed to the production environment.
Our team currently provides 24/7 L1 support via phone and email and can immediately reach out in case of an emergency. Itransition also delivers L2 and L3 support services to resolve more systemic issues.
To make sure a large number of incoming support tickets wouldn’t delay new feature development, our team took several steps. First, since many of the reported bugs disrupted daily business operations, we analyzed in-depth the core reasons behind the interdependent or recurring bugs, developing a comprehensive overview of the weaker parts of the system. We also created an extensive bugs manual for the customer’s staff to prevent their incorrect prioritization by reporters. Furthermore, our team drew up a detailed manual for the L1 support, clarifying the rules for assigning the right ticket priority.
To better align our work with the customer’s business needs, we suggested implementing a filter for the incoming tickets. This way, when a ticket is created in Jira by a member of the Ditto Music team, a product manager and a development manager on the customer side review it and set priority. If it is high-priority, then the system publishes it to Slack, automatically pulling the relevant bug information from the system.
The majority of the legacy backend monolith code was created using CakePHP, with Symfony used for newer portions of the code. The existing microservices were developed using Laravel.
Itranistion’s team used Symfony to develop the new admin panel and the royalty splits microservices. We applied Elasticsearch for keeping a sales reports base and logs and Redis for session data storage. We used .NET for the sales-related functionality with Statistics revenue, Ledger, and Data mapping. Since the solution is supposed to process CSV and XLSX files, Itransition employed the CsvHelper and ExcelDataReader libraries. For the Data mapping, Itransition also utilized Entity Framework Core as the main framework and MySQL as a database.
Considering one of the customer’s major objectives was to continue transitioning from monolith code, our dedicated team developed microservices for new functionality, simultaneously moving the related legacy monolith code when it aligned with the current business objectives.
We migrated the sales- and royalties-related functionality from monolith to four interdependent microservices:
Moving the functionality to microservices enabled us to use more up-to-date and flexible technologies and frameworks. Taking into account that both admin panels use the same database, but different domains, we utilized API Platform in the new admin panel and established JWT authorization between the old admin panel and new APIs. It enabled us to migrate from the legacy CakePHP code and rewrite it with newer code and frameworks.
Developing solutions as microservices also helped reduce the burden on certain high-load operations (e.g. audio files processed as FFmpeg).
The platform is hosted on AWS. We applied Amazon S3 for data storage and Amazon RDS for database storage. Amazon CloudFront was used for content delivery and AWS Lambda for configuring redirects for the website.
Considering that Ditto Music’s content team uses the serverless GraphCMS, the customer wanted to enable the content team to deploy the website themselves and ensure faster content updates. To satisfy this project need, we enhanced the GraphCMS with a webhook, essentially an HTTP request, alerting the CD system (AWS Development Tools) about changes in the CMS (adding, editing, or deleting content). The webhook activates AWS Lambda through the Amazon API Gateway, starting the CD process with AWS CodeBuild and AWS CodePipeline. The admin panel code is hosted on Bitbucket, and for CI/CD we use Bitbucket Pipelines.
When developing the microservices infrastructure, we created the Auto scaling group to help the website deal with significantly varying traffic. Itransition utilized AWS Elastic Load Balancing with two networks, the public and the private one, to distribute traffic. Amazon EC2 with a firewall overlay provides instances for clusters that are created based on the launch template within the Auto scaling group. To allow the system to downscale and delete the unnecessary instances without losing data, we integrated a lifecycle hook. The lifecycle hook activates AWS Lambda through Amazon SNS. In turn, AWS Lambda retrieves information about the cluster from the hook and activates the Amazon ECS microservices cluster. Then the ECS labels the cluster as unavailable for deployment and starts migrating data to other nodes. When the node has cleared, the system deletes it.
Within the Amazon ECS microservices cluster, the docker images are stored in Amazon ECR. Amazon Route 53 allowed us to connect user requests to AWS-based infrastructure. In turn, Amazon Route 53 is managed through the Terraform module, which we utilize for adjusting settings for servers, clusters, and repositories. The Terraform module is also used for managing target groups that route requests for microservices.
To enable microservices deployment, we also needed to align the Terraform module with microservices. Terraform and microservices are all stored in separate repositories, but the Terraform code requires a task definition, which is located in the repositories with microservices. To enable communication between the Terraform code and microservices, we added a dummy (empty) task definition to Terraform with a syntax matching the microservices repositories. As a result, Terraform is able to recognize the task definition from the microservices repositories.
The Ditto Music platform uses Amazon S3 for storing audio, video and image content. When analyzing the system, our team noticed the system automatically assigned them a top-tier storage class for backups, which resulted in higher AWS costs for the customer. Considering backups do not require top-tier storage, we opted for a lower-grade storage class which saved the customer money on AWS fees.
Ditto Music processes require complex financial transactions and tracking among a number of registered users. To make operations seamless and reliable, we offered to realize communication between services through a frontside bus interface that follows the transactional outbox pattern. It helped preserve data and achieve data consistency.
We implemented a centralized logging and monitoring system to keep track of the changes in the system. The AWS ECS cluster collects data, then transports it to log groups on Amazon CloudWatch. To analyze the log, we applied a metric filter that analyzes each new line of the imported code based on the manually pre-programmed rules, marking the error lines. When the metric filter notices deviations from the desired parameters, it activates a CloudWatch Alarm. In turn, it triggers AWS Lambda, which pulls the relevant information about the error from the code and sends it as a notification on Slack.
Amazon ElastiCache for Redis is utilized for storing user sessions.
The platform stores a large amount of personal and financial information, making data security and system stability a priority for the customer. Having encountered DDoS attacks, Ditto Music wanted to improve its security, so we implemented a WAF firewall, which currently operates in the detection mode, monitoring and logging all potential threat alerts. When it detects an alert, the WAF firewall activates the prevention mode. We also hosted the GraphCMS on AWS, which results in higher data security and resistance in comparison with self-hosted solutions.
We employ AWS Organizations for environment account management to consolidate multiple AWS accounts into a centrally-managed system.
Our collaboration with Ditto Music started in 2020, and in a year we scaled up our dedicated team by 80% to meet the client’s demands in solution’s functionality and development speed. The team consisted of software developers, a solution architect on-demand, a project manager, and DevOps and QA specialists.
Our work on the project began with knowledge transfer from Ditto Music’s previous tech vendor. Since they changed multiple vendors over the last couple of years, project documentation was fragmented and incomplete.
This is why, to understand the intricacies of the project, our team analyzed code, studied the available epics, and held knowledge transfer meetings with the previous vendor.
For the project, we chose the Scrumban methodology as it allowed us to promptly address any arising issues or business goals. Scrum planning and management techniques enabled us to effectively and timely deliver new features and updates. However, to deal with the incoming support tickets, our team also needed greater operational flexibility, which is provided by Kanban elements.
In accordance with the Scrum elements, we worked in sprints and held sprint planning sessions every two weeks where PO/BA, Product Manager, Development Manager, our PM, and Team Lead discussed priorities for the upcoming sprint.
However, the scope of work for the sprint remains approximate as the development team’s efforts are distributed between two parallel streams: new functionality development and support and bug fixing, and it is hard to predict the number of incoming support tickets. The backlog is mostly filled by the PO/BA, as they are primarily responsible for writing tickets, but all the team members come with suggestions for potential tickets.
Daily calls enable us to stay on track with our task progress throughout the sprint and discuss all the project-related issues. We also have on-demand roadmap discussions with the same participants to align our perspectives on the development of new features. When a new major feature is to be developed, we organize cross-team meetings to discuss new feature development and implementation. Usually, we work as a unified team, sometimes splitting into sub-teams of two or three specialists to join efforts on a particular feature that requires closer collaboration between team members of narrower expertise. After the development and testing process has been finished, we organize demo sessions on demand with our dedicated team and the company’s stakeholders.
The project requires a high degree of flexibility from the dedicated team, so we have Kanban elements implemented, allowing us to quickly adapt to the changing business priorities. For example, the PO/BA has the possibility to alter tasks and their priorities during the ongoing sprint if the efforts of the development team should be redistributed. Kanban practices bolster our continuous delivery practices as the Kanban planning flexibility allows for frequent (up to 2 times per week) feature releases.
Itransition delivered a set of user-oriented and admin solutions for Ditto Music, introducing new features, creating a new admin panel, migrating a part of the solution to microservices, setting up DevOps practices, creating a monitoring system, and optimizing the support workflow.
Over the course of our collaboration, Ditto Music and Itransition have developed an effective working relationship, achieving a high degree of trust and cooperation. Currently, we continue enhancing the platform, providing development, QA, and support services, adding new features, and expanding the existing functionality.
Get AWS consulting services from Itransition. We help you migrate to AWS, set up IaC, adopt AWS-based microservices or serverless architecture.
Explore AWS migration guidelines and recommended tools, along with Itransition’s range of cloud-focused projects and services.
Learn how Itransition brought a legacy video editing platform up to date by modifying its architecture for an Australian startup.
Discover how Itransition redesigned custom event management software with a new scalable architecture, 4 feature-packed modules, and adjustable UI.
Learn how Itransition delivered a suite of custom conference management software and enriched it with bespoke modules automating event organization.