This is a talk I gave at an event about how we are able to make a social impact through volunteering and community projects.
From teaching his kids how to use #ML to play Rock, Paper, ?? to @MLforKids @dalelane created his passion for #machinelearning learning into a movement enabling schools around the ? @sap4good #experienceday #sociallearning pic.twitter.com/nDLpdlfqVn
— Eva Klingbeil (@EvaKlingbeil) April 29, 2019
I’ve written before about how I made Machine Learning for Kids. But this talk had a different focus.
For this presentation, I looked to see if there are any general lessons that could be learned from my experience, to let me offer a little advice for people working in large companies like IBM about how to increase the impact of their volunteering efforts.
IMPULSe talk by @dalelane from IBM on "Making IBM technologies accessible to schools": How do your make your passion project happening?#sociallearning #experienceday #passionproject pic.twitter.com/KuybZkPSga
— Felix Harling (@FelixHarling) April 29, 2019
My slides are all on SlideShare, but I’ve tried to capture what I remember saying here.
Machine Learning for Kids puts IBM’s AI technologies in the hands of children so they can learn about AI by playing, experimenting and making with them. I created it as a volunteer activity, initially for a single local school. But over time, I’ve incrementally scaled it – trying out various ways to enable and encourage it’s use by IBM locations, schools, and coding clubs around the world.
In this talk, I want to share some of the things that have worked for me, and hopefully give you some ideas about how to increase the social impact of the volunteer work that you do.
Firstly, I want to explain who I am. I’m a developer for IBM, and I work on a software product called IBM Event Streams. The details aren’t important for this talk, but it keeps me super busy. I work a lot of hours… possibly more than I should.
And when I’m not working on that, I’m also a trustee for a local volunteering charity that I was one of the founders of.
The point I’m making is that I don’t have huge amounts of time. My main takeaway for this talk (at the risk of jumping to the end and giving away my conclusion) is that my way to increase the impact I could make couldn’t be to put in more and more time. Because I don’t have much more time to spare.
I’ve had to find ways to enable the most impact from the time I can spare. And the point of this talk is to share some of the ways I did that.
Before I talk about how Machine Learning for Kids happened, I should quickly explain where the idea came from.
I used to work on IBM Watson. For many years, my day job was working on building machine learning and text analytics projects.
I also spent a few years as a volunteer for Code Club – running a weekly after-school coding club at a local school.
Code Club is a fantastic organisation, and I learned a huge amount about how they enable volunteers to deliver coding education at scale. Some of that was about tech (I learned about Scratch for the first time), and some was about the approach (such as the use of project worksheets to enable kids to create things within a single session, without needing a huge amount of time commitments or teaching expertise from the volunteers).
Delivering Code Club sessions for years (and even trying to write my own sessions) taught me a lot about what works and what doesn’t.
I’ve found that learning about what is already being done has been a key element of what I’ve done – as it’s let me build on the work of others, instead of spending a lot of time re-learning the lessons for myself.
And this is where the idea for Machine Learning for Kids emerged. I had a little insight into how coding was being taught in schools, and I didn’t see that was including the sort of machine learning systems that I was building in my day job.
I thought there was a gap here, and tried to check that. I wrote about it, I gave presentations about it, and I talked to teachers about it. Before I started making anything, I wanted to make sure I understood what was needed.
So I had an idea that there was a need to find ways to introduce kids to AI and machine learning, which I’d validated with a variety of people who worked in education. And, from what I’d learned with Code Club, I had the start of an idea for how I could do it.
The next step was to try it out. In the February half-term break, I tried making a machine learning-powered Guess Who game with my kids. It wasn’t finished, it wasn’t perfect, and it had more than a few rough edges. But it did make me think that children could understand the basic concepts of machine learning if given a chance to make something fun with it.
I shared what I’d done, and what I learned from it. I put a live demo on the web, I put some videos on YouTube, I blogged about what I’d learned from doing it. It got me a lot of feedback, and suggestions.
A key lesson I’ve learned is that good things come from sharing what you try. Wherever possible, experiment in the open, and share your progress (and the lessons you learn) as you go.
I tried making another project with my kids – this time a machine learning-powered Rock, Paper, Scissors game. I fixed some of the things that I thought didn’t work well with the Guess Who project, and I tried some of the new ideas and suggestions I’d been given before.
And again, I shared the results – putting a live demo on the web for people to try, blogging about the lessons learned, and putting videos of some tests on YouTube.
One of the outcomes of sharing the things I’d been trying out was that I was asked if it could be used at a local school – they’d seen the Guess Who project and wanted to use it with their class.
It wasn’t ready for sharing, it was a messy collection of hacks cobbled together in a hurry, and it was hard-coded to work with the deployment and credentials I’d set up for my kids. But I didn’t want to say no, so I cloned the code with a new set of hard-coded values for the school. I’ve described this on the slide as release early, release often.
I’m not claiming this as an original idea, but it is an important one. The Guess Who code wasn’t really ready for sharing or re-use, and the volunteers who helped run it needed a lot of patience and tolerance to put up with it. But I do think that it’s better to just try and do things rather than agonise over waiting for it to be perfect.
And I learned a lot from it. What worked well with me and just my own two kids didn’t necessarily map perfectly to a couple of volunteers in a class of 30 kids.
Word had gotten around, and another school started asking if they could do it too. So now I was running Guess Who at a second school, tweaking some of the worst issues with the project, and trying a few new ideas for how to deliver it.
It was still very hacked together, and very hard-coded. There wasn’t a lot of code, and I hadn’t spent a huge amount of time on it. I’d charitably describe it as an early prototype, and testing it with a couple of local primary schools was teaching me a lot.
Again, not an original idea. In fact, the approach of working closely with sponsor users to iterate on prototypes is standard in my day job. But the fact that it’s a very efficient way to create something that has some value means it’s even more essential when you’re trying to get the most value from a limited amount of free time.
In pulling together the slides for this talk, I came across a few articles like this one – even back then, I was talking about how I needed to find a way to make these things work without needing an IBMer in the room with the class for every lesson. I knew that what I had made so far didn’t scale, but it was enough to be useful, and enough to help me figure out what to make next.
The next project was a machine learning-powered Top Trumps card game. The objective for this one was to make something that could be used by new schools without me needing to hack at the source code, or re-deploy another school-specific instance.
I had a couple of local schools trying it out, and I offered it to an IBM schools event. Again – release early, release often. I was making small little things, incrementally trying out new ideas, and finding ways for each of them to be useful.
As well as sharing this one in the same ways that I had before (hosted demo for people to try, social media, blog posts, videos) this time I shared the source code too. It was still an embarrassing hacky and hurried mess, but it was less of a mess than the last two projects.
And I think it’s important that share what you try includes the code, too. The goal was to maximise the social impact I could make with the limited amount of time I was able to contribute, so that wouldn’t be served by trying to keep any of it secret or private. I shared everything I’d made, and was thrilled to hear about a couple of forks of the project running different themed versions of the ML Top Trumps idea.
The scaling problems with the approaches I was taking were starting to bite.
Every new project involved me creating a whole new web UI for training and using the ML model.
Every new project meant a new application to create, deploy, and manage.
I needed to try and make something generic. Something general purpose that could be used for more than one project.
I knew about Scratch from Code Club. I thought that could give me a general purpose UI for creating a huge variety of new projects. I just needed to be able to add the machine learning element to it.
The next project was a Scratch-based machine learning-powered I-Spy game. This was my first attempt at representing machine learning models as new blocks added to the Scratch toolbox.
I could have built a whole new creation tool for letting kids create ML projects, but that would’ve been a huge amount of work. My Scratch extension needed hardly any code at all. Extending an existing tool, rather than inventing a new one was a much better way for me to be able to achieve something without a huge amount of time and effort.
Again, I shared the progress I was making and the lessons I was learning from each step. And again, for this project that included videos, blog posts and the source code.
Sharing what I was trying was useful for me, as it got me a variety of feedback and ideas. But it also helped broaden the impact from the work I was doing – I know about a bunch of different people’s Scratch extensions that started from, or was helped in some way, by the code I was sharing.
The next step was combining the Scratch extension idea with a new child-friendly ML training tool.
This was a fairly big piece of work that was spread across a few months, but I regularly shared my progress as I went.
The approach I was taking was shamelessly stolen inspired by what I’d learned from Code Club. I started writing project worksheets, each of which could be done in a single session, and included complete step-by-step instructions that would let it be used by a school or coding club without needing an AI expert.
As with the code, extending an existing approach rather than inventing a new one, meant I could quickly create something that could work.
I’d been developing this idea for a while. I’d worked with local schools to create a series of prototypes. And now I had something that I thought could work.
The next step was to test my idea. I demo’ed it to a few groups of school teachers – a room full of school teachers in London, in Hursley, and Warwick. I explained to them what I was trying to do, showed them what I’d created, and asked them to tell me what they thought. I got a lot of useful feedback from it.
I was able to do this because IBM runs continuing professional development events in the summer holidays for school teachers, with three-day events about teaching computing at IBM locations in South Bank, Hursley and Warwick. I was able to get some time in each of them.
Getting face-to-face feedback from about sixty school teachers interested in teaching computing would have been hugely difficult otherwise. But IBM runs these events anyway, and one key thing I’ve learned is to let your company help you make more of an impact from your efforts, by looking for, and making the most of opportunities like this.
In a similar vein, I let my company help me test my prototype too. I borrowed one of the rooms we use for client briefings at IBM Hursley, I borrowed a load of laptops, and I invited colleagues across the Lab to bring their kids into the office for an August afternoon so I could test what I’d created on them.
I found other ways that I could get IBM to help me test my ideas. For example, we run an annual event called TechConnect where we can show what we’ve made to some of IBM’s leaders. That meant I could get a little time with several of IBM’s technical leaders to get their advice and guidance for what I should do next.
I had the basic tool working, but I needed to write more project worksheets for it. I worked with a few local schools to write these. Ideas for new projects came from a variety of sources: machine learning projects I’ve worked on at work, colleagues of mine, and teachers. I’d take the basic ideas into one of the schools, and work with them to make something.
I’d write up what we made in the form of a project worksheet, and take that into a different school and test it with their class. Some of it would work. Often I would find that the way I would explain steps wouldn’t be as obvious as I thought it would be. So I’d tweak and re-word based on how well I saw it going.
And the ones that worked got published on the site.
I’ve found that finding partners to help has been a huge benefit in helping me make the most impact from the time I was spending.
Thoughout the development of the site, I’ve followed the principle of creating the bare minimum needed to achieve my next objective, and trying to avoid over-engineering it. This is partly because it is a good agile principle, but mostly because I have hardly any time to work on the code for it.
For example, the first version of the support for storing images for training image classifiers used imgur to store the images. As the site continued to get busier and more widely used, I started bumping into their rate limits.
That was when I needed to invest time in storing and managing image files myself. There are dozens of examples like that, where I started by taking technical shortcuts until those hacks shortcuts would no longer meet my needs, and only then invest in improving that bit.
Throughout all of this, I was adding more and more schools to the tool. And all through word of mouth. Teachers and code club leaders would hear about what I was doing, and ask if they could get access.
I shared the source code for what I had made on our internal GitHub. This meant I could get colleagues to help fix some of the technical problems and contribute to it.
So many people at work helped in so many ways. IBMers helped review worksheets, helped me with the design, helped me with my terrible terrible UI development skills, helped me use the Watson APIs in better ways, helped me try the projects out in local schools, and so much more.
Over the next couple of years, I added new features to the site in a slow trickle. The main benefit of this was time – I could work on small, self-contained features in little bursts of spare time.
The prioritisation of these was largely motivated by whatever the site’s growth was making the most painful. For example, schools used to register by emailing me and I’d run a bunch of SQL commands to add them to the database. I implemented the support for schools to register their own class accounts after the number of emails I was getting every day became too much!
By this point, the main goal was to increase adoption. I’d sunk a big chunk of time into this idea (more than I’d originally expected!) so I wanted to make the biggest possible impact from that time. That meant finding more opportunities for children to try making things with it.
I found ways for IBM to help me with this goal, too. IBM regularly runs events for schools. Machine Learning for Kids has been used at many of them now.
Initially, this was in events just at my local office, IBM Hursley. But then at other IBM UK locations.
As the site has grown, the need for automation has grown with it. The site can pretty much run itself now – which is useful when I need to concentrate on other things, and don’t have time to spend on managing it. It’s important for side projects that you can park them for a while when you get too busy.
Getting feedback from teachers and code club leaders by email is fantastic. But nothing beats seeing how kids use the resources I create first hand. Running machine learning workshops at big events is not only a lot of fun, but it also teaches me how to refine and improve the resources I create to make it easier for teachers to deliver them.
Every time I run one of these, I get a ton of new ideas for things to add or change. The more opportunities I can find to test my ideas, the better.
I was still looking for ways to increase adoption. One of the ways to do this was to repackage what I’d made as an IBM Activity Kit and make that available to all IBM employees. This published it to hundreds of thousands of people around the world.
I wrote it in the form of “If you can spare an hour, do X. If you can spare a day, do Y. If you want an ongoing commitment, do Z.” to make it as easy as possible for people to help me.
It worked. I started hearing about events run by IBM employees all around the world using my resources.
IBMers were writing about what I was doing. And talking about it.
And while they were doing that, I could continue the slow trickle of new features. If I had a spare couple of evenings, I could add a small feature. If I had a quiet few weeks, I could add a big feature.
Things went a bit wrong. One of the shortcuts I’d taken came back to bite me. I was running the site in a single location, and when that location suffered an outage, my site dropped off the web for most of a day. I annoyed a bunch of people, and felt terrible about it. I should have been prepared for that. I’d taken the bare minimum thing too far.
The silver lining was that it was another example of how I could call on the rest of IBM to help.
Within a few days, IBMers I’d never met before taught me how to run the site in parallel in multiple geographical regions, and helped me set up the DNS failover to make it all automated and seamless. The site hasn’t gone down since.
Sharing the code on the intranet Github was letting me get help from colleagues. But publishing the code on public GitHub made it easy for more people to help.
I’ve freely shared everything I’ve made, and that has been a huge help for me.
For example, Kyle Corry and Joe Mazzone contributed support for App Inventor which meant now students could create machine learning-powered mobile apps as well as Scratch projects.
Andy Daniel added translation support to the UI so it could work in other languages, automatically switching to the right language as needed.
I’m still adding new features too, often based on the feedback I get from teachers and code club leaders.
This feedback has also helped guide the project worksheets that I write.
For example, a common comment that I got from teachers is that while they liked the idea of introducing AI in the classroom, they found it difficult to make time for it. Without a dedicated AI element in the curriculum, they said they found it hard to justify making time for machine learning projects in the school week.
I worked with some of them to come up with new project worksheets to try and address this. The newspapers project (training a text classifier to recognise the use of language in different newspapers) was created with a school that were doing a media literacy project. By making AI an element of a broader subject, rather than just a subject by itself, I made it easier for more schools to incorporate into their timetable.
The chatbots project is another example of this. Loads of schools use chatbots as a way of getting students to present the research they’ve done on a topic they’re currently studying. I’ve seen chatbots on Vikings, Romans, Tudors, and many many more.
Another benefit of promoting the work I’m doing to IBM employees has been that they’ve often contributed help without me even asking.
For example, IBMers around the world have contributed translations to get the tool working in new languages.
I started actively promoting what I was doing. Word of mouth had gotten me a long way, but I started looking for places where teachers find new educational resources, where I could share what I’d made.
That included writing a few articles to explain to teachers how they could use Machine Learning for Kids in their classroom.
Another benefit of the project worksheets approach I adopted from Code Club is that it was a good way for me to deliver small bits of new stuff. There are times when I get busier with work, so it’s useful for side projects like this to be something you can create in bite-size chunks. And writing a new worksheet, or even just going back and updating screenshots or improving the instructions in existing ones, is something easier to fit into small bursts of free time.
I’ve written dozens of these now!
As work gets busier, I don’t have as much time as I’d like to visit schools to run sessions hands-on. For a couple of the schools I’ve been working with the longest, it’s been great to be able to keep a regular relationship with them going thanks to volunteers at work.
Meanwhile, I’ve switched to a mode where I visit a different school every few weeks to run an initial kick-off machine learning event – running some sessions with their students, while also enabling their teachers to carry it on after I leave.
I’m not sure it’s totally necessary for the schools, but I really enjoy doing it. And it always gives me a ton of ideas for new things I can do.
Another way that colleagues at work have helped was with my site logo. I made the first version in Microsoft Word. It wasn’t great. The current version was made by one of the Designers at Hursley. It’s awesome, and way better than anything I could do.
It’s another example of how what I’m doing with Machine Learning for Kids is more effective because I’m able to get the support and skills of colleagues across IBM.
Adoption of what I’ve created was going very well with primary schools, but less so with secondary schools. Through attending education events and by emailing, I talked about this with dozens of schools. There were a variety of reasons, but one common one was that they didn’t use Scratch as much as students got older, and tended to prefer Python.
By better understanding what is needed, I was able start adding Python support to what I was doing, making it useful to a broader range of student groups.
Apps for Good have been a huge support. They’re a UK-based not-for-profit that create resources for teaching technology subjects, that they make freely available for schools. They created a machine learning course using Machine Learning for Kids, supplementing it with a range of additional materials like schemes of work, lesson plans, student workbooks, presentations and more.
Their expertise in education have made it easy for schools to deliver ML lessons that put my coding projects in context.
Translations for my resources haven’t just come from IBMers. With everything I’m doing available on Github, I’ve made it possible for people all around the world to help by submitting translations, and now the site works in a dozen languages.
People are helping in other ways, too. Teachers are starting to create and share their own Machine Learning for Kids resources. I’ve seen details for courses available for teachers in how to teach classes using the Machine Learning for Kids site.
All of these sorts of things extend the reach and impact that my work is able to have, without me needing to spend even more time.
Finding more partners has helped to do this, too.
The AI Family Challenge is a free, hands-on AI education program for families. They use Machine Learning for Kids, and supplement it with a lot of additional support, such as technical coaches and mentors, a structured lesson plan and supporting videos.
And while they can help enhance the educational side, it’s enabled me to spend time continuing to improve the technical side.
I keep adding small features and improvements when I get time – such as getting it working on mobile devices after many schools told me that they had moved away from computers to using iPads for most computing lessons.
More organisations like App Camps in Germany, or Kids Code Jeunesse in Canada help to bring the resources I’m creating to new groups of students.
Teachers using the site are doing more to promote it than I am now, too. Where previously I was writing articles to encourage teachers to try what I’m making in their classroom, now I come across those articles written by teachers.
Education ministries, such as the Spanish Education Ministry, have started promoting the use of Machine Learning for Kids to their schools, and produced materials in their own languages to help their teachers get started with it.
All of this means I can spend more time on the code – such as adding support for new types of machine learning model.
We’re all here today because we’re interested in helping our communities or finding a way to make a social impact, so I know I don’t need to persuade any of you to want to do that. In this talk, I’ve tried to share the common themes for the things that seemed to work for me. I don’t claim to be an expert, but I hope that one of the things I’ve shared has maybe given you an idea for something you could try.
Recognize that you’re doing this as something extra than your day job, and plan for that. Don’t try to do too much – even small contributions can be useful if they’re the right ones. Look for things you can do in small bursts when you have time. Plan for times when you’ll be too busy to do anything on it.
If you help out at a local school, is there anything you’ve made or any lessons that you’ve learned that you could share? Even if that only helps one person do something similar at another school, you will have doubled the impact you’ve made, without having to double the amount of time you put in.
If you volunteer for a local charity, is there anyone at your company who has some skills or expertise that your charity would benefit from? Making more of an impact doesn’t have to mean you spending more and more time, sometimes it can be about using your personal network to make the right connection.
Tags: codeclub, machine learning, scratch