Page MenuHomePhabricator

Document reading list service client-side development / testing workflow
Closed, DeclinedPublic

Description

To understand the scheduling restraints that client-side development and testing places on backend development (e.g. "a potentially risky change must be available for testing for N days before it is deployed to production" or "apps teams want to start writing client code that uses the new API functionality on day X so it must be in production by then), I'd like to better understand the development and testing workflows of the app teams: what backends are you using, and how much time do you expect to take?

These are the backend options I can think of:

  • Local test installation. I think it's reasonably easy to set up with vagrant; it also allows patches to be tested before they are merged. OTOH I'm not sure how easy or convenient it is to set up the apps to use a vagrant backend, plus simulating article content in vagrant is a bit of a pain.
  • Beta cluster. MediaWiki changes are live there as soon as merged, RESTBase changes need a manual deploy but can be done any time there is a nontrivial change in the service. Still no real content though, and testing time is limited by the MediaWiki / RESTBase deploy cadence (with half a week on average between merging and deploying).
  • Just wait until changes are in production before starting to develop for them. That works well for incremental changes, not so well for changes which alter existing behavior and might break something. Also, might slow down development?
  • A VPS machine, or vagrant box, configured to use production data for everything but the reading list APIs (basically by proxying all REST API queries other than /data/lists/). This does not exist today but I think it's not too hard (if a bit hacky) to set up.

Did I leave anything out? Which option(s) do apps teams actually use, or would prefer to use?

Event Timeline

For my part:
The Android app makes it easy to switch out the base URL for all MediaWiki and RESTBase requests, so it's trivial for us to switch between production and the Beta cluster, as well as Vagrant. However, the preference for testing a brand new service would probably fall towards Beta cluster. The real-ness of the content doesn't really matter as much as being able to iterate quickly, or make radical changes to the backend. Vagrant is a good option in theory, but becomes kind of cumbersome for various reasons, and it's usually not necessary to test patches *immediately*, before they even get to beta. And also, if we test against the beta cluster, we can give the app to QA or PMs for initial exploratory or user testing.

In fact, the work on Reading Lists was actually a good fit for how I would expect the workflow to be:
The bulk of the work I did for integrating with the service was communicating with the Beta instance that you set up. We didn't have a whole lot of back-and-forth feedback, since the endpoints are pretty straightforward (and we developed a good spec before we started), but I can imagine us having made multiple additional changes before moving the service to production, without impacting speed of development.

The only times I've relied on Vagrant is to test Content Service patches that I myself created, just to verify that they're sane; and also because the content service doesn't depend on the local wiki to be populated with content.

I'm asking primarily about future changes to the reading list service, not about testing the next brand new service (although that's definitely good to know).

The crucial restriction there is that once a MediaWiki or RESTBase patch is in the beta cluster it needs to be reverted or deployed soon (within days) as beta and production are fed from the same branch. So if there are any changes (new features, bugfixes...) that need to be tested before they reach production, you'd have limited time to do it.

Jhernandez subscribed.

Ping @JoeWalsh, should we dig into this more, or decline? Seems like the service was developed and deployed with apps just fine a long time ago.

If there is nothing specific we can close this one and discuss separately for new services.

Mholloway claimed this task.
LGoto changed the task status from Resolved to Declined.Oct 9 2020, 4:50 PM