Wikimedia Developer Summit/2016/Software engineering


T119032 - This is the session pad for the Working area focus: Software engineering session, slated to begin at 10:00 AM on Tuesday, January 5th.


Figure out how we can simultaneously optimize the following conditions:

  1. make software development more logical and obvious for all Wikimedia contributors
  2. make Wikimedia software more useful and reliable for the Wikimedia sites

In more concrete terms, we want to discuss ways to make making MediaWiki more modular, and by that, making it easier to test, understand, modify, and re-use individual components. The two approaches we want to discuss in particular are SOA and DI - not as alternatives, but as techniques that complement each other.


  • 2x10 minutes - introductory presentation(s)
  • 45 minutes - open discussion
  • 10 minutes - wrap up

Some possible topics revolve around refactoring core:




For SOA (T114803), we are seeking to

  • reflect on what we have done in the last two years, and discuss
  • what went well, and
  • what did not go so well.

Slides: SOA at Wikimedia - Quo Vadis?

For DI (T384), we are seeking consensus about:

  • Moving towards a DOA architecture, with (mostly) stateless service objects and (mostly) dumb value objects.
  • De-coupling services using dependency (constructor?) injection.
  • Using a service locator / DI container, and how and in how far this should be configurable by extension.
  • Using or avoiding auto-wiring
  • Using existing DI frameworks like Pimple, PHP-DI, or Symfony (directly or wrapped)


This section is where an attempt is made to capture the gist of who said what, in what order. A transcript isn't necessary, but it's useful to capture the important points made by speakers as they happen.

Session guidelines[edit]

This checklist exists to help each session at WikiDev meet the following goals:

  • Have productive discussion about topics that need face-to-face time
  • Make progress towards agreement on a solution
  • Document what was discussed, including areas of agreement and disagreement
  • Create written list of action items for follow up
  • Update or create Phabricator tasks as appropriate

Specific tasks:

  1. Assign meeting roles:
    • Facilitator
    • Gatekeeper
    • Scribe
    • Timekeeper
  2. Facilitator: run session to achieve specific goals.
    • State or build consensus towards meeting goal and style, referencing one of these meeting types:
      • Problem-solving: surveying many possible solutions
      • Strawman: exploring one specific solution
      • Field narrowing: narrowing down choices of solution
      • Consensus: coming to agreement on one solution
      • Education: teaching people about an agreed solution
    • Identify agenda items and guide discussion to stay on topic
    • Redirect participants who begin venting or discussing things that can be done online
  3. Scribe(s): Document the session
  4. Gatekeeper: Actively manage participation
    • Interrupt people if they are dominating the discussion
    • Help people who are having difficulty being heard
    • If the gatekeeper is talking too much, someone else should interrupt them
  5. Timekeeper: Keep track of time left and point out time passing to facilitator
    • If possible, estimate time for each topic written by scribes
    • Let people know when a topic has gone over its time
    • Give a warning when 5-10 minutes are left