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:
- Linux: Udemy: Ubuntu Linux Fundamentals Linux Server Administration Basics
- Docker: Lynda.com: Learning Docker
- MySQL DBA: Udemy: MySQL Database Admin -DBA for Beginners
- Mongo DBA: MongoDB: MongoDB Basics
- nginx: Lynda.com: Learning NGINX
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.