January 5, 2024
In this article, we engage in a conversation with Curnan Reidy, who serves as the Team Leader for Software Development and the Product Manager for the Matching Engine at Spanish Point Technologies. Curnan delves into topics such as Continuous Integration/Continuous Deployment (CI/CD), Azure DevOps, and the significance of CI/CD in the context of both developers and customers.
I serve as both the team leader for our software development teams and the product manager for our Matching Engine application. Across three teams, we have a total of approximately twelve developers. In addition to my managerial responsibilities, I actively contribute to system design and serve as a principal developer. As part of my leadership role, I am committed to mentoring team members.
While Spanish Point undertakes software development across various teams like Dynamics, SharePoint Online / Office 365, and Power BI / Machine Learning, developers within these areas report to their respective team leaders.
Our team primarily engages in custom application development, and we don’t limit ourselves to a specific Microsoft technology. Instead, we collaborate closely with our customers, understanding their systems, and crafting tailored, bespoke applications. Currently, our team is involved in the development of applications used globally by clients in the music industry, including CISAC, and various music right organizations.
Approximately four years ago, we embraced the Continuous Integration/Continuous Deployment (CI/CD) approach and have since either built or migrated our custom applications to adhere to this streamlined process. Key projects, such as the Next Generation ISWC system, have been developed using CI/CD. This substantial, ongoing project, initiated in January 2019.
What is a typical development process using CI/CD for your team?
Previously, we utilized Visual Studio – TFS; however, we have transitioned to building applications using CI/CD and Azure DevOps, which has significantly enhanced our ability to deliver higher value and quality to our customers. For projects like the Next Generation ISWC system, we operate within a centralized Git code repository featuring various branches. The main branch of code has multiple sub-branches, facilitating the concurrent work of numerous developers or even multiple teams on the same system.
Unlike the traditional approach of writing code in isolation and waiting for deployments to test, our developers create new branches from the main branch. They introduce new features and bug fixes through pull requests. Upon submission of a pull request, preset unit tests are automatically initiated. Senior developers, including myself, then review the pull request, adding comments or suggesting changes. The developer can address issues, make necessary adjustments, and resubmit the pull request. Once approved, I can merge the code into the major branch. Given that many of our projects are client-facing, such as the ISWC project, these pipelines run simultaneously to ensure the accurate deployment of code to the correct environment.
What are the benefits of CI/CD?
There are significant advantages for both our customers and our development teams with the implementation of CI/CD. For customers, the introduction of CI/CD has led to a substantial improvement in quality assurance. As the team leader, I have the capability to review developers’ code before it is deployed to the customer environment. In Azure DevOps, automated unit tests are configured to assess each pull request automatically. It is the responsibility of our developers to create unit tests for the code and functionality they develop. These unit tests are integrated into the automated testing process during code check-ins and builds, as well as incorporated into test plans executed throughout the build phases. Test plans and automated unit tests are shared with customers, who have the option to add additional test requirements. For instance, in the Next Gen ISWC system, there are approximately 500 automated tests. Upon submission of .NET code, around 400 automated tests are run and must be successfully passed before the developer’s code is merged with the main branch. For Python code, there are approximately 100 automated tests.
From a day-to-day perspective, my team experiences increased efficiency. In the traditional approach of writing code locally, testing before deploying to a real environment can be challenging. However, with Azure DevOps, developers don’t have to wait for scheduled deployments to test and make changes to their code. Based on real-time unit tests and feedback from the team lead, developers can promptly make the necessary adjustments. Local code can then be deployed to the development environment faster—within 10 minutes in our team—rather than waiting for lengthy deployment schedules. The impact of CI/CD is also evident for customers, as the time between deployments has been drastically reduced, moving from a monthly schedule to multiple times a week.
In the case of the ISWC system, over 550 automated tests are conducted, encompassing both unit and integration tests.
How does CI/CD in Azure DevOps support agile development?
Azure DevOps is designed to support agile development processes, and within this framework, Azure Boards, reminiscent of Kanban boards, serve as a pivotal tool for work management. When we review the comprehensive project specifications, we create agile epics to encapsulate each specific section of the system under construction. These epics are further broken down into a backlog of items, housing the tasks or bug fixes essential for that particular phase of the build. The actual execution of the work is organized into sprints, with new tasks allocated every two weeks.
The seamless connectivity within Azure DevOps ensures that each task is intricately linked to the corresponding branches created for the project. When developers complete a pull request for their work, it is automatically associated with the relevant task on the Azure Boards project. This interconnectedness allows for easy tracking and comprehensive management of all tasks throughout the development process.
How does the Azure environment drive innovation?
Azure consistently introduces cutting-edge solutions and features that showcase high levels of innovation. In our current setup, we leverage a diverse set of features, with particular emphasis on two noteworthy offerings. Firstly, Azure Search facilitates swift and efficient search queries, while secondly, Azure Databricks provides robust support for processing substantial volumes of data. Both of these features are rooted in open-source technologies seamlessly integrated by Microsoft into the Azure service. As Microsoft products, they have evolved into managed services, simplifying the integration process significantly.
How do interested organisations get started with custom application development?
For organisations considering custom applications built using CI/CD, it is important to understand their current applications and technologies. I recommend attending one of our webinars or having an exploratory consultation with our team.