How Online Training Can Achieve The Same Results As Face-To-Face Training.

by Francesco Cesarini

Online Instructor Led Training? No way, José!

I have throughout the years been asked if we, at Erlang Solutions, offer online training. My standard reply was no. Not because I didn’t want to, but because I felt there was no way we could provide the same in-classroom experience virtually. Standing in front of the camera is not the same as being in front of the students. It would not work, I kept on repeating to myself.

The recent change brought upon us during the COVID-19 outbreak has made me realise just how wrong I was. We were forced into solving the problem of how to offer the same ability to share, teach and inspire, but completely online. This has led to rapidly developing and launching our online training offering and our virtual conferences.

We could not compromise on the value to students that an in-person classroom offered. Afterall, lockdowns and global travel restrictions meant many of our clients had backend infrastructure that was under strain. Waiting for the restrictions to be lifted for physical training to take place, or delivering a sub-standard online alternative was not an option.

Before I explain how we managed to do this successfully, I think it’s important for you to understand why I was so sceptical, and why I did not believe it could work. To put it simply, the challenges of past teaching experiences had given me a mental block. I thought it would be impossible to engage with a student who didn’t want to change the way they reason about programming online. After all, I had two decades of experience telling me that it is hard enough to do that in person. Taking the experience online would add another layer of complexity. So where did these mental blocks come from? To better explain, let’s head down memory lane for some examples gathered over my years teaching.

You Never Forget Your First Course

I taught my first ever course in 1999 during my Ericsson years. I never thought I would be any good at teaching. To be honest, I thought I would just confuse the students.

To make things more challenging, as with many of the corporate training courses at the time, I had a few members in the class who did not want to be there. They kept on trying to find flaws in Erlang. They happily pointed out a spelling error in the slide (I happily informed them it was the British spelling). Not giving up, they went back 30 slides and queried why American spelling had been used elsewhere. Using ‘$0’ to denote variables in matches was “stupid” they said, as you could not use it as an element and match against it (they never explained why you would want to do that). A few days into the first week, a student got up,with a big grin on his face and wrote the following on the whiteboard:

class Simple{  
    public static void main(String args[]){  
     System.out.println("Hello World");  

io:format("Hello World").

He instantiated the class and ran it on an imaginary JVM using the whiteboard. I countered by writing (and simulating the JAM) with the Erlang version of Hello World, asking him what his point was…. To which he argued the Java version was intuitive, whilst the Erlang one wasn’t.

I set off on a journey to unlearning their object-oriented mindset, rewiring their brains for a concurrent world. Three weeks later, they were not only sold, but also enthusiastic and looking forward to working with Erlang.

Every Student Is Different

In 2003, I got invited to lecture at the IT University of Gothenburg, now a part of Chalmers. Erlang was my student’s second language after…. you guessed right…. Java. It was an intensive 5-day course with hands-on exercises. When you get catapulted in a room packed with second-year students for a week, you have minutes to set the tone, get them engaged, participating and enthusiastic. In person I had a variety of ways to grab their attention, I chose to throw sweets at them and ask them what they had heard of the course. This gave me time to explain that whilst the upcoming days would be intensive, they would also be fun.

In my 10 years teaching at the IT University, I ended up having 700 students, all of them with different needs and levels of understanding of functional programming.

When teaching in person, you can observe the body language in a room whilst interacting with a group. If you need to, you have a number of ways to surprise or engage them to get their attention. You can sit down next to them, reward them for participating, or as I did, you can throw sweets at them.

How was I going to throw sweets remotely when someone starts answering emails instead of questions? How do you understand a student is struggling when you can’t study their body language?

This was another massive reason I thought there was no way to deliver a course effectively without being in the same room as the students.

Fast Forward to March 2020 - We Did It!

load testing diagram

This March, Robert Virding and I set off to teach our first two online courses. Erlang Programming Training for Beginners followed by the OTP Training for Erlang Programmers course a week later. Two courses, as it would allow us to address issues and tooling. We evaluated about half a dozen online video conferencing and remote learning tools to find something that offered us the features we felt we needed to deliver the material and keep students engaged along the way.

As I mentioned before, every student is different. And, that was the case in these classes too. We had students who had registered for physical training courses that were postponed, alongside handpicked volunteers. Before the course, some were happy to be taught remote, some had even taught online training before, and others shared the same reservations I initially had.

The first advantage of teaching remotely was that no one had to travel. Before this course, Robert Virding and I had never taught a course together because the logistics of having us in the same place for a week were too difficult.

Without the need to travel, it is easier for teachers to take turns running the classroom, without the need for it to be a full day commitment. This opens up possibilities we had never thought of, such as special guests who can join the course and share their knowledge with the class. That might be in the form of a lecture, Q&A sessions with the students or even just sharing the teaching load.

These advantages apply not only to the trainers, but also to the delegates. Online training opens up a larger pool of attendees who can attend the course from the comfort of their own homes. It’s an exciting opportunity to connect BEAM users from right around the world in our classes. We also now have interesting opportunities to share our passion and knowledge with more people by offering courses in Spanish or on U.S friendly timezones. With an international crowd who speaks over 20 languages at Erlang Solutions, you can easily guess where this is heading.

Tooling: Staying Focused Whilst Participating

When Robert and I started teaching, the first thing we did with our training manager was to walk the students through all of the Zoom features, and how we were hoping they could be used. Whilst we’ve all used Zoom, there are features many of us have not been exposed to. From providing feedback to the lecturer, the chat, views and break out rooms. We asked the students to all turn on their cameras and keep them on. We did the same even if we were not lecturing or taking breaks. This immediately created a link not only between the trainer and the students, but also among the students themselves.

Everyone was focused, you could clearly see they were paying attention and following the lectures. The video links allowed us to interact with students on a personal level, and conversations often arose around the topic we were discussing, or some other, random yet related one. The interaction with students allowed for them to get a deep, and personalised lesson as they asked the questions or shared their thoughts on the things that were most important to them. Many, in their evaluation, said this was the most valuable part of the course. This personal interaction was something they could not get by reading a book or watching a pre-recorded lecture. We had feared that interaction would not happen naturally, when in fact, all we had to do was act as a catalyst and the students asked the right questions, triggering valuable conversations.

Exercises have often been the most critical part of any training course. It is where the apple falls on the head, prompting the delegates ‘aha’ moment. This was another concern I had, and the reason why we picked a conferencing tool with breakout rooms. It allowed us to break delegates into groups of two, share screens and pair-program. While pair programming is not for everyone, those who wanted to run their own race still had a companion they could ask questions to before calling in an instructor. Robert and I went from breakout room to breakout room to check in and make sure everyone was on track. That resulted in even more spontaneous conversations you would expect during coffee breaks or lunches. We discussed technical challenges, approaches and solutions. Exercises progressed well, but… I did miss the ability to take over the student’s editor and refactor their code, explaining alternative approaches. This is particularly visible when first working with recursion or concurrency. If the student sees their code being refactored using common idioms and patterns, these patterns are more likely to be understood and stick. Telling the student through a screen share what to do is not practical and takes too long. So, to address this, we are evaluating Codecast, and plan on using it for our next course. We are also offering 30 minute, one on one sessions, with the trainer the week after the course. This allows the delegates to complete their exercises and get detailed feedback whilst asking any follow-up questions. Whilst we plan on keeping the online classes small to retain the personal touch, we will have the opportunity to take on board assistants who can help the trainer during the exercises.

The ability to superimpose text on slides works better than a whiteboard, particularly because it spares the delegates having to deal with my messy handwriting. And we’re able to replicate the whiteboard by using an iPad and Apple pencil. This is especially important when describing concurrency models, message flow and supervision trees, being able to quickly draw circles and arrows is a must.

The Sky is the Limit

Based on the feedback we received from the students, our first online training courses were a success. And whilst it is not in-person training, it definitely is a face to face one. Importantly, for the delegates, the value of the experience is the same. It opens up new opportunities, bringing courses in languages other than English. And it allows core committers, language inventors and other subject matter experts who do not have the bandwidth to teach the whole course to pop by for a guest lecture or a Q&A session.

As I am writing this, Michal Slaski is delivering a course on the BEAM internals with a guest appearance from the Erlang core team member and BEAM maintainer Lukas Larsson for a Q&A session, and Robert Virding for the section on how the BEAM handles concurrency.

All of this is now possible, whilst having a minimal impact on our carbon footprint. And it was great being able to teach with Robert Virding, something I had wanted to do for well over a decade, but never got the opportunity. The only downside? Not being able to go out with the students for our customary pizza and beer on the last evening. We’ll have to meet in person at one of our conferences once social distancing restrictions are lifted. Until then, let’s get on with what we like doing best: sharing, inspiring and making an impact!

We are frequently adding new courses to our list of online training, there are a variety of technologies and skill levels to make sure that no matter where you are in your journey, there is something to take you to the next level. To see our upcoming courses head to . To join our meet the trainers webinar, featuring Francesco Cesarini, Robert Virding and Michal Slaski register at

*Francesco Cesarini is founder and technical director at Erlang Solutions. He is the co-author of ‘Erlang Programming’ and 'Designing for Scalability with Erlang/OTP’ both published by O'Reilly Media. He is a lecturer at the University of Oxford, has participated in the Future Learn Erlang MOOC, O'Reilly and University of Kent online Master Classes and is a regular conference speaker and tutor. *

Go back to the blog


Thank you for your message

We sent you a confirmation email to let you know we received it. One of our colleagues will get in touch shortly.
Have a nice day!