How modern is your e-learning?

E-learning has come a long way since I first started lecturing in 2006. We now have tools to build more supportive and engaging learning which can ultimately contribute to more efficient working practices and better success rates for our learners.

With such rapid developments in the field it’s easy for organisations to fall behind; what passed for an advanced online course a decade ago is now comparably frustrating for learners.

Consider your own organisation – compare the way you use e-learning now to the way it would have been used 5 years ago (a world without the iPad!). Would a learner notice the difference, and would they have a significantly better experience?

Course content

Content is a good indicator of how up-to-speed your e-learning is. Older courses tend to be comprised of static content in the form of PDF documents and Powerpoint presentations. Learners are usually expected to download and work through these items separately, sometimes even printing them off to be submitted by hand!

Let’s be clear; no student wants to access a course only to be immediately confronted with endless lists of documents and presentations. This is equivalent to guiding your learners into a dusty library and leaving them to get on with it.

That said, static resources do have their place, especially where you are sharing content which has been referenced during face-to-face contact, but they must be well structured.

Think of these resources as a part of reference library which is available alongside other e-learning content. Build an area within your course which houses these resources in an indexed fashion so that the learner can easily access and browse the library if they choose to.

Rich media

A better approach for content is to embed it into the course using modern web technologies, allowing the learner to dip in and out of the content without being taken away from the course itself.

Typical examples include rich text web pages, embedded videos, and SCORM activities or more niche examples such as interactive timelines, geographical maps and other forms of data visualisations.

Take some time to think through how your learners will navigate this content. It must be clear to the learner where they are expected to start and in what order they should approach the materials you have made available.

Structure and pathways

You must clearly identify the learning objectives for a course. Ideally these objectives should be visible throughout the journey, highlighting the current learning objective that is being worked towards.

The best e-learning courses use completion tracking to monitor what a learner has done so far and when used in combination with assessments this can even be used to dynamically tailor the learner’s pathway dependant on how well they learn.

Tracking of resources usually takes the form of a tickbox which can be automatically marked when a learner accesses a piece of content, or which learners can manually mark off when they have finished with a piece of content.

Many administrators get pre-occupied with the concept of tracking the learner’s every movement on the site in order to ensure they have watched every second of a video or worked through every part of a SCORM package. The truth is that the best way to monitor your learner’s progress is through good summative assessment throughout the course.

Finally, remember to consolidate the learning towards the end of your course. Use a quick video or even just a bullet point list to remind them of the objectives they’ve covered.

The E-Learning Journey

The structure of learning in the classroom is very important. At the start of a lesson we review previous learning and declare objectives, we differentiate to enable each student to achieve their best, and at the end of a session we consolidate the learning which has taken place. Such structure helps to guarantee that our learners remember what they’ve been taught.

Such considerations are just as important for e-learning. Whatever platform or tool you are using it is important to ensure that content meets certain standards. Over the next few articles I will be exploring the structure of e-learning.

Break it up

In the classroom we are used to teaching in lessons or sessions. These lessons build up to a complete curriculum over which the learner will hopefully build an understanding of a given topic.

We all understand the need to break learning down in this way in the classroom, and it applies to e-learning just as strongly. An e-learning course may well need to be broken down into many lessons or modules.

Navigation and presentation of these modules can be handled in many ways depending on the tools you are using, however as a rule it is essential that a learner can see when they have achieved or completed any one module.

What is a lesson?

At this point it might be fair to pose the question “what is a lesson?”

Once again the answer can be found in our real world teaching methods where we are encouraged to identify learning objectives for a each session, and to ensure that students are aware of them throughout that session.

Learning objectives are effectively way-points on a learner’s journey and they give structure to a lesson. A learner with clear visibility of their objectives knows that as they tick off a learning objective they are progressing on their journey.

E-learning modules should be broken down into objectives in a similar way, with around three learning objectives identified at the start of a module. These should ideally be visible throughout the learning and updated so that the learner can see their progress.


There are obvious benefits to teaching with such a structure, but there are also hidden advantages which are specific to e-learning, some of which I will be covering in future articles:

  • It is easier to track your learners’ progress on both an individual and group basis.
  • Gamification of learning progress (such as user achievements and points) is much easier to implement.
  • It becomes possible to craft content which is applicable across multiple programmes where there are shared learning objectives.
  • Content becomes more manageable, you can more easily measure the impact on learners and swap out modules to improve a whole course.

Why strategy matters in e-learning

Over the years I’ve been involved in many implementations and re-implementations of learning tools or platforms. It’s a great opportunity to start afresh and reinvigorate an e-learning offering, but these efforts can only go so far in delivering the desired results.

What’s missing?

It’s convenient to think that by implementing a new e-learning tool you can resolve the problems your learners and trainers are experiencing, but in reality these tools are only a part of the picture.

To give an analogy: if a school was unpopular with it’s students and failing to meet its benchmarks, the chances are that the problems go beyond the school building or the architecture of a particular classroom.

It’s essential to take a step back and think about a wider e-learning strategy; that is to consider how you will be engaging your learners and empowering your trainers to achieve the results you want.

A wider strategy

An effective strategy for e-learning will be borne out of considering your objectives:

What kind of learners are you wanting to support? What is the best way to engage with those people?

When do you want your learners to work through your materials, and where will they be doing it?

How long do they need to stay engaged for, and what kind of impact are you hoping to have on them?

What metrics do you need to measure the effectiveness of the learning?

How will the learning experience be further developed and tailored? What will drive this process?

By answering these and similar questions you’ll begin to appreciate that there are certain workflows which suit your requirements better than others.

To give an obvious example; if you want to encourage a workforce to do reflective development outside of the office you need to ensure that the learning is available in a platform-independent format which is publicly accessible, and you may only need information about how frequently each user has accessed the system.

Content builds experiences

With this understand of how you want learners to work with the system you are now starting to get an idea of what the new system is going to look like. There’s just one big hurdle left… content.

If your content isn’t currently engaging, the chances are that just putting it in a slightly different format on a new system isn’t going to change anything.

In our example from earlier, you may have a great mechanism that supports reflective learning outside of the office, but if it takes 4 hours for a learner to achieve a learning objective the chances are the learners will do that whilst they’re being paid for it.

Consider your content. Is it user-friendly? Is it varied enough to keep them engaged? Is it relevant enough to them? How does its format support your initial objectives?

Also consider your trainers. Are they getting the information they need about the learning that has taken place? Do they find it easy enough to manage the content and improve on what’s there? Are they aware of your strategy and taking steps to meet your objectives?

If the answer to any (or all) of the above  is “no” (or “I don’t know”) then the chances are you need to consider what should change before you proceed. How could the content be formed? Who is going to improve or replace the content? How are they going to do it, and what are they going to need?

And finally…

The points above will inform your decision about what system to work with in the future. Whatever you choose, it needs to fit into and support this wider strategy, and in turn that strategy needs promotion and enforcement to ensure the success of your new e-learning tools.

AutoEnrol 1.3 Available Now!

A new version of the AutoEnrol enrolment method has been released, with support for Moodle 2.6, 2.7 and 2.8.  You can grab a copy here!

Whats New?

  • Support for Moodle 2.6, 2.7 and 2.8
  • Reworked group logic; you can now rename any automatically generated groups and newly enrolled users will still be placed correctly.
  • Group cleanup, you can set AutoEnrol to leave the groups it has created even when you delete the instance which created them.

AutoEnrol for Moodle 2.7

There’s been lots of questions and interest in AutoEnrol ever since Moodle 2.6 came out. I’ve now got some time to put together an updated version and there are a few new functions in Moodle which I want to take advantage of in the next release. My plan is to release an updated version with Moodle 2.7 compatibility in the next few weeks.

As for the longer term picture with AutoEnrol, I originally developed the plugin because I felt cohorts did not offer a flexible enough mechanism for getting users onto a course quickly. Since then cohort functionality and efficiency has improved greatly, and I am wondering whether it would be better to build a mechanism for dynamically populating cohorts so that they can be added to a course.

I’m keen to hear thoughts on this and will probably fire up a discussion on the Moodle forums soon. If you have any thoughts you would like to share now please do leave a comment for me here!


Hi Folks,

It’s been a tough 12 months and I’ve been pretty much flat out throughout. I mainly want to apologise for disappearing from the Moodle community, there have been a lot of people trying to get in touch and I just haven’t the energy to keep up with you all.

This weekend is a big milestone as the major Totara project I have been heading up over the past year is days away from launching, and I am now looking forward to getting more involved in the Moodle community once again. I’ll have more to say on that front soon!

Stay tuned 🙂

Beautifying Calendar Filters

Since Moodle 2.4 we have all been treated to some great new icons which look modern and clearly communicate the purpose they serve. I’m a huge fan of this and all the design work which is now going into Moodle releases, however the new icons have caused a few problems in production.

I particular their medium-grey colour can make them difficult to distinguish on a dull background, and in general they just look best on either a very light or very dark background. The calendar filters are one example where the icons don’t really stand out as well as they could against the background. Here’s how they look by default:

default events key
The default events key.

This is difficult because personally I want my event colours to be quick a bit darker than the defaults, but I also want to avoid having the icons fade into the background in this events key.

My solution was to style the icons onto a plain background and to use the border colour to differentiate the different types of events in the events key list. Combining this with border radius and an “inset” border style I was able to create a modern looking list of icons which stand out clearly and have good browser compatibility:

improved events key
My improved events key

If you’d like to try this out for yourself you can find my CSS below:

/*event colours*/

.filters .calendar_event {
margin-bottom: 8px;
font-size: 1.2em;
.filters .calendar_event a {
text-decoration: none;
/*the icon span is first child but has no class or id*/
.filters .calendar_event span:first-child {
display: inline-block;
border: 3px inset #333;
border-radius: 100%;
background-color: white; /*same as block bg colour*/
position: relative;
padding-top: 2px;
height: 18px;
width: 20px;
margin-right: 5px;

.calendar_event_group {
background: #E18B2D;
.filters .calendar_event span.calendar_event_group {
border-color: #E18B2D;

.calendar_event_user {
background: #955282;
.filters .calendar_event span.calendar_event_user {
border-color: #955282;

.calendar_event_course {
background: #1AB388;
.filters .calendar_event span.calendar_event_course {
border-color: #1AB388;

.calendar_event_global {
background: #0080db;
.filters .calendar_event span.calendar_event_global {
border-color: #0080db;

Delegated Transactions with $DB

For the last couple of days I have been working on a new plugin called “MIS Enrolment” which allows you to connect to records on an external database and then enrol users onto a Moodle course based upon their participation within that programme. The enrolment method works by allowing teachers to create an abstract “link” between their course on Moodle and their programmes held by MIS.

Enrol MIS Instance
Teacher’s admin panel for linking their Moodle courses to MIS “programmes”

This creates a many to many relationship between Moodle courses and MIS programmes and will allow teachers to easily enrol both staff and students onto the correct courses based upon the records held by an organisation’s MIS. More information to come on this over the next few weeks!

For now I am revisiting an old problem which I originally dealt with in my first month of developing for Moodle 2. In order to get this enrolment method working effectively we have to create and maintain an internal copy of the data from MIS. Normally you could just truncate (wipe clean) your records and insert them again from source, but in this case I need to compare and check:

  • What records already exist? Do they need updating?
  • What records are new? They will need inserting!
  • What records are missing from MIS? They will need archiving!

And when you are looping through 10,000 records or more this can all result in a great many individual inserts, selects and deletions. So how can you maximise the efficiency of all this? This time round I am making use of delegated transactions in Moodle to handle the bulk of database inserts.

The mechanism effectively defers all the transactions with a database to one large transaction at the end of a process. As a result you can save lots of memory and significantly reduce execution time because your script isn’t constantly waiting on the database to return some data.

For comparison I tried inserting my test participation data of 9483 new records. Using the standard DB functions the script took 47 seconds to execute, working at a steady 202 transactions per second. By comparison the delegated transaction took just 10 seconds to handle exactly the same data inserts, an effective rate of 948 inserts per second.

If you are working with large datasets on Moodle I would definitely suggest checking this functionality out as part of your project!

AutoEnrol 1.2 now stable

After a couple of months in testing AutoEnrol 1.2 has now been given a stable release at There are a fair few additional settings to get your teeth into now, but the module works pretty much the same at it’s heart and can be updated from any previous version.

You can download the new version from either of the links below

I’m still keen to hear feedback on this release so if anyone has any feedback for how the plugin could be improved please do drop a reply to this post or send me an email.

Backwards compatible collapsible forms

If you are lucky enough to be running Moodle 2.5 the chances are you will have encountered the wonderful new collapsible forms. I’m really excited to get these onto our production server as they remove the user fear factor which can result from displaying a form with too many options

Collapsible Form Sections

If you are coding a new Moodle form and you want to take advantage of this, the sections can be collapsed or expanded like this:

$mform->addElement('header', 'generalsection', 'General Header');
$mform->setExpanded('generalsection', false);

Great! But what about if you want this form to work with Moodle 2.4 or earlier? The best solution to this is just to check that the setExpanded method exists within the mform class, and then to wrap your code with an if statement.

$mform->addElement('header', 'generalsection', 'General Header');
if(method_exists($mform, 'setExpanded')){

Hope that helps someone out there!