Ryanair logo
AI/ML

A training platform that cut course updates from weeks to hours for an airline

Ryanair's staff training was slow and expensive to update. Every change meant re-recording video with human instructors. I helped build a platform that took course updates from weeks to hours, with AI video lessons, a cited Q&A assistant, and voice practice that replaced paired role-play.

RyanairSoftware Development Engineer (AWS)Oct 2024 – Mar 2025
Download one-pager (PDF)
Weeks→hrs
course update time
82%
questions self-served
4.8k
questions answered / month
47%
fewer SME escalations

Problem

Operational training inside a major airline is an unglamorous, expensive, never-ending workload. New staff need training, current staff need re-certification, rules change, and the workforce spans many languages and locales. The business pain was update speed and cost: recording video courses with human instructors was slow, and every content change meant booking studio time again, so material was often out of date and the training team was permanently behind.

Ryanair wanted to test whether modern AI could change that pipeline: instructors that could be regenerated when content changes, an assistant that knew the material and could answer trainee questions, and conversational practice for procedures that otherwise needed a human role-play partner.

Process

The framing decision was to attack update cost, not novelty. It would have been easy to chase the flashiest capability; instead we asked which part of the workload actually drained the training team's time and money. It was re-recording. So the platform was designed around making updates cheap and fast, and where stock tools already cleared the quality bar we used them rather than building. Benchmarking showed strong retrieval and guardrails beat any custom model training for a factual, citable use case, so we cut fine-tuning from scope.

I joined as the AWS engineer driving the solution architecture. The platform had three parts:

  1. Course delivery via Synthesia. Course material authored in markdown, fed to Synthesia to generate video lessons with selectable presenters and languages. Updating a course means re-rendering the affected lessons, with no studio time.
  2. Q&A assistant on Bedrock with RAG. A trainee could ask "what's the procedure for X?" mid-course; the assistant retrieved the relevant section and answered citing it. Grounding was essential. This is training material, not chit-chat.
  3. Voice practice via Lex + Transcribe. Scenarios like customer-service handling need speaking practice. Lex modelled the dialogue, Transcribe handled speech-to-text, and we scored the trainee's response against a rubric.

Much of the work was integration discipline: sane error handling, locale awareness threaded through, and content versioning so a trainee mid-module never saw a half-updated course.

Outcome

Updating a course module dropped from weeks to hours, the change that mattered most to a team that was always behind, and re-recording with human instructors was eliminated. The Q&A assistant answered with citations into the course material, which made trainers comfortable with what trainees saw. Voice practice covered scenarios that previously needed paired human sessions, freeing trainer time. The platform ran across multiple modules in multiple languages.

"What used to take us weeks to update now takes an afternoon. That's changed how current we can keep our training."

Head of Training Delivery

Architecture

Ryanair architecture diagram
For engineersTechnical Deep Dive
Expand

High-level architecture

Course material is authored as markdown and versioned in S3. From there three things happen: a Synthesia render pipeline produces MP4 lessons with captions per language, embeddings are generated into an OpenSearch RAG index, and a Bedrock guardrail config pins the course-specific allowed topics. The trainee experience is a React app with three surfaces: a video player serving Synthesia output from CloudFront, a Q&A assistant (Bedrock streaming plus RAG), and voice practice (a Lex bot per scenario with Transcribe speech-to-text). Per-trainee progress, attempts and scores live in DynamoDB. The architecture diagram above shows how these layers connect.

RAG with course versioning

The assistant needed to answer about the course version this trainee is on, not the latest. We tagged every embedded chunk with (course_id, version, chunk_id) and pinned the trainee's session to a version. When a trainer published a new version, in-progress trainees finished on their pinned version; new starts went to the latest.

Citations were enforced. The system prompt required every answer to quote a specific chunk by ID, and the UI rendered it inline as a "from your course material" block.

Voice practice with Lex

Lex modelled each practice scenario as an intent slot graph: prompt → expected response shape → branch. Transcribe converted the spoken response to text; Lex matched it, then handed off to Lambda for scoring.

Scoring used a rubric prompt against Bedrock, not a trained classifier, because criteria varied per scenario and we needed quick iteration with the training team. Latency was fine because voice practice is turn-taking, not real-time.

Multilingual considerations

Synthesia's multi-language presenters did most of the output work. The harder part was input: the assistant and voice flows. We built per-language Bedrock prompts and Lex bots rather than translating in and out of English; quality was meaningfully better when the model worked in-language end to end.

Trade-offs

  • No fine-tuning. Stronger RAG and grounding beat fine-tuning for this factual, citable use case.
  • Lex over a custom LLM-driven dialogue. The dialogue shape was structured, and Lex's slot-fill model was easier for the training team to debug than freeform LLM transitions.
  • Synthesia vs in-house generation. We used Synthesia rather than building a video pipeline. The trade-off was cost and lock-in; the win was an order-of-magnitude faster delivery.