Boozt Fashion · Oct 2021 – May 2022
Boozt e-commerce backend
Money as a value object
- Problem
- Floats lose fractions of a krone, nothing stops kroner from being added to euros, and splitting an amount three ways quietly loses a unit.
- Use case
- Any system that handles prices, invoices or payouts, where amounts must add up exactly and currencies must never mix.
- What this demo shows
- Money.php keeps amounts as whole minor units (øre, cents) with the currency inside the object. Adding two different currencies throws, and allocate() splits 100 into 34, 33 and 33 so the parts always sum to the whole. Every operation returns a new object.
PHP / Symfony backend work on a large-scale Nordic fashion e-commerce platform, with a focus on quality, automated testing, and bringing structure to how the team picked up work.
Boozt Fashion is one of the larger online fashion retailers in the Nordics: a multi-brand platform that runs at the kind of throughput where small inefficiencies on the back end add up quickly. I joined as a System Engineer for an eight-month engagement and worked on the PHP / Symfony backend that powers a slice of that platform, with MySQL underneath.
The work fell into three buckets:
- Backend feature work. Symfony services, domain logic, and the bits of the data layer my team owned. The codebase was old enough to have a personality, which meant the most interesting trade-offs were rarely about which framework feature to use, but about how to add new behaviour without making the existing behaviour worse.
- Quality and test automation. Pushing the share of work that landed with automated coverage, covering both new logic and the legacy paths the new logic touched. Boring, gradual, and the only thing that actually moves a codebase's quality bar in the long run.
- Process: Kanban and requirements clarification. I helped introduce a Kanban flow to how my team picked up and finished work, and put visible effort into clarifying requirements before code was written. Small process changes, big day-to-day difference.
My contribution
I implemented backend functionality on a marketing-campaign booking platform built on PHP 8, Symfony and MySQL, the slice my team owned and shipped against during the eight-month engagement. Around the feature work I built out the automated-test surface using PHPUnit, Mockery and Behat, focusing on the legacy paths that the new logic touched as much as on the new logic itself. I introduced Kanban methodology to the team and aligned the full development team on the new process: helping establish the cadence around it, and putting visible effort into clarifying requirements before code was written. The small process changes that make the difference between a smooth week and a frantic one. I left in May 2022 with a clearer sense of what production-grade refactoring looks like in a high-traffic consumer codebase, and the muscle for the patient, gradual quality work that real platforms actually need.