In late 2014 I built a WordPress Learning Management System (LMS) website for a client using the LearnDash LMS plugin. Two months later I rebuilt the site using the Sensei LMS plugin from WooThemes.
Read on to find out why…
A little background to this project
The client in this story is a creative agency that designs and manages projects for, among others, nonprofits who are funded by a foundation. In early 2014 they redesigned and I developed a site that we had originally built a few years earlier for one of those nonprofits. This time, however, we also built a matching Moodle site to go along with the WordPress site, which the nonprofit uses to educate its members.
This post isn’t about Moodle, but let me say this: My experience building and working with Moodle leaves me convinced that whatever Moodle can do, WordPress can do it better and more efficiently. That’s a strong statement, and I know people are going to disagree with me, but I’ve worked with both and that is where I stand. (Interesting tidbit: I just now noticed that our local high school is using Moodle.)
Fast forward a few months and my client asked me to research and find the best WordPress LMS plugin to use for an upcoming project – the project I described in the opening paragraph of this post.
During this process I leaned heavily on Chris Lema and his LMS research. Chris has written a number of posts on the topic, including eLearning on WordPress: Comparing WP Courseware and LearnDash. In that post he explained how he had observed that these three LMS plugin providers had different approaches to creating their plugins.
According to Chris, WooThemes are, “WordPress guys first, plugin guys second, and eLearning guys last,” while LearnDash are, “eLearning first, plugin second, and WordPress third.” Then he said, and this is important: “And that will have an impact on how you see, experience and value what they’ve done.” Looking back, I wish I had read between those lines a little harder. But if I had, I wouldn’t be writing this post. 🙂
For a variety of reasons, LearnDash is the LMS I decided to go with for this project. It had a more mature feature set, they were actively developing and releasing new features, they have an active user community and forum, and their client list is impressive. On top of that, the license is good for life. (At least it was then, if I’m remembering correctly. I see now that their license is good for one year – that’s a smart move!)
Sensei at that time was having some performance issues with its analyzing and reporting, its feature set wasn’t quite up to LearnDash, and they were still relatively new.
Looking back, I’m not sure why I didn’t pick WP Courseware. I think the guys at Fly Plugins are working hard to produce a good product, but for a reason that escapes me now, I didn’t pick them.
Unique project requirements and custom coding
One unique requirement for this project was that they wanted and needed to use the LMS for both online and in-person courses, and they had to be able to track their users’ progress through different custom stages as they completed various courses. I have yet to build a WordPress project that didn’t involve some custom coding, and it seems that my client projects are becoming more complex, with more custom coding to go with that trend. This doesn’t bother me at all…in fact, I enjoy challenging projects and the learning that comes with them.
The WordPress long-standing motto is “Code is poetry.” I like this motto, and I like to think that the code I write contributes to the global body of WordPress code poetry. This is going to sound harsh, and I think this may be what Chris was hinting at between the lines that he couldn’t just come out and say: the LearnDash code is not poetry. It’s effective, mostly, which I’ll get to later, but it’s not poetry. My impression of the LearnDash code is that it was written in a hurry, probably by more than one person, and they weren’t overly concerned with clean or consistent code.
I’m speculating here, but I think one reason for that style is that they
aren’t weren’t charging enough for LearnDash. I may be wrong, but a lifetime plugin license doesn’t bode well for sustainability. Sure, it’s more affordable for the end user, but I’d rather pay for something that’s making enough of a profit to ensure that it will be supported and available for as long as I or my client is going to need it.
Project: Phase 2
A couple months after we launched this project, the number of users was over 600, and my client’s client wanted to make some enhancements and improvements. They wanted:
- better and more reporting options,
- a way for their site admins to mark courses complete for users in the WordPress admin,
- and emails sent to users upon course registration and a reminder email sent one week before a course starts.
LearnDash has the ProPanel add-on which has a cool UI (user interface), but it also has some problems. As I was moving data for all those users from LearnDash into Sensei, I realized that the ProPanel reports were not accurate. I was comparing each course’s list of user IDs, the ProPanel dashboard report, and a database export, and what I found was that there were users listed in the reports who were not in the courses, and there were users in the courses who weren’t listed in the reports. That’s a problem that no amount of fancy UI can compensate for.
A feature that had been requested more than once in the LearnDash forums was being able to mark courses complete in the admin. Each time it was requested LearnDash stated that this was not available, and it wasn’t on their feature calendar.
Emails were limited also, and I knew that I’d be doing a lot of custom coding to make all of these requests a reality.
Which leads me (back) to WooThemes. Six years ago when I started building websites I used Joomla!. WordPress was still largely a blogging platform then, but it was beginning to mature into the CMS it is now. After a year or so of Joomla! I switched over to WordPress and have never, ever regretted that move.
I discovered WooThemes at that time and modifying their themes is how I got started in PHP. I eventually switched to the Genesis framework, and again, I have no regrets about that move. Having said that, I know that the guys at WooThemes do write good code, and after my experience with the LearnDash code I decided to purchase Sensei and give that a try for this project – even if it meant rebuilding part of the site and moving a lot of data from one LMS to another.
The Sensei knows
I set up a staging site using a copy of the project’s live site, installed Sensei, and got started. What a relief when I dived into the code and realized what I already suspected: the Sensei code is clean, well-written, well-organized, and developer-friendly. Yes!
Working with clean code made my job easier, and I finished the custom requirements for this phase of the project and had a good time doing it.
Apples to apples
This won’t be as thorough as it could be, but for the rest of this post, I’ll make some side-by-side comparisons of LearnDash and Sensei in key areas so you can see how they compare. These are areas that involved this project directly, and they may or may not matter for your project.
Creating Courses, Lessons, and Quizzes
Creating your course content (lessons, quizzes, questions) in LearnDash is going to take some clicking around. Especially the quizzes and questions. Creating a quiz is going to involve scrolling through a long page of options. LearnDash does have more types of questions available than Sensei does, but they also utilize WP Pro Quiz, a third-party vendor, to handle the quizzes.
Creating a course with lessons and quizzes in Sensei is easy. Each course admin page has a list of its lessons at the bottom of the page, and each lesson has its quiz, if there is one, on that lesson’s admin page. Sensei does utilize a question bank that, in theory, lets you re-use questions on different quizzes. In my experience, re-using questions leads to question answers showing up in other quizzes that also use those questions. I’ve filed a bug report with Woo, but haven’t heard back yet that this has been fixed.
Without the ProPanel add-on, LearnDash reports are limited. In fact, there’s very little data available in your browser, and you’ll need to use their export feature to see and work with your data.
With the ProPanel add-on, you have more reporting options. The UI looks good, but as I mentioned earlier, the reports are not accurate. I did not go into the code to understand why, because by this time I had already decided to switch to Sensei.
Sensei uses (extends) the WP List Table class, which was a good move, in my opinion. Using a WordPress core class for something like this means that end-users and/or developers can build on what they have done. As my client requested, I was able to build custom reports by extending Sensei’s extension of WP List Table, and add a custom jQuery date filter as well.
Users and their courses
One thing we noticed right away was that Editors and Administrators are automatically registered for every course on a LearnDash site. Our project had, at that time, 95 courses. Every course a user is registered for shows up in their profile, which makes for some long, awkward profile pages for the Editors and Admins. This also skews the ProPanel course reports, since those Editors and Admins are included in the data for each report.
I have no idea why they decided to work it this way, but they explain on the LearnDash forums that this is how it is. Maybe a work-around for course viewing permissions?
No issues here. If you haven’t registered for a course, it does not appear on your profile, no matter what user role you have.
There is documentation, but it could be more complete. I noticed that there are some questions asked by users on the LearnDash forums over and over, and I wondered why they didn’t just address those questions in the documentation. Maybe they’re too busy? Very possible – I know how that can be!
Sensei’s docs are thorough, and probably cover more topics than most end-users will need. Still, I did find some areas that need updating to match the current version of the plugin.
LearnDash uses a combination of FAQs, forums, and a ticket system. The link to the ticket system can be hard to find – maybe so user’s utilize the forum first? Justin, one of the the co-founders, is making a heroic effort to keep forum questions answered, but as LearnDash grows into the future, they may not be able to sustain this support model.
If you want true WooThemes support, you’ll need to use their ticket system. There is a community forum, and the Sensei devs and product lead do venture in occasionally, but they don’t guarantee that your forum question will be answered by them, or anyone else for that matter.
Both LearnDash and Sensei are heavy hitters in the WordPress LMS arena. If you’re okay with using a plugin “out of the box” and you know you won’t need or want to do any customizing, then either one will probably work for you – but do your homework regarding the specific features offered by each plugin, and take their demos for a spin.
Even though I ended up doing a lot more work than I originally intended, I am glad that I used LearnDash first, as exposure to different ways of solving a problem can only have good results in the long term. Adding future features on their current code base is going to be a challenge, and I wouldn’t be surprised if at some point in their development progress they do a complete rewrite of the LearnDash code. I would if I were them.
Sensei is the relative newcomer, but from what I’ve seen so far, and knowing what WooThemes is capable of, I think this plugin is going to go far in an industry that is growing by leaps and bounds.
So what should you take away from this? When you’re choosing a plugin that plays a fundamental part in your website’s functionality, do your homework, and make sure you look under the hood!