Role: Engineering Manager (alongside my Senior Engineering Manager role) · Partner: Ryanair · Stack: AWS Lambda, Node, Payload CMS, npm

The problem

Ryanair wanted coordinated campaigns running across every touchpoint and product in the booking journey. Multi-step. Multi-location. Several live at the same time, with 50+ planned a year. All of it tied to a fixed partner go-live date.

The same system had to serve CarTrawler’s own marketing and commercial teams. So the project arrived as two things at once: a partner commitment and an internal wishlist.

Cutting it down first

Every department had asked for something. Before any design work, I worked with the architects and the product team to separate what the go-live actually needed from what people wanted eventually. We cut it to an MVP.

That was the most valuable thing I did on this project. A fixed partner date and an open scope is how delivery fails.

Build vs buy

We ran whiteboarding sessions on the proposed solution and documented why third-party platforms did not fit.

The combination is what ruled them out. Coordinated multi-step campaigns across a partner’s touchpoints, consistent rendering across CarTrawler’s own heterogeneous frontends, and marketing able to self-serve without engineering in the loop. No platform covered all three.

We wrote the rationale down rather than assuming it. That record mattered every time the question came back.

What we built

Three tiers.

  • Campaign service. Dedicated build on AWS, Lambda-based. Kept deliberately separate from the booking path so campaign content could never take the booking flow down.
  • Node middleware with Payload CMS. The authoring layer. Marketing create, manage and duplicate campaigns across locations and partners themselves.
  • npm package. One client every CarTrawler frontend attaches to, so campaigns render consistently regardless of product stack, device or screen size.

Before committing, I had the team prototype all three seams in parallel. Backend serving content. Payload CMS secure and fit for purpose. The npm package proven across every product stack. Prove the risky parts, then build.

Confidence before go-live

I went to Product for the real number. Ryanair alone was a million visits a day. We scheduled load testing with DevOps at double that.

I also ran sharing sessions with Security and Architecture to get the solution formally validated, rather than asking forgiveness at the end.

The people part

Two teams, backend and middleware, under a hard deadline. Tension built. I got the Lead Architect and the Director of Engineering into a coffee and chat with them and took the heat out of it before it cost us delivery.

I also coordinated hiring additional developers onto the squad, so the deadline did not get paid for out of other projects.

Outcome

Live on time.

The system then earned its own roadmap. Marketing kept coming back with more they wanted from it, which matters to me more than the launch did.