The request almost always arrives in the same shape. We have forty courses built in Flash. Can you convert them to HTML5?
It sounds like a file-format problem, and it is priced like one. It is not one. Flash stopped running in browsers at the end of 2020, so anything still described as a Flash course has been unplayable for years — which means the real question is not how to convert it. The real question is why nobody noticed.
Courses that were genuinely load-bearing got rebuilt within weeks of the deadline. The ones still sitting in the library five years later are, with very few exceptions, courses nobody was taking. That is not an argument against rebuilding them. It is an argument for finding out which ones deserve it before anyone opens an authoring tool.
What is actually lost
When a legacy course comes in for conversion, four different things have usually gone missing, and they are worth separating because they cost very different amounts to recover.
1. The source files
A .swf is a compiled artifact. The editable project — the .fla, or the Captivate or Lectora source — is what a rebuild needs, and it is the thing most likely to be gone. It lived on a contractor's laptop, or on a file share that was migrated twice.
Without source, nobody is converting anything. They are rebuilding from the published output, which means watching the old course play and reconstructing it by hand. That is a different job with a different price, and any estimate that does not distinguish the two is guessing.
2. The interaction logic
Text and images survive. Behavior does not. Branching rules, conditional feedback, scoring weights, retry limits, and the specific reason slide 14 unlocks only after two correct answers — none of that is written down anywhere except in the compiled file.
This is where conversion projects overrun. Someone scopes the visible content, then discovers the assessment has fourteen branches and no documentation, and the rebuild in Storyline turns out to be authoring from scratch with a mood board.
3. The tracking contract
The old package reported to the LMS somehow, and something in a compliance report depends on how. Moving from SCORM 1.2 to 2004 looks like an upgrade and quietly changes the vocabulary: 1.2 has a single lesson_status carrying both completion and pass or fail, while 2004 splits it into completion_status and success_status. A course that reported passed now reports completed and passed as separate facts, and a report written against the old shape stops counting people it used to count.
Bookmarking has a harder edge. SCORM 1.2 caps suspend_data at 4,096 characters. Rebuild a long course with richer state tracking, keep the 1.2 wrapper because that is what the LMS is configured for, and resume silently breaks partway through — usually for the learners furthest along, which is the worst possible group to lose.
Test the published package in the actual LMS, not in preview. Preview does not implement the SCORM API, so it cannot reproduce a completion failure, a suspend-data truncation, or a status mapping error. A course that works everywhere except production is the normal outcome of testing everywhere except production.
4. The reason it existed
Every one of these courses was built to solve something. A regulator asked for evidence. A product shipped. An incident happened and training was the response.
Five years on, the trigger is often gone — the regulation changed, the product was retired, the process the course teaches has been replaced by a system that does it automatically. Converting that course faithfully produces a working HTML5 module that teaches the wrong thing accurately.
A conversion project that starts with the file format has already decided the content was worth keeping. That is the one assumption most worth testing.
Triage before conversion
The cheapest work on a legacy library is the work of deciding what not to rebuild. Four questions, asked per course, usually collapse the backlog by more than half.
- Who took this in the last two years, and what happened after? Completion data is usually still in the LMS even when the course will not launch. A course with no enrolments since 2021 is not a conversion candidate, it is a deletion candidate.
- Is the content still true? Have the owning team read the script, not the outline. Content decays quietly and outlines hide it.
- Does the source exist? Ask for the project file specifically, by extension. We have the course almost always means someone found the published output.
- What depends on the completion record? If an auditor, a certification, or a customer contract reads the report, the tracking behavior is a requirement to be matched deliberately, not a detail to be inherited.
What survives triage divides cleanly. Some courses need a genuine rebuild in a modern authoring tool. Some need to become a job aid, because they were reference material wearing a course costume — a two-page PDF that answers the question at the moment it is asked will beat a thirty-minute module nobody can find. And some need nothing at all, which is the answer that saves the most money and is the hardest to get agreement on.
The part worth saying out loud
Framing this as a conversion makes it a production task with a per-course price. Framing it as a curriculum review makes it a decision about what a team still needs to know — which is the actual question, and the one with budget attached.
The libraries that came through this well were not the ones that converted fastest. They were the ones that arrived on the other side smaller.