1. Case Study – AppDynamics Training’s
unique content strategy
Single sourcing – DIY, Fast, and on a Budget
2. Where we were…
• 1 person shop, with other responsibilities
• 20+ video library when I started this project
• Frequent UI change – existing tutorials to be updated 3 times a year
• Multi-platform product
• Huge backlog of new tutorials request, managed to add 1-2 new
titles per release cycle
• Produced with Articulate Storyline / Camtasia Studio 8, all items
were stored in LMS
2
4. Requirements for Solution
• No licensing limit & easy to learn – can our intern help?
• Reusable at frame level
• Version control enabled
• Respond to the modular, informal, JIT learning trend
• Must work within the traditional SCORM framework also
4
6. Additional Script
1. Config file
• Only contains the image names, duration, and the audio file name
• Can be prepared by anyone, for each video
2. Genmp4 script
3. UsageReport script
6
11. Demo Steps Recap
1. Run svn update
(To retrieve all the items others checked in)
2. Take screenshots and prepare slides at 1280x 720. Browse
images in the repository for reusable screenshots.
(i.e. application dashboard image appears ¾ of existing videos and most of them
can use the same image. When a UI change happens, by replacing one screenshot
we can update all 15 videos)
3. Prepare a voiceover file
No need to slice them up per scene anymore. Just time how long each image
should show. Insert silence as needed
In some cases, run the cross reference script to check if an image can be replaced.
4. Prepare a config file, then run genmp4 script to compile a video
5. Check in all the new materials into the repository
11
12. Extending Output for SCORM Courses
• FFmpeg output can be inserted into traditional elearning
development tools for course-length SCORM output
• Spend meaningful development time creating knowledge check
quizzes, games, and other interactions to reinforce learning
12
13. Stats in a month
• 28 tutorials are created
• Tutorials are packaged into a course with bridge scenes
• Cut down the time estimated for updating the new tutorials at the
next release to 1/3
13
14. Takes Lots of Initial Thinking….
• Popup size?
• Naming conventions?
• Directory structure?
• Scenarios to maximize the reusability
• Know that some bells and whistles have to go
14
Before talking about the solutions I came up with, let me tell you my situation.
1 person shop, with other responsibilities (i.e. Maintain the 2 ILT course materials)
Our training department now has 10 people – 1 manager, 3 instructional designers, 1 coordinator, 1 lab manager, and 4 instructors.
Out of 3 instructional designers, I’m pretty much the only person working on these tutorials. And even I am splitting my time between the video production and other tasks. For example, I’m updating all the classroom training presentations for each release.
20+ video library when I started this project
Frequent UI change – existing tutorials to be updated 3 times a year
This year we had 2 releases so far, and another one coming up in November. We are expanding our product capabilities, and UI change is significant. In fact, Ui can change outside of the release cycle. Sometimes I’m surprised to find a new view while I’m nooding around in the product! What this means is in worse case all 25 of those videos must be updated periodically, by one person.
Multi-platform product
Our solution can monitor applications on various platforms… Java, .NET, PHP, Node, iOS, Android….This means there can be a set of videos that talks about the same thing in different flavors.
Huge backlog of new tutorials request
There are only 25 tutorials, of course we have a huge backlog. With all the other responsibilities, I could manage to add 1-2 new titles per release cycle.
Produced using Articulate Storyline / Camtasia Studio 8, All items were stored in LMS
So output was basically an HTML file with java script and such, typical SCORM video set.
So here’s the problem…
Time Issue – we had to forego one whole release update for our tutorials. I was migrating our ILT material production from word x ppt to Madcap Flare, so while now it’s much less time consuming to take care of the ILT materials in different flavors, the initial migration takes time. So we were already one release behind, and now we needed to catch up by updating all 25 tutorials. But then… when am I going to work on the backlog? There’s no way of expanding our library.
Tool Issue
Some tools are PC-only. Tools and learning curve keeps people outside of the curriculum team from pitching in to increase production output.
Delivery mechanism issue
In keeping with the overall trend of ubiquitous, informal, modular learning model, we moved our videos from LMS to our server and made it available to anyone. But as they have been produced as a SCORM videos, they are in HTML x java script and assets format, and cannot be uploaded to a popular video hosting services such as YouTube.
Reusability issue
We kept our videos short and sweet, and strung them together as needed for a full self-paced courses. This modular structure, and the use of rapid eLearning development tools, expedited the production process and content reusability, but it wasn’t enough to help me. When single UI change can affect up to 15 videos, updating each of the 15 is still a separate effort.
Based on the situation I was in, here’s the set of requirements I had.
No licensing limit & easy to learn
I wanted our intern for the summer to be able to help if she can spare some time. Or accept contents from any willing people outside of our department. We are all Mac people at AppDynamics…. I can set up a VM and install PC, and install an elearning development tools every time someone comes forward to contribute contents.
Reusable at frame level
Reusability needs to expand to the frame level, not a video level. We modularized the videos and reused the same tutorial in a course-length self paced classes, but that’s not enough.
Version control enabled
Let’s take Camtasia for example, in ideal world, you check in both .trec and .camproj files with all the other assets in some shared directory, so whoever ends up updating it would have the previous version. But in past I’ve never worked with people who are diligent 100% of the time. I wanted to have a version control capability so with one action you have everything locally, and check in everything without manually dealing with GUI. Of course in my case I was 1 person shop so no one was ever digging my materials, to leverage, but I know we are a growing company and this will soon become an issue. We’ve all seen it.
Respond to the modular, informal, JIT learning trend
I want us to be able to embed videos without iframe. I want our customers to be able to share my videos. I want our videos to appear as if it’s embedded in our emails to our customers and prospects, with Vimeo’s merge tags. I want to be able to take advantage of the closed captioning options of YouTube. So our output must be streamable, must have proper codecs to be hosted by popular video streaming services.
Must work within the traditional SCORM framework also
While facilitating learning by making videos embeddable and streamable, we want to be able to reuse them in our self-paced training courses. We should be able to insert the short videos into a traditional eLearning development tools, string them together for a more structured learning experience, supplement interactions for better learning outcome, and publish to SCORM.
After a few months of struggle, this is my solution.
FFmpeg
Cross-platform open source video creation tool
Primarily used for editing and converting videos into a streamable format
Has a functionality to create a “slide show” video with images, and that’s what we hacked…
For source-control capability, I got Subversion, it is a free source control system that’s been around for a long time.
I just chose Subversion because we have Madcap Flare and it works very well with Subversion, so I already got a repository set up, so it was the easiest option for me. I think using GIT is perfectly ok too.
Requiring people to use command line extensively does not meet the “ease of use” requirementWe need to separate the easy-to-create config file, and the actual command file
Since ffmpeg is a command line tool, and it’s primary purpose is not to create a slide show style video with UI screenshots, I had to supplement the tool with some additional script.
For example, ffmpeg just shows all of the images in the folder for the same duration, in the order of the image timestamp… that’s hardly in any way useful to us. We have to be able to use whatever images, named in whatever ways, in whatever order we want, for however long we want for each image.
Also, ffmpeg is a command line tool. While we are pretty technical group of people, I didn’t want people to have to learn ffmpeg commands to use the tool. I didn’t want to require people to know anything beyond the general, already familiar command line language.
So, this is how I decided to solve this problem.
Genmp4
First I figured out the way to specify the duration for each image. Then to solve the order issue, I decided to copy all the images used in a video in a temp folder, and “touch” each image there in the order specified so when the video is compiled it’ll go by that order, and not the actual order of the image creation. Then I put all the extra command, along with the basic slide show compilation command in a script. And the script just sits in a directory. Users don’t even have to see it.
All users have to do is to create a text file with .config extension. And there you just need to list the screenshot path, duration, and the specify voiceover file. Then with basic command line knowledge, you navigate to the right directory, and execute the compilation script.
UsageReport
I will explain the importance of this fully in a bit, but this helps you to look up where a certain image is used, across all videos. You can imagine it’s useful when you are replacing screenshots when a new release happens.
Now that we know about to solution, let’s talk about actual use case, then I’ll demo.
This diagram is just a small part of my content world. Each box represents an image, and different colors each represent a different video.
Notice some images are used multiple times, by the same video, and by different videos too.
App Dashboard screen is the landing page when you log into our product, so many videos start from there. BT List is also heavily used. One video keeps coming back to that scene to show different tricks you can do on that page. Also, another video is using that image to demo a troubleshooting steps.
What this means is, now when a UI changes, you just need to replace the image in the directory to update all the scenes.
Here’s an example, that heavily used Application Dashboard scene – our UI has changed like this. Now instead of reshooting the 15 scenes, I just need to replace one image, and run the script for 15 times.
There’s a weakness in this ffmpeg slideshow format of tutorials… you don’t have a cursor. Having a cursor pointing at something makes it less reusable, but we want to direct viewer’s attention to a certain feature on screen.
Here’s my solution. I’ll keep using the Application Dashboard example. I picked the base image, named it “-1”. And the rest of the -# are just the same image with different masks. Mask / highlight directs user’s attention just as well.
And when the release time comes… I’ll replace the -1 image. Now our intern can apply masks and create -2 to -6 for me, without the knowledge of our product at all.
Take a tour of the directory setup.
Generate slide images from a powerpoint deck
Add the slide images and already prepared screenshots to the correct directory
Prepare a config file (have a halfway prepared ready and just go over it)
Run UsageReport script for image replacement case
Run Genmp4 to compile
Show the uploaded video on YouTube
Show how it’s used in a SCORM video
I don’t think I need to demo here. Camtasia/storyline is a familiar tool to most of us. I’ll just switch to VM and show the Storyline course structure.
For this to be successful, you have to do a lot of initial thinking.
I didn’t think about these initially, so I had to figure out these things one by one as I was migrating existing SCORM videos to this format. In some cases, I didn’t think about it until I produced a few videos, and I ended up going back and redid some after I decided on a general principle.
Popup Size
It’s better to decide on this. While you are reusing images, it’ll be annoying a popup size changes. It ruins the continuity and looks disjointed. They are disjointed but we don’t want viewers to know.
Naming conventions, Directory structure
Screenshot naming rules and directory structures must be something easy enough for everyone to follow. I used the product’s menu structure as a guideline but as we all know, some features and screens are accessible from multiple locations…
File name… I strongly recommend using the 01-1, 01-2…. Method. It’s been working very well for me.
Scenarios to maximize the reusability
While I was migrating the contents from the old format to this one, I consolidated my scenarios. So for example, in Error troubleshooting, I used an image of an errored out transaction. When I work on a “Tour of the Application Event List Page”, if I wanted to know how you can drill down into a certain event, I’d pick the particular error transaction so I can reuse the same image. It’s like a puzzle and I now it takes more thinking now when you write a scenario, but I kind of enjoy it.
Know some bells and whistles have to go
I’m trying to make the production speed 10x faster. I am willing to ditch cool transitions and zooms. I’d rather deliver the latest contents, or reduce the backlog so our customers have a video on most features. We do allocate more concentrated effort on conceptual videos with longer shelf life, but the tutorials produced in this mode won’t have all the shiny visuals.
So that’s my unconventional solution to a fairly common small production team issue. Any questions?