PORTFOLIO//TRAMOS
3 screens · click to open live
Cost modelling for multi-leg transport networks over a thirty-year horizon
In four months, I replaced a transport estimation script with an application capable of costing complex multi-leg networks across 1,000+ commodities and more than 30 years of project demand. The solution combined a network designer, costing engine, and budget workflow, with the architecture deliberately split between what Power Platform could provide quickly and what needed to be engineered from scratch.
I was the only engineer on a four-person team, working with three logistics specialists who owned the domain calculations and guided the interface. The original tool was a console script that counted containers, trucks, trips, and kilometres behind a fuel estimate; the replacement needed to let planners define origins, demand splits, transport modes, utilisation, legs, and destinations, then apply those networks to commodities and material groups and resolve the resulting cost month by month across the life of the project.
The four-month deadline made technology choice part of the architecture. I used Power Platform for the multi-user shell, shared components, and approval workflow, which kept the delivery practical while allowing the engineering effort to concentrate on the network editor, calculation engine, authentication through Entra, and the authorisation rules governing who could generate a budget.
That decision did not mean keeping everything inside the platform. The first version of the network editor used Power Apps galleries to represent the underlying data, but they proved too restrictive for the way planners actually needed to work. Rather than forcing the workflow into those constraints, I replaced the galleries with custom React components hosted inside the platform. It increased the complexity of the solution, but produced an editor that could properly support network design.
The calculation engine followed the same principle. Running as a Python service on Azure Functions, it expanded the network into commodity-by-node-by-month quantities, priced the resulting movements, and handled complex routing efficiently, including manually defined road sections. I also redesigned and optimised the routing algorithms, parallelised independent work, and cached recurring routes so that repeated calculations did not have to solve the same paths again.
Those changes made the application practical for scenario analysis: a full network could return in under thirty seconds, while a re-run completed in under ten. The work also turned individual network designs into reusable assets, allowing planners to apply an existing network to different commodities rather than recreating it each time.
The final budgets emerged as line-by-line capex and opex proposals that could be routed through review and approval, giving planners a way to compare competing scenarios before selecting one. The result was a substantial step up from the original script, not because every part was custom-built, but because each technology was used where it solved the problem most effectively.
Sole Full-stack Engineer · Four-person team · Four months
Application architecture on Power Platform, with custom React components for the interactive parts. The Python calculation service on Azure Functions, the schedule import, and the Entra identity and access setup.
The same network in time rather than in space. Once demand resolves to a node and a month, the movements carrying it have positions and durations, and the plan becomes a view of the same figures the cost was computed from.
Cost that nobody types in. Storage is charged on how long material sits, so the figure follows from the schedule that put it there, and changing the schedule changes the charge. Everything on this screen is downstream of the network on the previous one.
Outside of software, I’m into music, gaming (both board and video), and travelling. Basically, if it involves a good challenge, a bit of competition, or an excuse to go somewhere new, I’m probably interested.
Reference implementation. The original is under NDA.