Open edX engineering onboarding courses

In the past few months I have been working with a team of multiple Open edX contributors and edX team members to help Open edX thrive as a free and open-source software project by onboarding better and more engineers to it.

The objective is to create small specialized courses to help engineers with roughly 2+ years of experience to develop a clear understanding of Open edX, how to contribute to, what tools and technologies they’d need to learn.

Those courses will be used by both the community and edX to onboard engineers.

Scope

There are many ways to create courses, so it would be helpful to layout what type of courses we’re aiming to create.

The courses are intended to be and stay small, therefore there will be re-use of existing tools and learning materials such as Open edX docs in Confluence and Read the Docs. The courses guide the engineer in a step-by-step approach therefore having a smoother experience.
The courses will provide checkpoints through clear self-assessment in which the engineer will be able to identify whether they’re ready for next steps, or recommend learning materials otherwise. This helps to prevent the course from becoming another wiki or confluence by providing learner with the shortest path to achieve some tasks on Open edX.

Tasks organization

We’re managing the tasks and workflow in the following GitHub project: Open edX Onboarding Courses · GitHub .

Course Publishing

The courses will be hosted at edX.org and to be open sourced so operators can host copies if they’d like. While the courses won’t be available on the www.edx.org catalog, they’ll be advertised on the openedx.org site.

Target audience and effort

The courses will be targeting engineers with roughly 2+ years of experience because senior engineers are fewer and have more experience in tackling obstacles. The courses are meant to be small but not too small, in which a full stack open edx engineer and operator is expected to attend the first four courses (intro, operator, backend and frontend) within a month of 15 hrs/wk in effort.

Courses

The courses will be grouped under an XSeries (or a similar grouping at edX.org).

Course: Introduction to Open edX

Learning objective: Explore the architecture and main components (LMS, Studio, Forum. Plus Celery workers/beat, ElasticSearch) of Open edX and their interactions.

  • General introduction to Open edX system for all specializations
  • This course will include some architecture background in the form of both diagrams and videos but will not go into detailed technical details
  • Set the prerequisite for the next steps:
  • Some experience in git, web development and system operation which is covered by the CS50’s Web Programming with Python and JavaScript

Course: Operator Onboarding

Learning objective: Learn how to deploy, operate, configure and backup an Open edX production instance.

Prerequisite: Linux, Docker, MySQL, Mongo and nginx. The following suggested courses can help:

Topics:

  • Focus on helping engineers to deploy and operate an Open edX production instance: LMS, Studio, Forum, celery workers.
  • This course will provide an overview of how to install and operate Open edX via Ansible (or Docker/Tutor, still TBD)
  • More in-depth Open edX Infrastructure diagram with required databases and services
  • How to install XBlocks and other plugins
  • This course will need to be updated after Docker is mainstreamed
  • Waffle flags, feature toggles and other configuration methods in Open edX
  • One bonus section about where the data lives in Open edX for backup and reliability purposes

Course: Backend Engineer Onboarding

Learning objective: Learn how to create and update Open edX code with tests via the devstack and tox.

Prerequisite: Python and Django experience. Test Driven Development is a bonus.

  • Learn about what belongs in the core and what should be implemented as a plugin
  • Focus on enabling the engineer to extend the Open edX core
  • Overview and examples of the Open edX plugin different systems including themes, ACE, djangoapps plugins and XBlock, IDAs
  • Small tasks in how to modify an XBlock and other plugins
  • Learn how to write and run unit and integration for your code as a starting point of testing.rst

Course: Frontend Engineer Onboarding

Learning objective: Learn how to modify the Micro-frontends and make an Open edX theme.

Prerequisite: CSS, Javascript, HTML with basic command line usage. React (PSU course, week 3 introduce react) and Sass is a bonus.

  • This course will focus on providing the frontend engineer with the knowledge needed to customize theming and Micro-frontends
  • How to write (and run) effective front-end tests using enzyme and/or react-testing-library
  • Give examples of clean, well-written React code that currently exists in our MFEs
  • Give examples of clean, well written Sass from our codebase, including use of variables / defaults

Course: Test Engineer Onboarding

Learning objective: Learn how to write a Cypress E2E test for Open edX.

Perquisite: Experience with both Selenium and Python.

  • Overview automated system testing in general on how it’s used in Open edX
  • In this course the test engineer will learn how to write system and e2e tests for Open edX via Selenium and related technologies

Course: Free software contributor onboarding

Learning objective: Learn how to become a good free and open-source software community member from submitting small bug fixes and small modifications up to larger contributions via OEP.

Prerequisite: Completing one of the courses above.

  • This course will enable the engineer to contribute their first bug fix or platform modification to ideally an Open edX project outside their organizations
  • It will provide an overview of the Core Committer program
  • It will share the steps to become an free and open-source software contributor including the legal and quality parts
  • The capstone project can be either and INCR project task or a new XBlock idea

What’s next

Michelle Philbrick and I are about to start with the authoring of the Introduction to Open edX Course and we’ll be laying out tasks in the GitHub project in a week or so:

  • Write more specific and detailed course learning objectives (task no. 1)
  • Then develop the assessments for those learning objectives (mostly in the form of “Did you understand this concept?”)
  • Then we write down the syllabus of the course which would help us to break down the the sections and have actionable tasks to distribute the work
  • Each task would either be completed and content would be added to the course, or would be broken down into sub-tasks

Contributors

It’s been exciting to see the energy from many contributors to this effort including: Adolfo Brandes, Amy Brown, Ben Piscopo, Bryan Wilson, David Joy, Felipe Montoya, Fox Piacenti, Jill Vogel, Lael Birch, Michelle Philbrick, Nimisha Asthagiri, Xavier Antoviaque and probably more that I’ve forgot to mention.

How can you help?

While we’ve got some areas covered with interested contributors.

  • Introduction to Open edX: Omar, Michelle and Nimisha
  • Operator Onboarding: Jill Vogel
  • Backend Engineer Onboarding: Omar and looking for contributors
  • Frontend Engineer Onboarding: David Joy and Leal Birch (still to be confirmed)
  • Test Engineer Onboarding: Looking for contributors
  • Free software contributor onboarding: Members of opencraft team (to be confirmed)

Please let us know if you’d like to sign up for this project. We’re aiming for a small start which we can improve iteratively. There’s a 13 page document in which we write all the notes and meetings so far, which probably should be moved to Confluence. But it’s there if you’d like to take a look.

13 Likes

@omar Huge kudos for starting this initiative, along with @nimisha and Michelle! Many of us have been working independently on onboarding material and courses for our own purposes, but that’s a lot of duplication of work. We will all gain by working together on onboarding materials that we share - the result will be higher quality, and easier for everyone to maintain.

There is one in particular that we (OpenCraft) were planning to develop, to facilitate the training of our new recruits, and capitalize on our experience with contributing upstream - so that’s one that we could also contribute as part of this effort:

It’s worth discussing it, as we have a few goals in mind with this, some of them go beyond the scope of the current initiative - but that seem to align well:

Contribution to the larger free & open source community

We would like it to be both a contribution to the Open edX community and to the larger free & open source community - i.e. both a way for people interested in learning how to contribute to Open edX to do so, but also for people interested in learning how to contribute to free & open source in general. It’s a great contribution to make, as there is currently no good course on how to become an usptream contributor!

One consequence of this approach though is that we wouldn’t just focus on Open edX, and wouldn’t have other Open edX courses as mandatory prerequisites, only optional - it could be taken as a standalone course. Though of course people already familiar with the other courses, in particular with the Open edX intro course, could skip some sections that explain the relevant parts of Open edX.

It could be a great opportunity for Open edX to get more contributors, as Open edX could feature prominently as a project to which learners would be encouraged to try contributing to, as part of the learning experience.

Working with other communities

If possible, we would like to work on it with other members of the free & open source community - we have identified several initiatives that the course could build upon and/or with:

Sustainability & money

To make the initiative sustainable & ensure it has resources and time allocated to keep improving it on the long term, we are also thinking about ways to allow people & organizations working on it to optionally earn money from it. A couple of ideas so far:

  • The course content would be under a free & open source license, so its content would be free, but we would consider offering a version that would include mentoring (as a course mode, or a separately hosted one). I.e., a similar business model to the “learn to code” bootcamps. It would specifically target existing developers who want to try to improve their professional skills and/or get a better job, in a master-like program.
  • Another option, also inspired from bootcamp programs, is to also use the program as a job search & recruitment tool, matching the desire of learners to work for a free & open source company after completing the program on one side, and on the other side the need of such companies to find and evaluate good candidates, who know how to contribute well upstream.

Marketing

One thing that we want to carefully consider is doing proper marketing for the course - especially, find a way to attract the attention of developers outside of the free & open source community:

  • One idea is to involve high profile figures / open source stars - people who would be known to all developers. I.e. a bit the masterclass.com approach, if you will. Ideas of names welcome :slight_smile:
  • The other would be to get exposure to the audience on edx.org – which is likely full of people who could be interested in working with free & open source. We would gain both more contributors for the community in general, and also provide a way for learners on edx.org to give back to the project that helps them learn!

License

For the license, to ensure that its source remain published by anyone republishing & modifying the course, we are considering the AGPL license - does that work? This way we would always all have access to the course archive, not just the rendered Open edX course.

Next steps

The very next step is to get the opinion of the various communities & community members that have an interest in seeing such a course come to life. And if there is interest, see if & how we would be able to collaborate on it.

On the OpenCraft side, we are still figuring out the assignation, i.e. who of our core committers would be in charge of our contributions, but we are ready to put some significant effort into this, especially if there is interest from other community members, and core committers from OpenCraft will likely focus our work on onboarding courses on this specific one.

(To also contribute what we have already produced/written that is related to the other courses, @Fox_Piacenti has also done a pass to publish all our relevant documentation that was previously still kept internal, to make it available as source material for other core committers working on other courses.)

Then once we know who and how we work on this, we would start working together on a more specific concept, learning objectives & syllabus.

What do you think?

2 Likes

Preamble: very nice (and very rare :wink: ) initiative, kudos to everyone already involved.

The OpenStack Upstream Institute which I created about six years ago is very similar, except it is in the context of OpenStack instead of Open edX.

https://docs.openstack.org/upstream-training/

I’d like to highlight two essential aspects of this course:

  • It is by not specific to OpenStack, it uses OpenStack as an example. Contributing to a Free Software project effectively requires hard skills (covered by the technical courses) and soft skills (covered by this course) that could be summarized by "learning how to work together around Free Software"
  • It is effective when the learning experience is validated by a commit being merged in an upstream project, with peer guidance. The guidance is most effective when a skilled mentor is available but it can also works with a peer (or a rubber duck).

The technical specifics of how a contribution is made in Open edX or OpenStack or another context are very different and need to be factored in otherwise the contributed commit can’t be merged. But it would be very beneficial to isolate the parts of this course that are not project specific so they can be shared and developed in a technology agnostic way. For instance, explaining why it is beneficial to get in touch with the software project immediately instead of waiting even for a few days is universal and takes some convincing. But the specific channels to get in touch are obviously project specific.

This is a challenge and I’m not aware of any initiative that already tried what you propose. It’s definitely worth a shot and I believe it has a good chance of success. That being said, I tried a few things that had mitigated success so I’m not the best judge :roll_eyes:

  • Embed the course in a software project that has lots of company employees who never worked in a Free Software context (works well, that’s OpenStack)
  • Insert the course in a CS curriculum at the university (worked well during a few years but faded away)
  • On premise training for large companies (somewhat worked difficult to sell)
  • Paid for course, in person, on the same footing as “learning C++” (did not work at all, no demand)
  • Gratis week-end course, in person (did not work at all, noone subscribed)
1 Like

Glad to read you here @dachary :slight_smile:

Btw, to keep everyone here in the loop: good news! Marc,the professor from Telecom Paris which Framasoft mentioned has replied on the Libreho.st thread about the upstreaming MOOC course. He has published the content he has already started authoring for his course (which should actually end up on edx.org btw, at https://www.edx.org/school/imtx - FYI @nimisha ) - it is under a CC-BY-SA license and open to contributions. It looks like a good opportunity to try to work together on this?

+1 - that’s why I think the free software community as a whole would benefit from having such a course, shared and contributed to by multiple projects.

Do you think the Open Stack community could potentially be interested in contributing to a shared initiative, btw? Learners could have several projects highlighted, like Open Stack or Open edX, who partner with the course and are welcoming people who want to learn how to contribute?

Also, how do you think we could try to reuse some of the content you have already produced as part of Upstream University, to build a MOOC?

Big +1 on that one too - until we have a commit merged in a third party project somewhere, we never really know what contributing actually means. Anyone can publish some code on a gitlab repo – but getting even a minor change upstream somewhere is rarer, and more scary. Having it done once clears a lot of the fog, and allows to do it again much more easily. This is also a huge part of the value of “byte-sized” bugs, to onboard contributors to a project, and know how contributing works, before being able to make more significant contributions.

That actually also matches Open edX a lot ;p Maybe there is a trend we could refactor around, here?

What made it fade away, do you think? The fact that Marc is looking to build such a course, shows there is still some interest there too, no?

@dachary and @antoviaque thank you for your notes. I realized that I’ve only read them but didn’t reply.

I will reply briefly on the main points and continue listening to the interesting replies on this thread.

License … we are considering the AGPL license …

AGPL is a good license for code. For courses I think Creative Commons makes more sense so I’m starting with that: Creative Commons Attribution-ShareAlike version 4.0 license by OmarIthawi · Pull Request #1 · openedx/onboarding-course-introduction · GitHub .

Contribution to the larger free & open source community and Working with other communities

I think there’s a couple of great ideas here.

Sustainability, money and marketing

As I focus on engineering, I tend to not focus much on those topics.

Do you think it is a blocker for having usable initial release for the courses?

Having the project gone into multiple iterations in the past without a initial release makes me wonder if we can make it this time or it would be paused for the lack of funding in one form or another.

Thank you again for the valuable insights. It sounds like we have a consensus around the idea of validating the learning by getting a commit merged, which is great.

2 Likes

That’s debatable - the CC-BY-SA is more the equivalent of the GPL, while the AGPL would ensure that the source of a course (the course export archive or whatever is used to generate it) is kept available as long as it’s made available in a course, while the CC-BY-SA cares more about the produced output.

But since the MOOC from Telecom is under CC-BY-SA, I’m fine with keeping this. We might however regret it if people fork the course and don’t provide the modified course export.

Marc has already started working on course content at mooc-floss / mooc-floss · GitLab - and as long as the work is done under a FOSS license the risks are somewhat limited, we can start moving forward. However, I do think we need to discuss this early, or we risk blocking the project on a misunderstanding later on, with worse results than if we handled this early.

On our side, it revolves around one main element – is it ok if we fund our own involvement in the project, by providing - besides the main free version of the course - one that includes mentoring and which is paid? The content would remain the same, but we would add the value of the time of OpenCraft developers who would be mentoring users. And can we do this as a separate course mode on the course we host on edx.org?

@nimisha Would that also be acceptable, on the edX side?

I’ve been out of touch with the OpenStack community for years now and I can’t tell.

The problem (not just with Upstream University) is that most of what is valuable is not recorded. You have the slides and that’s a good start. I don’t think we ever recorded a session. I suppose the right approach would be to repeat a session for the sake of recording it, with someone who already gave the training a few times. And record everything. Although I could try to fake it in front of a camera, I’m pretty sure that won’t work. One or two participants would be enough though.

It’s just an idea for capturing the unwritten content of the course.

I think the mentoring part is problematic because it does not fit in the usual curriculum. The timing is dictated by the upstream project and it could be as quick as a few days. Or as long as months. But there is no sense is skipping it or faking it. In theory the process is easy and everybody can do it. In practice very few people actually do it. And although one could imagine reasons why there is such a gap, it does not really help. What actually helps is contributing once and repeat and after a short while it becomes natural an never leaves you.

For the record they published a call for participation yesterday. Great initiative :slight_smile:

1 Like

OK - would you know to whom we could reach out to ask?

That’s a great idea! :smiley: Definitely +1 for that. Do you think this could be done remotely, over a videoconference call? And would you be volunteering to give it? :stuck_out_tongue:

+1 on not faking it, and the timing issue - there are actually some discussions with Marc that are related to those concerns:

To help with the timing, imho working with partner projects could help? That could allow to guarantee a response time for the reviews. It’s “cheating” a bit compared to a pure out-of-the-blue contribution, but it’s better than faking it completely, and it’s likely useful to encourage new contributors in the early stages?

Yup! There is a meeting scheduled today about this actually.

I’m afraid everyone I knew has moved in different directions. The company I worked for is gone (sold). The company I worked for after that is also gone (absorbed in a gigantic company)…

Since the idea is to capture what Upstream University built, I think it could only work over a course of two consecutive days IRL, with at least one participant. I volunteer to deliver the course (there are not many candidates, I have to :wink: ) but I won’t have time to recruit someone and find a location and the time slot suitable to them and me.

I don’t think so. I tried and that does not work IMHO. I mean it could work but in general I don’t think it does. The timing is problematic regardless: it can’t fit within a day (that’s absolutely cheating :wink: ). And since it does not, it makes little difference that it spans over days or weeks. And if it does make a difference… that’s something that needs to be addressed. As you very well know, managing the delta between your availability and the availability of the upstream is at the very center of a successful relationship between a contributor and the upstream.

To first give a quick update about the recent developments on the upstreaming course, we have started doing a series of meetings with the other people involved in the project, at the pace of 2 meetings of 1h30 every week, to brainstorm on syllabus and the content of the different modules, one module/week during each meeting. That should allow covering the whole course syllabus by the end of the month, before starting to author the content itself.

The list of meetings, including descriptions, times & recordings can be found there:

We have also started populating the list of tickets with actions items & topics that need to be resolved. My MR from my initial review pass has also been merged.

OK, I’ll try cold-emailing people then :slight_smile: I see two people listed as training organizers at OpenStack Docs: OpenStack Upstream Institute - I’ll send them an email.

Cool! :smiley: I’ll ask to see if one or more of the participants to mooc-floss / mooc-floss · GitLab wants to do this – some are around Paris, so that might work.

Btw, during the workshop for the first module, we have discussed using minetest to introduce participants to the base principles of contribution and FLOSS, taking inspiration from the way you used Legos for this at the beginning of the in-person training. There was a lot of enthusiasm for the idea. :slight_smile: There are some outstanding questions around how to do this, and how to best transcribe it online - there is a ticket about this on the project’s GitLab, I’ve pinged you there :slight_smile: Evaluate using minetest as an introduction to contributions (#14) · Issues · mooc-floss / mooc-floss · GitLab

Other tickets where I think your experience and comments could be useful are:

1 Like

It is now in my todo list and will attend tomorrow. I somehow missed the previous meetings bug not surprised I did: starting a new job is demanding :slight_smile:

I also thought about using minetest and even rehearsed what it could look like with two friends and kept a 7 minutes recording dated june 2013. I played the bossy upstream and they played two contributors tasked to build a house. The rythm is rather slow compared to IRL lego. But once you start building and chatting, it actually keeps you busy.

Thanks for the pointers! I’ll take a look.

1 Like

It was not at the begining, rather in the middle, as a way to apply theory and make it so people would not fall asleep :smiley: It also makes for great photos: here are a few from the session of May 2013. I sent you a few.

@dachary Thanks! I copy them here, as they are actually really cool - it shows very nicely and visually the act of contributing :smiley:

1 Like

https://framablog.org/2021/02/04/you-are-invited-to-contribute-to-the-future-contributing-to-free-libre-open-source-software-mooc-by-telecom-paris-and-framasoft/

2 Likes

Quick update about the status of the Upstreaming / Contributing course:

Brainstorming meetings (series 1 & 2)

The first series of brainstorming meetings has concluded, with a lot of great material brought up for each of the modules content. We have just started a second series of brainstorming meetings, also one per module, to start structuring the content of each module. See the list of meetings (with dates, links to join, recordings and transcripts) at Issues · mooc-floss / mooc-floss · GitLab

Kandall and Ildiko from OpenStack have also started contributing and joining the meetings, which is great! :slight_smile:

The first meeting of the second series happened last week for module 1: From brainstorm to course - week 1 (#19) · Issues · mooc-floss / mooc-floss · GitLab It gave a first draft of the module 1 structure, which I’ve turned into a document – I have also added the content from the first brainstorm meeting about module 1 there, to start populating it:

Assignation of work on the content

During the last meeting, the different sections of content for module 1 were assigned to different project members (cf the PR from the previous bullet point). I have taken two for OpenCraft (one of them shared with Kendall), and made PRs to start growing the content for these sections – it’s still drafty, but the content is starting to shape up:

Reviews, comments and suggestions welcomed!

Next meeting

Monday April 5th at 5PM UTC (7PM summer time in Europe) – then every Monday at the same time. These meetings are open to everyone who would like to join!

1 Like