Wikipedia Education Program/Brainstorming for RFC for rewrite

=General organization=

An initial issue is the basic organization of the software that will provide similar functionality. Here's a possibility:


 * A component for visualizing streams of user edits.
 * A component for defining workflows, user groups and roles, via some sort of on-wiki schema.
 * A component that depends on the first two components and provides a workflow and UX tailored to needs of the Education Program.

=Possible synergies=

Here are some WMF and MW endeavours that may have some synergies with this work:
 * Flow
 * Analytics and metrics
 * Proposed Workflow extension
 * Wndialog Wikinews extension

=Justification for a rewrite=


 * The current codebase does not use, but should use, ContentHandler.
 * Experience with the current UX has led us to conclude that substantial changes are desireable.
 * The extension is geared specifically to the needs of the Education Program. However, other activities of Wikipedia and its sister projects have similar needs.
 * The class structure and architecture of the current codebase are not ideal.

To address any one of these issues would require rewriting a substantial portion of the codebase. To address all of them through modifications to the codebase would probably be more work than rewriting from scratch.

We should emphasize that we learned a lot from our experience with the current EP extension, so it's an important antecedent of this new work.

=General strategy for a rewrite=

Here's the approach we propose:


 * Create general components that form the basis of related features needed by the Education Program and similar endeavors.
 * Meet the specific needs of the Education Program through a thin layer of customization on top of those general components.
 * Set small goals for minimum viable products that meet the needs of the Education Program and contribute to a new system to be organized as described above.
 * As much as possible, replace parts of the current EP extension gradually with new products as they are completed, while continuing to use the parts of the extension that we don't have replacements for.

Since the current extension will remain in production for some time, we'll have to divide resources between its upkeep and the creation of new software. Work on the current extension should be limited to urgent bugfixes, minor improvements and urgent features that we can port to the new software. We should avoid work involving major changes to the current codebase.