= Session Themes and Topics=
* Theme: Architecting our code for change and sustainability
* Topic: Definition of Core, how code fits together, architecture, code encapsulation, FE/BE separation, extension interface
=Session Leader=
* Daniel Kinzler
=Facilitator=
* Joaquin Hernandez
=Description=
This session focuses on defining criteria and methods for improving modularity of MediaWiki core and other software components. A key task will be to define components in a way that removes circular dependencies, and provides stable interfaces for use by other components and extensions. On the organizational level, we hope to establish clearer rules for code ownership, by splitting the code base into individual components with clear responsibilities.
=Questions to answer during this session=
**Question**:
Meta: which units of modularizations are useful for this discussion?
**Significance**:
Let’s establish if we are talking about classes or namespace or repositories or layers,|**Question**|**Significance: Why is this question important? etc.
**Question**:
What mechanisms can we use to disentangle the code base andis blocked by it remove circular dependencies?aining unanswered? **
**Significance**:|Meta: which units of modularizations are useful for this discussion? |Let’s establish if we are talking about classes or namespace or repositories or layers, etc.
Having a clear idea of the tools allows us to better define the process.
**Question**:
What layers and high level components can we identify in MediaWiki, and what are their responsibilities, characteristics and relationships?
**Significance**:
Provide concrete idea and guidance for future refactoring work.|What mechanisms can we use to disentangle the code base and remove circular dependencies? Establish a shared understanding of responsibilities and ownership.
**Question**:
Which components are suitable to be split out into libraries to share code both within Wikimedia and with 3rd parties?|Having a clear idea of the tools allows us to better define the process.
**Significance**:|What layers and high level components can we identify in MediaWiki, and what are their responsibilities, characteristics and relationships? |Provide concrete idea and guidance for future refactoring work. Establish a shared understanding of responsibilities and ownership.
|Which components are suitable to be split out into libraries to share code both within Wikimedia and with 3rd parties? |Aiming to provide to 3rd parties forces release management that also benefits our own processes.
=Scribe Instructions=
Please make a copy of the notes worksheet located here to take notes: https://docs.google.com/document/d/1J-wTeelHFGeXw6dO1ywkGr0NfnzG-cUykowc6aSKoWE/edit?usp=sharing
=Facilitator Instructions=
Use this document for reference: https://docs.google.com/document/d/16NwfSJuj7fc2da1fOJM_sqKMdioHN1qPQavydGLDxic
= Resources: =
* Session Guide: https://www.mediawiki.org/wiki/Wikimedia_Technical_Conference/2018/Session_Guide
= Session Structure =
* **Define session scope, clarify desired outcomes, present agenda**
* Discuss Focus Areas
** Discuss and Adjust. ''Note that we are not trying to come to a final agreement, we are just prioritizing and assigning responsibilities!''
** For each proposition [add etherpad link here]
*** Decides whether there is (mostly) agreement or disagreement and the proposition(s).
*** Decide whether there is more need for discussion on the topic, and how urgent or important that is.
*** Identify any open questions that need answering from others, and from who (product, ops, etc)
*** Decides who will drive the further discussion/decision process (ie: a four month deadline)
* Discuss additional strategy questions [add etherpad link here]. For each question:
** Decide whether it is considered important.
** Discuss who should answer it.
** Decide who will follow up on it.
* **Wrap up**
----
**Session Leaders** please:
[] Add more details to this task description.
[] Coordinate any pre-event discussions (here on Phab, IRC, email, hangout, etc).
[] Outline the plan for discussing this topic at the event.
[] Optionally, include what it will //not// try to solve.
[] Update this task with summaries of any pre-event discussions.
[] Include ways for people not attending to be involved in discussions before the event and afterwards.
----
Post-event Summary:
* ...
Action items:
* ...