> How do we define module boundaries?<p>The question should be "How do we define module interfaces?"<p>Take Bootstrap as practical example.<p>How does it "interface" with your code?<p>CSS classes of course!<p>But wait!<p>If you use its "components" it also interfaces via HTML elements.<p>If you use even more of it, it also interfaces via JavaScript.<p>But even if you just use their CSS, how to switch to BlazeCSS, for example?<p>Well, you kick out Bootstrap, include BlazeCSS and ... you replace the CSS classes in your HTML elements, done...almost, sometimes you even have to fix up the HTML.<p>Hopefully this gets better with Web Components.<p>The problem we have right now is that CSS stuff is top down, while it still requires heavy customization from the bottom up (some styling only work for specific element types, etc.)<p>With Web Components, we can have custom elements "at the bottom" which are transparent in their child element usage, and can let CSS frameworks target them from the top. V1 uses ul/li for tabs, V2 uses divs all the way, but the users just includes the css/js and the used tag <fw-tabs> stays the same.