At the Financial Times we were solving these sorts of problems with what we
branded Origami components - see http://registry.origami.ft.com.

Disclaimer: I used to work on this.

Each component was in it's own repository, releases were made on an ad-hoc
basis - as and when needed, breaking and major changes would necessitate a
major version change etc.  Product and component developers - and there
were a lot of them - would then pull in a component at build time (we even
supported at runtime with https://build.origami.ft.com!) locked to a
particular major version - we used semver religiously.  Bower was used as a
dependency manager - admittedly with varying degrees of success at first.

As you can see, there are a lot of individual components in different
repositories - we had only minor issues with this, but we solved a lot with
tooling and process:
http://origami.ft.com/docs/component-spec/modules/#managing-new-releases.

Tooling when using web components, from our experience there, is *so*
important - the 'Component Info' section and the data found there was
particularly useful when managing releases and figuring out dependents and
dependencies:
http://registry.origami.ft.com/components/[email protected]#section-info
for example.

Tooling also helps with the discovery problem: registry.origami.ft.com -
which becomes a kind of living style guide.

This worked at scale - some background can be found here if you're
interested: http://triblondon.github.io/talk-components-origami/#/1

I'm actually for a single repository of components, but *only* if we can
make it easy for the community to pull in and use components in their apps
as dependencies with minimum friction.

Sam




On Thu, Oct 29, 2015 at 6:20 PM, Augustin Trancart <
[email protected]> wrote:

>
> On 29/10/2015 18:03, Fabrice Desré wrote:
>
>> It's interesting that you use Facebook as an example. There was a talk
>> recently from one of their release manager
>> (https://air.mozilla.org/release-engineering-at-facebook/) and some take
>> away are:
>> - they use a (huge) mercurial monorepo (like Google does). Everything
>> needs to always work on tip basically. For sure being a closed
>> organisation may make that easier, but FxOS/gaia could be seen as a
>> closed organisation with not much harm I think.
>>
>
> My 2 cents: I'm far from advocating a unique repo, but having too many
> repos with dependencies between them is not great either.
> I personally found working on gaia-icons quite painful (as a reference:
> bug 1209961 [1]. The number of PR it has is ... meaningful). It's difficult
> to make contributor stick around if they need to update X repos before even
> considering pushing their changes to gaia.
>
> So I would propose to have only one repo for all web components of gaia.
> This way, it would be much easier to make change to a wc which other wc
> depend on. And we could still tag stable versions and pull them gaia-side.
> Things stay manageable, even if every app has an explicit dependency on
> this shared repo.
>
> Another drawbacks I see of having a lot of separate repos for shared is
> that their discovery is made more difficult. They risk becoming underused.
> gaia-icons is a good example again: I don't know the whole story behind it,
> but I guess the idea was to provide a set of common icons for FxOS. A lot
> of apps have actually their own svg or png that luckily often look more or
> less the same (I'm speaking about back, forward, send, edit-mode, close,
> attach icons, and many others).
>
> TL;DR Basically, let's keep the dependency tree as flat and simple as
> possible to avoid headache.
>
>
> [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1209961)
>
> Augustin Trancart
> Phoxygen
>
>
>
>
> - no manual QA, everything relies on CI. They ship their sites twice a
>> day, their mobile apps weekly.
>> - all employees are forced to use the beta version. So when they stage
>> changes to users, it's not for quality/bug testing reasons but mostly to
>> test product ideas (ie. a/b testing).
>> - our build & CI systems are from the last glaciation compared to theirs.
>>
>>         Fabrice
>>
>> On 10/29/2015 05:05 AM, Wilson Page wrote:
>>
>>> Instantly propagating updates can sound dreamy, but live code everywhere
>>> can lead to regressions coming from nowhere.
>>>
>>> This approach also puts a massive burden on component reviewers and
>>> contributors. It's much safer to land changes to a component and have
>>> apps *PULL* in the changes. This gives the app owner a chance to spot
>>> regressions, file a bug, remain on the old version and avoid breakage.
>>>
>>> If component updates are *PUSHED *into the apps, regressions will
>>> increase. It is not possible for a component owner or contributor to
>>> know every single instance whereby their component is being used.
>>> Regressions *will* be caused by new patches, our job is to catch them as
>>> early as possible and mitigate the impact these regressions have.
>>>
>>> This problem is why the Semver <http://semver.org/> standard exists and
>>> package managers like NPM have grown so successful.
>>>
>>> *Our options are:
>>> *
>>> A. We force *PUSH* updates into apps and speed up the update process and
>>> introduce more global regressions.
>>> B. We land frequent risk-free incremental patches into a component's
>>> source repo and *PULL* stable versions into Gaia one app at a time (not
>>> to dissimilar from our train-model).
>>>
>>> *How do other people do it?*
>>>
>>> If we look at deployment strategies that have proven to work in
>>> production, they all tend look similar to Option B. Facebook doesn't
>>> push new features onto all of their users at once; they trickle the
>>> changes out to 1%, 2%, 3% of users, until it reaches 100% of users.
>>>
>>> This gives Facebook the opportunity to catch issues early, backout and
>>> fix; without impacting very many users. It would be appealing for them
>>> to be able to ship new changes to everyone in a split second, but this
>>> can hurt their users and end up costing more time than it saves.
>>>
>>> ---
>>>
>>> This clearly need some more discussion, but it's important to note *this
>>> is not a new problem* :)
>>>
>>> *W I L S O N  P A G E*
>>>
>>> Front-end Developer
>>> Firefox OS (Gaia)
>>> London Office
>>>
>>> Twitter: @wilsonpage
>>> IRC: wilsonpage
>>>
>>> On Wed, Oct 28, 2015 at 8:56 PM, Justin D'Arcangelo
>>> <[email protected] <mailto:[email protected]>> wrote:
>>>
>>>      I agree with Sam. But it needs to be trivial for apps to pick up the
>>>      latest changes too. This could be easily solved with Bower. Each app
>>>      could “lock in” to particular versions of the components they’re
>>>      using. Then to get latest, the apps only need to have their version
>>>      numbers bumped in bower.json.
>>>
>>>      -Justin
>>>
>>>
>>>      On Oct 28, 2015, at 4:49 PM, Sam Foster <[email protected]
>>>>      <mailto:[email protected]>> wrote:
>>>>
>>>>
>>>>
>>>>      On Wed, Oct 28, 2015 at 11:52 AM, Patryk Adamczyk
>>>>      <[email protected] <mailto:[email protected]>> wrote:
>>>>
>>>>
>>>>          So there is also another part to this, and that would to have
>>>>          it sit in a live styleguide.
>>>>          Imagine if the components can be in github and a single change
>>>>          in github would instantly update:
>>>>          + master and every FXOS app
>>>>          + style guide website
>>>>
>>>>          That would be amazing!
>>>>                    It would really echo the ideas of focus and dynamic
>>>> efficiency.
>>>>
>>>>
>>>>      I don't think this is either practical or desirable. To have a
>>>>      single change cause ripples across all FxOS apps would be really
>>>>      really difficult to manage. Talk about strange magic from a
>>>>      distance! Plus we are moving away from a monolithic "Gaia app". *I
>>>>      do agree we need a simple opt-in way to buy into consistent look
>>>>      and feel and control interactions*. And a way to pick up bug fixes
>>>>      or updates from shared components without simultaneously breaking
>>>>      unrelated stuff - see Jim's note about font-size changes. But I
>>>>      would like to steer us away from the notion of a one-size-fits-all
>>>>      UI toolkit. It always ends in tears. Apologies if I'm over
>>>>      simplifying or mis-characterizing here, I just want to offer the
>>>>      counter-argument.
>>>>
>>>>      /Sam
>>>>
>>>
>>>      _______________________________________________
>>>      dev-fxos mailing list
>>>      [email protected] <mailto:[email protected]>
>>>      https://lists.mozilla.org/listinfo/dev-fxos
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> dev-fxos mailing list
>>> [email protected]
>>> https://lists.mozilla.org/listinfo/dev-fxos
>>>
>>>
>>
> _______________________________________________
> dev-fxos mailing list
> [email protected]
> https://lists.mozilla.org/listinfo/dev-fxos
>
_______________________________________________
dev-fxos mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-fxos

Reply via email to