Enterprise Tax Optimisation Platform
Leading development and engineering culture on a large-scale tax optimisation platform - refactoring legacy code, upskilling graduate developers and delivering features that helped customers find the most cost-effective route to paying tax.
Overview
I joined as lead developer with a dual mandate: modernise the platform and grow the engineering team. The codebase needed significant refactoring - legacy patterns, no tests, no CI/CD. I led that cleanup while simultaneously delivering features, introducing AWS automation and mentoring graduate developers into capable engineers. The platform itself solved a genuinely interesting problem: helping customers find the most cost-effective way to pay tax in a market where tax obligations are tradable.
The Engagement
This was a dual-purpose engagement. First, I was responsible for upskilling a team of graduate developers - teaching test-driven development, object-oriented PHP, SOLID principles and setting clear career paths so they understood what was expected at each level from junior through to mid-level and beyond. Second, I led the day-to-day development of the platform itself, working across the Laravel backend and Angular frontend to deliver features, refactor legacy code and introduce modern engineering practices to a codebase that had outgrown its original standards.
The Platform
The platform served an international tax market where tax obligations are tradable - customers could buy and sell tax positions to secure the best rates based on their required dates. The system calculated the most cost-effective route for paying tax, factoring in available rates, timing and trading opportunities. The result was tangible savings for end users who would otherwise overpay through less optimised channels.
Legacy Refactoring
The existing codebase was riddled with repeated logic, tightly coupled components and practices that had fallen behind modern standards. Working alongside another engineer under my lead, we systematically refactored the worst areas - extracting shared logic into DTOs and dedicated classes, applying SOLID principles, and breaking apart monolithic controllers into focused, testable units. This wasn't a rewrite; it was disciplined, incremental improvement that made the codebase maintainable without disrupting delivery.
Testing & Automation
There were no automated tests when I joined. We began implementing test coverage across the codebase with the goal of reaching as wide a coverage as possible, prioritising the most critical calculation and workflow paths first. AWS Lambda functions and Step Functions were introduced to automate processes that had previously required manual intervention - using true/false gate workflows to route tax calculations and trigger downstream actions based on outcomes. A CI/CD framework was implemented to gate deployments, and Larastan was introduced incrementally off-branch given the scale of the project.
Team Development
A significant part of the role was mentoring graduate developers and setting them on a trajectory toward more senior positions. This meant structured teaching of TDD workflows, object-oriented PHP patterns and architectural thinking - not just code reviews, but pairing sessions, career path conversations and setting clear expectations for what each level of seniority should demonstrate. Several graduates progressed to junior and mid-level positions during the engagement.
Technology Stack
Technical Challenges
Refactoring a Legacy Codebase Under Active Development
Systematically refactored repeated logic, tightly coupled components and outdated patterns into clean, SOLID-compliant code using DTOs and dedicated classes - all while continuing to deliver features and maintaining platform stability for live users.
Introducing Test Coverage From Zero
Built a testing culture and infrastructure from scratch on a large, untested codebase. Prioritised critical calculation paths and workflows first, implemented CI/CD gating, and introduced Larastan incrementally off-branch to avoid blocking delivery while steadily improving type safety.
Automating Tax Calculation Workflows With AWS
Implemented Lambda functions and Step Function gate workflows to automate tax calculation routing and downstream processing. True/false gates determined the optimal path based on calculation outcomes, replacing manual processes and reducing turnaround time for customers.