In the following talk eduMe Full Stack Engineers James goes through some of the challenges involved in making our Workforce Success platform accessible to millions of users across 6 different continents around the globe. Click play to tune in (or alternatively - find the full transcript below).
Transcript:
I wanted to talk a bit about what eduMe is, what we do, then the main theme today is around how we simplify access to our product for our users. And just get into a bit of detail around some of the work we're doing on localization, and obviously, if you have any questions feel free to feel free to shout.
Let me start with my least favorite topic which is myself. I've actually been at eduMe for just about 6-7 months and I've only really been a developer for about a year and a bit. But I'm also not 21 so I have spent most of my career doing stuff that is entirely unrelated to software development.
And I share that because if any of you are looking for a job then know that at least at eduMe we are prepared to take on people who haven't got classical developer career. I won't go into detail, but I started as a management consultant. I hated it. I went into restaurants, worked at Leon, did some operations stuff there, then I did marketing at Evans Cycles and Carluccio’s, I tried to start a business, and then the global pandemic hit.
But in the process of doing that I discovered that I love software development and was lucky enough to persuade the guys at eduMe to give me a job. And here I am now. Another guy who started with me was a chef for 10 years before he became a developer, and there are people who have done nothing but development, with Maths degrees from Cambridge, First-Class Honors in Computer Science. So we're not all new to software development game.
That's enough about me, let's talk about eduMe and what we're about. Although most of us are now sat around a desk I imagine, or looking at a screen, 80% of the global workforce is deskless and it's being taken over by Millennials - people born after 1981. And no surprise, we're all using smartphones and it's changing the way that we consume information and we communicate.
So eduMe is a ‘Workforce Success’ platform, which means that we think about how to engage staff, how to engage them and how to communicate with them. We are working with companies like Uber, Deloitte, Vodafone to help them with their many millions of employees. So what is it about our platform that makes it a bit different?
The first thing is it's a mobile first platform and we try to be as intuitive as possible. Some of the feedback we get from our customers is that it's a very easy to use platform, so when they're trying to deliver training or information to their staff, and their staff are deskless (so they're not used to spending their entire day staring at the screen) they find it very easy to use.
We focus on things being concise and engaging, not long 40 minutes slideshow presentations, or indeed 15 minute presentations like the one I'm giving now. It should be accessible, and it should be something that the user enjoys doing and that they want to come back to, and they come back to it frequently, and don't spend very long on it at any given time.
So in terms of how our customers actually use us, where we started out was around onboarding new joiners. You can imagine someone like Uber or Deliveroo, they have an unbelievable number of drivers or riders and there's new people joining all the time all over the world and that is quite a logistical challenge because they need to train them in all sorts of things.
Fundamentals around what being a driver for Uber looks like, what are some of the compliance things that you need to be trained on in order to start the job etcetera. So there's an awful lot around that. There's obviously continuous learning for employees - there's always new things to be learned, updating them. And also there's just more generally a sense of belonging to a company that cares about your wellbeing as an employee and making you feel valued. Our platform can help with all of those things.
We’re growing quite fast. I joined probably towards the start of the recent burst of growth. So we have had a good pandemic which we feel very grateful for. We know that it's not true of many people, but we raised $5 million of funding from a Silicon Valley VC last year. When I joined there were 20 odd, and now there are 40 odd, and we expect for it to be quite a lot bigger than that by the end of the year.
These are some of the clients who we work with - some of them you will recognize, some of them you may not. They're truly global. Tigo for instance (one of our first customers) is a mobile network based in South America. And there's some big guys like Uber and Deliveroo who keep us busy.
The reason we have grown is because people like our product and our product makes a difference to our customers. Let's take the Uber example. They are using eduMe to train their drivers. There are millions of Uber drivers around the world. We’re used by Uber worldwide, so we've managed to increase the driver supply hours by 8%, their average driver rating, as well as reduce onboarding times. Those numbers may look maybe smallish, but if you can imagine the scale of Uber that makes quite a material difference to their performance.
We’re really happy that 98% of Uber drivers would recommend eduMe to their colleagues. That’s important to us - that the drivers enjoy it as well as the admins, and the people actually buying the product. So in terms of making life as easy as possible for our users, I'll start talking a little bit more about the product and some of the things that we focus on as a company.
We've got millions of users and it is super important and fundamental to our success that they find using our product as easy as possible. To start at the top, fundamentally we are a mobile-first platform. You can either use the web app, or you can browse it on mobile. You can use the platform on the desktop. The vast majority of our users will access it via a mobile browser or the app itself.
We have for some of our customers become embedded within their own in-house apps. So the at the moment they use a web view. Although it's within the app, they're actually accessing our web platform. I don’t know if anyone’s come across Fountain, but they're the world leaders in high volume hiring. So for companies that have a lot of staff like Uber or Deliveroo, they allow you to hire and onboard people at scale.
We're fully integrated with them so that the eduMe courses can be created as part of an overall workflow that the company requires their new joiners to go through. We’re also integrated with a company called Braze that allows admins to generate passwordless links for the users - I’ll talk more about this in a second.
We provide four main ways in which users can log into the to the platform. There's a straightforward way that you might imagine - use your email (or phone number) and your password, and off you go.
We also allow admins to generate what are called ‘Self Sign Up’ (SSU) links, where they can send a link to a user when the user clicks on it, they are automatically enrolled in the course. So if the admin provides a link to a course then the user clicks on that link, they're automatically enrolled in that course. And all they need to do is enter some basic details - the name, typically an email or phone number. They enter a password, and they're in.
We don't require small things - we don't require you to double enter your password, or go and check your email and get a code from an email and enter it back in, in order to get in. This is for people who are on the move, and want to get into the training quickly.
We also allow companies to set up using their existing authentication. So using an SSO process. If you have a company log-in that's already set up, you can use that to then also authenticate yourself into eduMe.
Then there's something we call ‘Seamless Links’. So passwordless login and this is a link which actually has zero authentication on it whatsoever. So allows a user just to click on the link and takes them straight into a course and creates a user account for them within eduMe immediately.
There is a sort of security 'risk' in the sense that if you don't want anyone else to see the content behind that link, then you need to be careful with it. But it's used - for instance - when we are embedded within an app behind the scenes, there's a passwordless link that will allow the user within the app to move from the native app content into eduMe and back again without the user noticing any authentication happening. It's a nice way to streamline the user experience while making sure that we're tracking the user in the back end on our side.
That's a bunch of stuff we've done already that we've had good feedback on, but there's always more you can do. Here’s a nice big map of the world and I've come back to Uber because they're a big name and everyone knows who they are. They work in 85 countries worldwide, but they use basically the same onboarding program for new drivers everywhere.
But obviously, 85 countries don't all speak the same language. We already offer 35 languages on our platform, but - and this is where I'm going to get into the details a bit, as it's the detail that are important - we allow admins to set up ‘groups’ of users and within that group you can create a number of different courses.
But the language is set at a group level, not at the user level. So if a Belgian user who might speak Flemish or French, if they want to present an onboarding course in Flemish, they need to have a Flemish group. If they want to have the same course, but in French, they need to create a completely different group.
Now having exactly the same courses just in a different language in a different group is not a very helpful way of setting things up and means that your group reporting is not very helpful. For Uber, that's not a meaningful distinction. They treat them as basically the same users, but they're just consuming the same content in a different language. So it kind of breaks a little bit when you get to that.
We want to set things up at the user level. So now forgive me, this is a really ugly slide, but what we have here is our database setup and I just wanted to get into the detail to explain where we are. Just to talk you through, these are the tables in blue in the middle here. So a user exists in the user table, there's an adjoining table called users groups that takes them to the group's table.
So there's your Belgian group, your Flemish group, or your French speaking group. That's then linked via adjoining table to a courses group. And then within courses you have lessons. So that's how you get from a user to an individual lesson.
Now language is set at a group level. So as I say, if you want to create a new lesson in a new language, you need to create an entirely new group, which would then link through to a new lesson and again, to get into detail, the lesson content we store as a JSON blob. So it's literally word for word - the content, the images, the video etcetera is stored there.
What we're working on at the moment is changing things so actually we're going to create a new table. So here the lessons, rather than within the lessons table containing the content as a JSON blob is actually going to reference content keys, and those are going to be linked to a new table called ‘localized content’.
So here there will be a content key, and then it will contain a 'localized value', basically a language specific value for each of those keys. And those keys could be text, they could be an image source, they could be a video source. And that would allow us to, for a single lesson, hold within the localized content table multiple different languages so that you no longer need to have a different group in order to serve a lesson in a different language.
So that's the sort of database structure behind the scenes. How do the admins actually interact with that? This is where I want to talk a bit about the - I'll tell you what we're gonna do and I'll explain how it is an example of how we approach development in general. So the first version is pretty rough and ready and I hope that the guys who did the work don't mind me saying that. But the localized content, we are going to export into a Google sheet and I put a screenshot on the right, so it looks as ugly as a regular spreadsheet does.
But fundamentally down the left, you've got the content keys, and then you basically have a column for every language that you want to present it in. And we export the default language. So let's say that's English, they can just add a new column and then they go about the translation process of: translating the copy, sourcing a new image (if you need to change that), sourcing a new video, et cetera.
So they would manually enter the content into that Google sheet row-by-row, for each of the content keys. They then send it back to us and we (again this is a sort of version 1 or version 0.1) would then verify that because if you could imagine in a Google sheet there's very limited validation you could do, all sorts of things might break, and if we allow them to upload it directly into our admin console then there's a decent chance that something might go wrong.
So we do some validation, we then upload it. And then in the admin portal, the admin user will then have the ability to generate different course links with simply using a URL parameter, so that the query at the end around you know, language equals: 'EN', 'ES', 'FL', whatever it might be.
So the end result for the admin user is that it's something very simple - we're just changing a URL parameter. Now that is version 1, it's reasonably crude, but I guess this is where it comes into how we approach these things. If you think about the kind of customers that are going to be using this, they tend to be large, and quite sophisticated, and to have quite sophisticated admins, and in-house developer teams. So they're more than capable of handling this and this is a relatively simple thing for us to get out of the door. It’s not that simple, but it's the quickest way.
What would we do after that? Well, maybe the next step is probably going to be automating this so that when they've updated the spreadsheet, it doesn't have to come back via us for validation. They can just self-serve themselves completely. Version 3, you could easily imagine, obviously ideally you'd end up with this in our admin panel in the UI so that they can do the translation there. But you could say, “well isn't isn't this a bit crude, don't you want to have something more polished ready to go?”.
But actually if we did that it would take a lot longer, involve a lot more work on our side, and there's a fairly high chance that we would go down the wrong track. And we've got quite a lot of customers, but we're still a B2B business. So we work closely with our clients to understand what it is they want, and we try to build and then iterate. So this is the first iteration and they may say “this is absolutely brilliant, you nailed it”. It's quite unlikely that's going to happen.
They're probably going to say “this is great, can we change the following things?”. And we would rather go through short, faster, iteration cycles, in order to deliver something that is really going to be used, and deliver value, rather than trying to create something really polished that takes a lot more work, takes longer to develop in the first place, and takes a lot more work to change, when we get any feedback after that.
So that was that. This is a slide reminding you about what we do. That's just a quick introduction into something that we're always focused on, which is making life as easy as possible for our users, and that was just a bit of a deep dive into that particular project.
As Sam said at the start, we’re hiring. We’ve got Junior, Mid and Senior positions open - see the link below in the notes, or visit our website careers section. We would love to hear from you. Our tech stack is based on React on the front end with a React Native app. We’re using Node on the back end with a Postgres database.
So reasonably mainstream technology. We would love to hear from you if you're interested in working for us and if you have any questions, do shout.
Since James' talk we have raised a $20M Series B round and are looking to hire more great people to our ever-growing engineering team.
Interested in joining us? We'd love to hear from you. Take a look at our open engineering roles.