Addooco built a telephony platform tested for 300+ concurrent calls per organisation
300+Concurrent calls per organisation in load tests
95%+Automated code coverage at handover
Internal teamRecruited to take the product forward
Laravel
React
Inertia.js
MySQL
Redis
Webhooks
REST API
Pest
MCP Server
GitHub Actions
Sentry
A new venture needed a product and a software team
Addooco provides managed IT and infrastructure services. A joint venture with a dispatch software provider gave the business an opportunity to expand into software products, but the new company needed a production-ready telephony platform to get started.
The management platform had to connect the telephony system with dispatch data, giving organisations control over agents, queues and call routing. Both upstream systems were still being developed, so their APIs and schemas kept changing during delivery.
Addooco also needed the people and processes to keep developing the product after the first version. Delivering the software was only part of the brief.
RoleOwning delivery, then building the team to take over
I joined as Head of Software Engineering, initially as the sole engineer on the management platform.
I owned its architecture and implementation, and coordinated delivery between Addooco, the telephony contractor and the dispatch vendor. That meant keeping three businesses aligned while building against systems that were changing alongside my own.
I also recruited the internal engineering team and established the release, testing and monitoring processes they would use to take the product forward.
SolutionA Laravel management platform connecting calls and bookings
I built the multi-tenant backend in Laravel and PHP, with a React frontend using Inertia.js.
The telephony API integration managed agents, queues and routing logic. Webhooks, Redis caching and background queues supported low-latency call handling. The interface included a visual call-flow editor for configuring how incoming calls moved through menus, queues and messages.
The dispatch integration supplied bookings, estimates and customer data. I exposed those capabilities through an MCP server, giving the AI voice system access to the dispatch information it needed during a call.
Challenges
Keeping changing supplier APIs out of the rest of the app
The integration boundaries mattered because neither upstream API was settled. A response change in the telephony or dispatch system could otherwise spread through the management platform and its frontend.
I isolated the APIs behind requests and typed data objects, then used Laravel resources to control the data sent to React. Integration tests covered response variations as the upstream schemas changed. That gave each supplier’s data a clear boundary and kept the interface from depending directly on their response formats.
Handover needed the same care. I set up GitHub Actions CI/CD, protected release workflows, Sentry monitoring and browser smoke tests so the recruited team had a repeatable way to test, release and monitor changes.
Outcome300+ concurrent calls per organisation in load tests
Load tests demonstrated support for more than 300 concurrent calls per organisation, with headroom to scale further.
Within one year, I delivered the MVP, deployed it to production and handed it over to the recruited team with automated code coverage above 95%.
Addooco had the first product version for its joint venture, together with an internal team and established delivery processes to continue the work.
We’ve appreciated the contribution Adam made during his time at Addooco. His leadership, technical expertise, and the culture he helped build have been genuinely valued.
