ContactMenu

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 logoLaravel
  • React logoReact
  • Inertia.js logoInertia.js
  • MySQL logoMySQL
  • Redis logoRedis
  • Webhooks logoWebhooks
  • REST API logoREST API
  • Pest logoPest
  • MCP Server logoMCP Server
  • GitHub Actions logoGitHub Actions
  • Sentry logoSentry
Problem

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.

Role

Owning 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.

Solution

A 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.

Addooco telephony management platform showing a visual call-flow editor with menus, queues, capacity checks and messages. 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.

Outcome

300+ 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.

Adam Hainsworth-Potter

Have an internal system that needs a safer pair of hands?

If a Laravel app, spreadsheet, or manual process is starting to hold the business up, tell me what is happening. I can help you work out whether it needs a build, a rescue, or a careful tidy-up.