<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luke</title>
    <description>The latest articles on DEV Community by Luke (@kamiquasi).</description>
    <link>https://dev.to/kamiquasi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F173689%2F24f45599-1247-435e-a82a-218e9020f624.jpg</url>
      <title>DEV Community: Luke</title>
      <link>https://dev.to/kamiquasi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kamiquasi"/>
    <language>en</language>
    <item>
      <title>Painless Web Components: Naming is (not too) Hard</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Mon, 20 Feb 2023 17:51:25 +0000</pubDate>
      <link>https://dev.to/kamiquasi/painless-web-components-naming-is-not-too-hard-3lon</link>
      <guid>https://dev.to/kamiquasi/painless-web-components-naming-is-not-too-hard-3lon</guid>
      <description>&lt;p&gt;This post is the first in a series focused on reducing the perceived pain of creating, using, and maintaining web components. The main focus will be web standards and "vanilla" methods, but we will look at how comparable libraries or frameworks are doing things too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Types of Custom Elements
&lt;/h2&gt;

&lt;p&gt;Naming isn't really the first decision in the process of creating web components. The first task is to choose which of the two types of custom elements you are making. The options are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous custom element&lt;/strong&gt;&lt;sup&gt;1&lt;/sup&gt; - the standalone types of elements (e.g. - &lt;code&gt;&amp;lt;my-cool-element&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;useful-tool&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;fly-away&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customized built-in element&lt;/strong&gt;&lt;sup&gt;2&lt;/sup&gt; - the elements that inherit and extend the semantic functionality of existing elements (e.g. - &lt;code&gt;&amp;lt;button is="bouncing-button"&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;strong is="bold-and-beautiful"&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference lies in whether or not you are extending an existing element of HTML in your constructor (e.g. - &lt;code&gt;HTMLButtonElement&lt;/code&gt;,&lt;code&gt;HTMLInputElement&lt;/code&gt;,). In my experience, when people are talking or thinking about web components they're usually talking about the former, but the naming conventions for either one are the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Name Considerations
&lt;/h2&gt;

&lt;p&gt;When building a web component there are at least two items to name: the custom element (tag name), and the constructor (usually a JavaScript &lt;code&gt;class&lt;/code&gt;). Both deserve appropriately thoughtful names as they are the required parameters to register a custom element with the browser using the &lt;code&gt;customElements.define()&lt;/code&gt; function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customElements.define('your-tag-name', YourConstructor);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OR&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customElements.define('your-tag-name', YourConstructor, { extends: "input" });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in the case of a customized built-in (in this case extending an &lt;code&gt;HTMLInputElement&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;constructor&lt;/strong&gt; is probably the easiest of the two to name, because you will utilize the same conventions you have for any other class names (you &lt;strong&gt;are&lt;/strong&gt; defining a standard naming convention, right?). In most cases, I will make an attempt to match the constructor's name to the tag name, but it isn't required other than for lowering cognitive load. I am also a little more liberal on the use of upper-case abbreviations, but not for any justifiable reason other than I like how it looks next to &lt;code&gt;HTMLElement&lt;/code&gt;. Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPXCookie &amp;lt;=&amp;gt; cpx-cookie&lt;/li&gt;
&lt;li&gt;DPSearch &amp;lt;=&amp;gt; dp-search&lt;/li&gt;
&lt;li&gt;MyMatchMeetBookOverflowPlusSong &amp;lt;=&amp;gt; mmmbop-song&lt;sup&gt;0&lt;/sup&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a nice "Note" on the Custom Elements living standard&lt;sup&gt;3&lt;/sup&gt; that lays out the standard for valid &lt;strong&gt;custom element names&lt;/strong&gt;. Most of these are to accommodate existing HTML parser rules. In my simplified words:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starts with a lower-case letter&lt;/li&gt;
&lt;li&gt;No upper-case letters allowed&lt;/li&gt;
&lt;li&gt;One or more hyphens&lt;/li&gt;
&lt;li&gt;Not one of a small list of existing tag names that include a hyphen that it is unlikely you'd use anyway (unless you're dying to make an &lt;code&gt;annotation-xml&lt;/code&gt; or &lt;code&gt;missing-glyph&lt;/code&gt; component, in which case you're going to be really let down)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Interestingly, the wide constraints on this means you can have some fun with the tag names. Emojis, latin, and any valid characters in the list of potential custom element name characters&lt;sup&gt;4&lt;/sup&gt; are valid (even if I wouldn't recommended doing so because it makes actually typing the element name a little harder).&lt;/p&gt;

&lt;h2&gt;
  
  
  Namespacing and Organization
&lt;/h2&gt;

&lt;p&gt;Element names can also be used to namespace or organize your components. Namespacing with a prefix can help denote ownership or library membership. A few examples: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cpx-&lt;/code&gt; (my Chapeaux components, which we'll look at more as the series progresses)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pf-&lt;/code&gt; (&lt;a href="https://patternflyelements.com/"&gt;Patternfly Elements&lt;/a&gt; from Red Hat&lt;sup&gt;5&lt;/sup&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sp-&lt;/code&gt; (&lt;a href="https://opensource.adobe.com/spectrum-web-components/"&gt;Spectrum components&lt;/a&gt; from Adobe&lt;sup&gt;6&lt;/sup&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bp-&lt;/code&gt; (&lt;a href="https://web-components.carbondesignsystem.com/?path=/story/introduction-welcome--page"&gt;Carbon components&lt;/a&gt; from IBM&lt;sup&gt;7&lt;/sup&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fast-&lt;/code&gt; (&lt;a href="https://www.fast.design/"&gt;Fast components&lt;/a&gt; from Microsoft&lt;sup&gt;8&lt;/sup&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lion-&lt;/code&gt; (&lt;a href="https://lion-web.netlify.app/"&gt;Lion components&lt;/a&gt; from ING&lt;sup&gt;9&lt;/sup&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After the namespace prefix, you can also leverage the hyphenated nature of the names to do natural grouping for related components. Variants or parent-child components can be grouped with a consistent name to denote their relationships.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referencing the custom element name
&lt;/h2&gt;

&lt;p&gt;How the tag name gets into your code can vary based on the method you are using to write your components. If you load up a few of the templates over on &lt;a href="https://webcomponents.dev/"&gt;WebComponents.dev&lt;/a&gt; you'll see that many examples just use a string value typed into the define function directly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customElements.define('my-tag-name', MyTagName);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In some templates, like Lit and Stencil for example, they leverage decorators that handle passing that string value along.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Lit
@customElement('my-tag-name')
// Stencil
@Component({ tag: 'my-tag-name' })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In my vanilla components, I like having this little blurb near the top of the defining class to set a class-level value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static get tag() { return 'my-tag-name'; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When I register the element it looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;customElements.define(MyTagName.tag, MyTagName);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Registering your element
&lt;/h2&gt;

&lt;p&gt;Once you have your two names, you are able add your element to the &lt;code&gt;CustomElementRegistry&lt;/code&gt; by using &lt;code&gt;customElements.define()&lt;/code&gt;. Putting it all together, it might look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MyTagName extends HTMLElement {
  static get tag() { return 'my-tag-name'; }
}

customElements.define(MyTagName.tag, MyTagName);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script src="mytagname.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;my-tag-name&amp;gt;&amp;lt;/my-tag-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your custom element is now registered, but doesn't really do much of anything at all except exist. Next up we will look at the various features that are made available to developers beyond component registration.&lt;/p&gt;




&lt;p&gt;&lt;a&gt;[0]&lt;/a&gt; - An out-dated web component overview repo used for a talk - Luke Dary - &lt;a href="https://github.com/KamiQuasi/wc-overview/blob/master/index.html"&gt;https://github.com/KamiQuasi/wc-overview/blob/master/index.html&lt;/a&gt; (&lt;a href="https://www.youtube.com/watch?v=5b5O5cclPbk"&gt;YouTube recording of talk&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[1]&lt;/a&gt; - "4.13.1.1 Creating an autonomous custom element" - HTML Living Standard - &lt;a href="https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-autonomous-example"&gt;https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-autonomous-example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[2]&lt;/a&gt; - "4.13.1.4 Creating a customized built-in element" - HTML Living Standard - &lt;a href="https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-customized-builtin-example"&gt;https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-customized-builtin-example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[3]&lt;/a&gt; - "4.13 Custom elements" - HTML Living Standard - &lt;a href="https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements"&gt;https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[4]&lt;/a&gt; - "4.13.3 Core concepts" - HTML Living Standard - &lt;a href="https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name"&gt;https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[5]&lt;/a&gt; - "PatternFly Elements" - &lt;a href="https://patternflyelements.com/"&gt;https://patternflyelements.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[6]&lt;/a&gt; - "Spectrum Web Components" - &lt;a href="https://opensource.adobe.com/spectrum-web-components/"&gt;https://opensource.adobe.com/spectrum-web-components/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[7]&lt;/a&gt; - "carbon-web-components" - Introduction / Welcome - Page ⋅ Storybook - &lt;a href="https://web-components.carbondesignsystem.com/?path=/story/introduction-welcome--page"&gt;https://web-components.carbondesignsystem.com/?path=/story/introduction-welcome--page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[8]&lt;/a&gt; - "Adaptive UI System, Utilities, and Tools" - &lt;a href="https://www.fast.design/"&gt;https://www.fast.design/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a&gt;[9]&lt;/a&gt; - "Fundamental white label web components for building your design system" - &lt;a href="https://lion-web.netlify.app/"&gt;https://lion-web.netlify.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>webcomponents</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The Emperor's New Library</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Tue, 14 Feb 2023 05:08:49 +0000</pubDate>
      <link>https://dev.to/kamiquasi/the-emperors-new-library-45i3</link>
      <guid>https://dev.to/kamiquasi/the-emperors-new-library-45i3</guid>
      <description>&lt;p&gt;This post is the expansion of a lengthy Mastodon thread I posted &lt;sup&gt;0&lt;/sup&gt; in response to blog posts from Alex Russell (&lt;a href="https://toot.cafe/@slightlyoff" rel="noopener noreferrer"&gt;@slightlyoff&lt;/a&gt;)&lt;sup&gt;1&lt;/sup&gt; and Laurie Voss (&lt;a href="https://alpaca.gold/@seldo" rel="noopener noreferrer"&gt;@seldo&lt;/a&gt;) &lt;sup&gt;2&lt;/sup&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  delete you.React;
&lt;/h2&gt;

&lt;p&gt;Many promises and flashy demos have been made over the course of the prior decade using React. There is no denying that adoption of React is widespread. What is concerning is the bait-and-switch technique of promotion that React engenders where conference speakers, tutorial makers, or bootcamp instructors flaunt bells-and-whistles that are ill-suited to production. Confirmation bias, due to the popularity of React, has blinded people to the reality that React should not be the foundational basis for hiring developers, starting new projects, nor performing frontend training and bootcamps. The reality is that developers and companies can remove React from their tooling and be better off for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Decade Apart
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://toot.cafe/@slightlyoff" rel="noopener noreferrer"&gt;Alex&lt;/a&gt; speaks a lot about the last decade, and when I look back, his claims resonate a lot with my experience. I can look at things happening in February 2013, and it makes me think he may have even been a little too kind limiting it to a decade. Issue #76 of "HTML5 Weekly" from &lt;a href="https://x86.social/@cooper" rel="noopener noreferrer"&gt;@cooper&lt;/a&gt; had a great (at the time) link to a &lt;a href="https://github.com/codylindley/simple-frontend-boilerplate" rel="noopener noreferrer"&gt;Simple Frontend Boilerplate&lt;/a&gt;&lt;sup&gt;3&lt;/sup&gt; useful as a historical record of the apps at the time.&lt;/p&gt;

&lt;p&gt;What we see, a decade ago, are that many of the "popular" libraries, frameworks, and methods, not surprisingly, have gone by the wayside, a lot that have remained in current code as difficult-to-&lt;del&gt;remove&lt;/del&gt;modernize legacy cruft (&lt;a href="https://bower.io/" rel="noopener noreferrer"&gt;Bower&lt;/a&gt;, &lt;a href="https://gulpjs.com/" rel="noopener noreferrer"&gt;Gulp&lt;/a&gt;, &lt;a href="https://gruntjs.com/" rel="noopener noreferrer"&gt;Grunt&lt;/a&gt;, &lt;a href="https://backbonejs.org/" rel="noopener noreferrer"&gt;Backbone&lt;/a&gt;, &lt;a href="https://angularjs.org/" rel="noopener noreferrer"&gt;Angular 1&lt;/a&gt;, ...), and then we have the small minority that are still here. Some that remain have had their utility lessened/questioned by platform and language improvements (&lt;a href="https://youmightnotneedjquery.com/" rel="noopener noreferrer"&gt;jQuery&lt;/a&gt;, &lt;a href="https://youmightnotneed.com/lodash" rel="noopener noreferrer"&gt;lodash&lt;/a&gt;, ...), but very, very few exist that are the same now as they were then. Another fun historical reference: issue #118 of "JavaScript Weekly" (February 22, 2013) includes a first link out to &lt;a href="http://asmjs.org/" rel="noopener noreferrer"&gt;asm.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;People were even "predicting" the rise of Single Page Apps (SPAs)&lt;sup&gt;4&lt;/sup&gt;. Given the broader historical context, my personal experience was taking over leadership of a Google Developer Group in 2013. So I was knee-deep in what Google was promoting for the open web (with an emphasis on mobile web performance): WebP, WebM, and the first look at Web Components&lt;sup&gt;5&lt;/sup&gt;. Web components transformed and reignited my passion for the web platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rise of React
&lt;/h2&gt;

&lt;p&gt;What followed in the years after, however, was a marketing blitz of React promotion. I know this quantitatively, by looking at my relatively neutral web development newsletter subscription emails (general web dev topics) and comparing "React" (the library) versus "Web Component(s)" occurrences (example: &lt;code&gt;after:2012/12/31 before:2013/12/31&lt;/code&gt;). &lt;/p&gt;

&lt;h3&gt;
  
  
  Email Newsletter Subscription Mentions
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Columns: the year searched, the number of emails received mentioning Web Components (WCs) or React (R), and the percent difference between Web Component emails and React emails.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;WCs&lt;/th&gt;
&lt;th&gt;React&lt;/th&gt;
&lt;th&gt;WC Diff&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2013&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;+371%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2014&lt;/td&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;+5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;108&lt;/td&gt;
&lt;td&gt;-74%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2016&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;167&lt;/td&gt;
&lt;td&gt;-86%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;142&lt;/td&gt;
&lt;td&gt;-87%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;121&lt;/td&gt;
&lt;td&gt;-82%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;-80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;157&lt;/td&gt;
&lt;td&gt;-93%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;153&lt;/td&gt;
&lt;td&gt;-90%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;td&gt;-80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2023&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;-65%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;What do I perceive as being the catalyst for the rise of React? React.js Conf in January of 2015&lt;sup&gt;6&lt;/sup&gt; and also a few months later the release of React Native&lt;sup&gt;7&lt;/sup&gt;. The first gave validation to the ability to run, or speak at, a conference with React topics, and the second gave developers a way to do "native" mobile development in a way much smoother than offerings available at the time. Thus began in earnest, in my view, "The Shill Wars". This is also when I started to notice that it had become more and more passe to discuss things other than React in my dev circles. Even significant platform updates fell by the wayside or went relatively unnoticed or unacknowledged.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Tale of Two Blogs
&lt;/h2&gt;

&lt;p&gt;My experience and subjective observation affirms every point in Alex's post. Unfortunately, that means that there were/are individuals, real people, ignorantly or intentionally continuing to regurgitate the same 'ol framework and library narratives with zeal. What has always been lacking, is accountability for the "complexity merchants". Instead of mea culpa, they went full &lt;a href="https://www.starwars.com/video/execute-order-66" rel="noopener noreferrer"&gt;Order 66&lt;/a&gt; on the Web Platform Jedi when confronted with the less savory realities of their libraries or frameworks.&lt;/p&gt;

&lt;p&gt;I came into &lt;a href="https://alpaca.gold/@seldo" rel="noopener noreferrer"&gt;Laurie's&lt;/a&gt; post with an open mind and relatively few expectations, but making a hasty generalization&lt;sup&gt;8&lt;/sup&gt; (intentionally or implicitly due to the proximity of the two statements) that of the "tens of millions" of software developers, a majority (71%) use React. I felt unseen, and the claim tripped me up, and misrepresented the 9.993 million other devs out there that may or may not use or know React. &lt;/p&gt;

&lt;h2&gt;
  
  
  There is Always Money in the React Stand
&lt;/h2&gt;

&lt;p&gt;This is not new ground we're treading. This is the same type of result we've seen year after year from the "State of JS" surveys. The network effect within the web development world reached a critical mass in favor of React in 2015, and due to the ever-present ability to make money off of training, conferences, media, and ephemera within the industry we've reached the point where confirmation bias runs so rampant that nobody is willing to accept that the Emperor's new library is not a net good for developers, for users, or for the web. There is a growing number of people who are trying to help those too afraid to appear inept or stupid to realize they have been duped (or so the folktale goes).&lt;/p&gt;

&lt;p&gt;Money, and the assessment of costs, is something I think Laurie also gets horribly wrong. Let's take a look at the February 2022 update to all the ways to make a web component&lt;sup&gt;9&lt;/sup&gt; to do some calculations and blow up the mainstream React narrative some more. &lt;/p&gt;

&lt;h3&gt;
  
  
  Developer, Storage, Performance Costs
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Legend: Items are based off of implementations or data from the ways to make a web component&lt;sup&gt;9&lt;/sup&gt;. Minified size, 30x (30 components), 50x (50 components). Comparison is between the HTMLElement implementation and the React with Hooks implementation. Diff is the percentage difference between the React and HTMLElement item.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;HTMLElement&lt;/th&gt;
&lt;th&gt;React&lt;/th&gt;
&lt;th&gt;Diff&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lines of Code&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;+32%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web Platform Concepts&lt;/td&gt;
&lt;td&gt;11&lt;sup&gt;10&lt;/sup&gt;
&lt;/td&gt;
&lt;td&gt;8&lt;sup&gt;11&lt;/sup&gt;
&lt;/td&gt;
&lt;td&gt;+38%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node/Library Concepts&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;6&lt;sup&gt;12&lt;/sup&gt;
&lt;/td&gt;
&lt;td&gt;-100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependencies&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;-100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minified Size&lt;/td&gt;
&lt;td&gt;1009&lt;/td&gt;
&lt;td&gt;131515&lt;/td&gt;
&lt;td&gt;-99%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30x Components Size&lt;/td&gt;
&lt;td&gt;30270/0&lt;/td&gt;
&lt;td&gt;23760/130723&lt;/td&gt;
&lt;td&gt;+27%/-100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50x Performance&lt;/td&gt;
&lt;td&gt;17.38/19.37&lt;/td&gt;
&lt;td&gt;34.55/38.11&lt;/td&gt;
&lt;td&gt;-50%/-49%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The truth is, React costs more in every way, it necessarily has to, because it is built off of the platform that natively runs web components. React also can't scale well, because it always carries around the specter of larger dependency overhead. &lt;/p&gt;

&lt;p&gt;Developers have to learn more to be productive with React, they have to manage more dependencies with React, the bandwidth used is higher, the performance is slower. If you strip portability and compatibility from the equation you may see gains with going with an all-React ecosystem, but then reuse and compatibility necessitate using React despite whether it is the best tool for the job. I've also seen this break down just between different versions of React being incompatible (with React or even vanilla JS; see import.meta issues), which is not something you get with native platform code.&lt;/p&gt;

&lt;p&gt;Yet, React proponents always seem to start with big claims but then are never held to account by the community when they are forced to backtrack on those claims. In some cases, there are attempts to distract with some new shiny claim that reposition the old claim either as wrong or more likely "less right" (looking at you &lt;code&gt;create-react-app&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;The biggest fallacious claim of the framework and library zealots is this statement from Laurie: "We want an open, accessible, world wide web." What part of a library of choice actively working against existing W3C web standards and resisting acceptance of PRs to help devs trying to use those standards with your library seems open and accessible? &lt;/p&gt;

&lt;p&gt;The solution is &lt;em&gt;NOT&lt;/em&gt; more frameworks, the solution is what Alex, myself, and many others have been advocating all along: use the platform. If it doesn't do what you want, make proposals, participate in the standards process via working groups or other open communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Your path you must decide" - Yoda
&lt;/h2&gt;

&lt;p&gt;Good news! You can start adding things like web components to your existing apps without a complete rewrite or much concern for compatibility or build process. Easing into web components can be as simple as adding a custom element (no Shadow DOM) to handle string formatting. &lt;/p&gt;

&lt;p&gt;We started with a date/time formatter to solve an issue we had with search results not matching a user's locale date formatting when they searched for things between specific dates. We grew from there to make an entire search page made with vanilla web components (no libraries, no frameworks, no dependencies; including Shadow DOM): &lt;a href="https://developers.redhat.com/search?t=openshift" rel="noopener noreferrer"&gt;https://developers.redhat.com/search?t=openshift&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can take small steps to end the naked parade of unchecked  power that React has enjoyed for a decade just by leveraging the standards that the platform already provides more often, and telling others about your experience with them.&lt;/p&gt;




&lt;p&gt;&lt;a&gt;[0]&lt;/a&gt; - &lt;a href="https://w3c.social/@lukedary/109851919543348747" rel="noopener noreferrer"&gt;https://w3c.social/@lukedary/109851919543348747&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[1]&lt;/a&gt; - "The Market for Lemons" - Alex Russell - &lt;a href="https://infrequently.org/2023/02/the-market-for-lemons/" rel="noopener noreferrer"&gt;https://infrequently.org/2023/02/the-market-for-lemons/&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[2]&lt;/a&gt; - "The Case for Frameworks" - Laurie Voss - &lt;a href="https://seldo.com/posts/the_case_for_frameworks" rel="noopener noreferrer"&gt;https://seldo.com/posts/the_case_for_frameworks&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[3]&lt;/a&gt; - "Simple Frontent Boilerplate" - Cody Lindley - &lt;a href="https://github.com/codylindley/simple-frontend-boilerplate" rel="noopener noreferrer"&gt;https://github.com/codylindley/simple-frontend-boilerplate&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[4]&lt;/a&gt; - "HTML5: 10 Provocative Predictions For The Future" - Todd Anglin - &lt;a href="https://readwrite.com/html5-10-provocative-predictions-for-the-future/" rel="noopener noreferrer"&gt;https://readwrite.com/html5-10-provocative-predictions-for-the-future/&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[5]&lt;/a&gt; - "Web Components: A Tectonic Shift for Web Development - Google I/O 2013" - Eric Bidelman - &lt;a href="https://www.youtube.com/watch?v=fqULJBBEVQE" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=fqULJBBEVQE&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[6]&lt;/a&gt; - "React.js Conf Round-up 2015" - Steven Luscher - &lt;a href="https://reactjs.org/blog/2015/02/18/react-conf-roundup-2015.html" rel="noopener noreferrer"&gt;https://reactjs.org/blog/2015/02/18/react-conf-roundup-2015.html&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[7]&lt;/a&gt; - "Introducing React Native" - Sophie Alpert - &lt;a href="https://reactjs.org/blog/2015/03/26/introducing-react-native.html" rel="noopener noreferrer"&gt;https://reactjs.org/blog/2015/03/26/introducing-react-native.html&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[8]&lt;/a&gt; - "What Is the Hasty Generalization Fallacy?" - Lindsay Kramer - &lt;a href="https://www.grammarly.com/blog/hasty-generalization-fallacy/" rel="noopener noreferrer"&gt;https://www.grammarly.com/blog/hasty-generalization-fallacy/&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[9]&lt;/a&gt; - "All the Ways to Make a Web Component - Feb 2022 Update" - Many Authors - &lt;a href="https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/" rel="noopener noreferrer"&gt;https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/&lt;/a&gt;&lt;br&gt;
&lt;a&gt;[10]&lt;/a&gt; - HTML, CSS, JS - Variables, DOM, Template Strings, Classes, Custom Element Lifecycle Callbacks, Shadow DOM, Events, Custom Elements Registry&lt;br&gt;
&lt;a&gt;[11]&lt;/a&gt; - HTML, CSS, JS - modules, variables, functions, Destructuring, Template Strings, Custom Elements Registry&lt;br&gt;
&lt;a&gt;[12]&lt;/a&gt; - JSX, Node modules, React, useState, ReactDOM, reactToWebComponent  &lt;/p&gt;

&lt;p&gt;I want to express my utmost gratitude to &lt;a href="https://infrequently.org/" rel="noopener noreferrer"&gt;Alex&lt;/a&gt;, &lt;a href="https://bennypowers.dev/" rel="noopener noreferrer"&gt;Benny&lt;/a&gt;, and &lt;a href="https://www.stevenspriggs.com/" rel="noopener noreferrer"&gt;Steven&lt;/a&gt; for giving my drafts of this post some much needed feedback and direction.&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>design</category>
    </item>
    <item>
      <title>5 Practical Activities for Exercising Your Patience</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Wed, 20 Nov 2019 15:25:19 +0000</pubDate>
      <link>https://dev.to/kamiquasi/5-practical-activities-for-exercising-your-patience-2lne</link>
      <guid>https://dev.to/kamiquasi/5-practical-activities-for-exercising-your-patience-2lne</guid>
      <description>&lt;h1&gt;
  
  
  Hurry Up and Be Patient
&lt;/h1&gt;

&lt;p&gt;I don't think of myself as a patient person. When I am driving it takes very little delay, whether red lights or the speed of other drivers, to really get my blood boiling. However, in different contexts I have been told I am patient and have had people ask me how I can be so patient. My secret, if you can call it that, is to practice being patient in easy ways so that when I &lt;em&gt;really&lt;/em&gt; need to be patient in tougher situations it is second nature, or at the very least, less difficult.&lt;/p&gt;

&lt;p&gt;Impatience can be costly in every aspect of life. Rushing in can cause your code to be full of bugs, your relationships to burn too hot and flame out, your finances to evaporate, and your mode of transportation to crash. The most obvious benefit of patience is the avoidance of all those negative consequences, but usually patience also comes with peace-of-mind and some amount of serenity even when things are not that way around you.&lt;/p&gt;

&lt;h1&gt;
  
  
  Timing is Everything
&lt;/h1&gt;

&lt;p&gt;In some cases we need patience to endure; in other cases we need patience to appropriately react. Consider two very different situations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sitting on a tractor in the middle of hundreds of acres of alfalfa with nothing but your thoughts and the job at hand to pass the time; you could anxiously await the end of the work or take the time to observe, ponder, or maybe just sing a song to yourself. &lt;/li&gt;
&lt;li&gt;You're the coach of a baseball team with nine players aged from four to seven who are all hot, thirsty, needing to go to the bathroom, and moving like electrons while you try to get them to play the game properly; you could be &lt;em&gt;that&lt;/em&gt; person (you know, the one in the news) and let your temper get the best of you or you can yell out positive and corrective instructions repeatedly without ceasing and "praise a good effort, despite the outcome of the game".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In both scenarios patience leads to an arguably better outcome. The expression of that patience is different. One is passive engagement within the constraints of a circumstance, and the other is active engagement to change the circumstance. &lt;/p&gt;

&lt;h1&gt;
  
  
  Ridiculously Impatient
&lt;/h1&gt;

&lt;p&gt;I watched in stunned silence one morning recently on my drive to work as two lanes merged to one and two drivers in front of me were so impatient that neither would concede space to the other even though traffic at the time was plodding along no faster than 10 miles per hour. It ended in a literal slow-motion bump of the cars, which meant both drivers had to pull over and spend time dealing with something that a little patience by just one of them would've prevented.&lt;/p&gt;

&lt;h1&gt;
  
  
  Do you even wait, bro?
&lt;/h1&gt;

&lt;p&gt;Building up our ability to be patient is no different than exercising our bodies to gain strength or stamina. In the same way you start with less weight or less time and build them up over time; you can do the same thing with purposeful acts of patience to build up your tolerance for larger efforts.&lt;/p&gt;

&lt;h1&gt;
  
  
  5 Practical Patience-building Activities
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lines/Queues&lt;/strong&gt; - Let someone in front of you for a completely arbitrary and unselfish reason. This could be waiting to order a meal, at the grocery store, even just holding a door open. I did this while waiting to submit my information for a passport and ended up having a delightful conversation with a woman about her godchildren while the postal service worker was looking for her mail. The reason I gave was, "This stuff will probably take a while." &lt;em&gt;Continue to find ways to increase the number of people or the frequency at which you do this when you've found it easier&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Traffic&lt;/strong&gt; - similar to lines, but without the potential for interpersonal interaction or much thanks. This is nuanced, because you have to balance slowing traffic behind you with allowing someone to come in. Typically it doesn't make sense to let a whole line of traffic in, so one or two cars is probably the max unless there is some reason to allow more. The big thing to remember is what does and doesn't save you time. Keep speed in perspective, because if you're going to gain a measly five miles per hour for a trivial amount of time you really didn't get much benefit. If traffic in front of you is stopped, or the person has been waiting as long as you then you won't be saving any time by &lt;em&gt;not&lt;/em&gt; letting them in. &lt;em&gt;Big rig semi-trailer trucks are an easy win here; let them in, and don't be angry when they don't accelerate as fast as you would like to&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Children&lt;/strong&gt; - On the surface, what appears to be a heightened level of impatience is usually just a more rapid perception of time than you are used to. Holding the attention of a young person for five minutes feels like an eternity to them. However, on the other end of that, sometimes talking with a young person for an extended period of time can seem like an eternity when they rail through their opinion, what they ate, and how their dog likes to chew on sticks within 30 seconds. Try carrying on a relatively meaningful (to them) conversation with a child. Obviously this comes with some caution as you can't just go hitting up the nearest child with conversation, but use your best judgment. This one really builds up tolerance for long corporate meetings, by the way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lead/Coach/Teach&lt;/strong&gt; - Nothing can be more fulfilling and also more disheartening than being a coach, a teacher, or a leader; taking responsibility for the performance of others is a huge task. If you have skills, abilities, or just time that you can share or pass on to others, seek out opportunities to do so no matter how inconsequential they may seem. There will be frustration, but if you work through it with positive, corrective feedback rather than anger and disappointment it will enrich you and those in your charge. Be strategic and calculated in how you respond. There are huge patience gains to be had if you can combine leadership or instruction with children; coach a youth sports team or teach a short class on a skill and you'll find that coming out the other side you will see a lot of other situations as pretty trivial by comparison.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Early-ness&lt;/strong&gt; - Do things with a mind to being early when possible; the result is time to spend on things you probably wouldn't spend time on otherwise: thinking, observing details, watching people, enjoying a few moments of life with no specific course of action required. We don't do these types of things enough. We fill our schedules up with ease but we often neglect to have some time to do whatever we want. Examples: get to a doctor's appointment early, wake up early, get to dinner reservations early, finish (or just stop) a task early. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Patience for fun and profit
&lt;/h1&gt;

&lt;p&gt;Hopefully you can adjust these tips to your context. More patience in the world will always be a good thing, so if you have other tips or tricks to pass on I would love to hear them. I'd also love to hear about complete failures and breakdowns where impatience was clearly not a winning decision.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>humanity</category>
      <category>life</category>
    </item>
    <item>
      <title>Enterprise-grade Web Components</title>
      <dc:creator>Luke</dc:creator>
      <pubDate>Mon, 04 Nov 2019 21:27:51 +0000</pubDate>
      <link>https://dev.to/kamiquasi/enterprise-grade-web-components-3352</link>
      <guid>https://dev.to/kamiquasi/enterprise-grade-web-components-3352</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;Rome ne s'est pas faite en un jour.&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;This is roughly translated as:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;"Your 'enterprise' should start using web components today".&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Enterprising Misconceptions
&lt;/h2&gt;

&lt;p&gt;In terms of doing business, enterprise-y technologies do not typically evoke thoughts of &lt;strong&gt;quick&lt;/strong&gt;, &lt;strong&gt;flexible&lt;/strong&gt;, or &lt;strong&gt;easy&lt;/strong&gt; except maybe from someone trying to sell you something "enterprise-grade". They'll throw those words out to combat misconceptions of what that phrase means and then also remark on how they're also &lt;strong&gt;stable&lt;/strong&gt;, &lt;strong&gt;supported&lt;/strong&gt;, and &lt;strong&gt;secure&lt;/strong&gt;. Now that my sales pitch is out of the way, let's talk about web components in the enterprise.&lt;/p&gt;
&lt;h2&gt;
  
  
  Web Component Misconceptions
&lt;/h2&gt;

&lt;p&gt;I have seen a number of recent posts from people I otherwise respect in the industry misrepresenting web components in a way that may lead others astray. My TLDR; to most of them is just regurgitating some of my Google-y indoctrination, but it applies: use the platform. The landscape of frameworks and libraries for front-end development is extremely fluid, but the core platform remains a stable, and innovative space to do development. &lt;/p&gt;

&lt;p&gt;There is notable risk in going all-in on web APIs that have not reached standard specification (v0 web components with HTML Imports, is a great example), but there are also reasons the risks might be worth taking if you can provide a richer experience to users in browsers that have implemented an early spec. I would even say that there are all sorts of valuable lessons you can learn from dabbling in bleeding edge Web APIs. Most of the time the &lt;a href="https://dev.to/richharris/why-i-don-t-use-web-components-2cia#1-progressive-enhancement"&gt;examples&lt;/a&gt; &lt;a href="https://adamsilver.io/articles/the-problem-with-web-components/#they-are-easily-misunderstood-and-misused"&gt;given&lt;/a&gt; for Web Component code avoid any thought on how to mitigate their perceived issues (e.g. - users with JavaScript turned off) and instead take the well-trodden path of saying these are non-starters while proceeding to avoid like comparisons to their favorite &lt;em&gt;solution-du-jour&lt;/em&gt; - translated: Library/Framework Soup. &lt;/p&gt;

&lt;p&gt;HTML, CSS, and JavaScript are the root of Web Components; the best practices we have learned over the years in those realms apply, and probably to a greater extent than with something that is extra-platform. Don't rule out the declarative nature of web components (DOM elements just like the rest of your HTML) in lieu of snazzy class hooks or other, more magical (translated - less obvious to debug), methods.&lt;/p&gt;

&lt;p&gt;Consider what mental overhead a developer would need to debug functional issues with these two examples, which would both progressively enhance the experience with JS available, and be accessible without JS enabled:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;a target="_blank" noreferrer href="..." class="svelte-1jnfxx"&amp;gt;Tweet this&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;



&lt;p&gt;&lt;code&gt;&amp;lt;twitter-share text="..." url="..." via="..."/&amp;gt;&lt;br&gt;
    &amp;lt;a target="_blank" noreferrer href="..."&amp;gt;Tweet this&amp;lt;/a&amp;gt;&lt;br&gt;
&amp;lt;/twitter-share&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;In the first case, there is the initial understanding that the &lt;code&gt;svelte-xxx&lt;/code&gt; class tells you that there is some code somewhere to handle this thing, but the only context is in the text that it is a "Tweet", so see if you can figure out what to search for or maybe you know where the code is for that. Compare that with a blatantly obvious web component that has a searchable tag name to likely take you to, or close to, the definition.&lt;/p&gt;

&lt;p&gt;There is a lot more to say on the topic of those vocal opponents of Web Components, but just be aware that there are some and they are not without bias that affects their accurate portrayal of Web Components.&lt;/p&gt;

&lt;p&gt;Web Components properly done are an effective way to progressively enhance your HTML while gracefully degrading to the core elements that all browsers can understand. It also allows you to clean up some of the less savory markup that is often functional, but ridiculous:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;div class="pf-l-grid__item pf-m-8-col-on-lg pf-m-7-col-on-md pf-m-6-col-on-sm pf-u-display-flex pf-u-justify-content-center pf-u-flex-direction-column pf-u-pt-lg-on-sm pf-u-pb-lg-on-sm pf-u-pt-2xl-on-md pf-u-pb-2xl-on-md"&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise Component Stakeholders
&lt;/h2&gt;

&lt;p&gt;The volume of stakeholders for things in the enterprise generally get more expansive than your run-of-the-mill-and-fly-by-the-seat-of-your-pants start-up or small business does (NEOs). Instead of targeting niche or innovative 'new' markets, enterprises usually have to accommodate for both internal and external stakeholders that cover a significant portion of the global population. Here is a list of typical stakeholders and their common stakes in a given project: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Internal&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legal - &lt;em&gt;naming&lt;/em&gt;, licensing, and other legal stuff
&lt;/li&gt;
&lt;li&gt;Brand/Marketing - &lt;em&gt;naming&lt;/em&gt;, messaging, hashtags&lt;/li&gt;
&lt;li&gt;Product Owners - &lt;em&gt;naming&lt;/em&gt;, features&lt;/li&gt;
&lt;li&gt;Project Managers - &lt;em&gt;naming&lt;/em&gt;, deadlines, acceptance&lt;/li&gt;
&lt;li&gt;QA/QE/Q Continuum - &lt;em&gt;naming&lt;/em&gt;, tests, performance&lt;/li&gt;
&lt;li&gt;IT - &lt;em&gt;naming&lt;/em&gt;, hosting, infrastructure&lt;/li&gt;
&lt;li&gt;Co-workers interested in your stuff - &lt;em&gt;naming&lt;/em&gt;, better ways to do it&lt;/li&gt;
&lt;li&gt;Potential Employees/Associates - &lt;em&gt;naming&lt;/em&gt;, cool factor&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;External&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Existing Clients/Users

&lt;ul&gt;
&lt;li&gt;See Internal
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Potential Clients/Users - &lt;em&gt;naming&lt;/em&gt;, features, cost &lt;/li&gt;
&lt;li&gt;Other developers - &lt;em&gt;naming&lt;/em&gt;, security, compatibility, support, documentation&lt;/li&gt;
&lt;li&gt;Trolls (they exist!) - &lt;em&gt;naming&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enterprise Component Technical Considerations
&lt;/h2&gt;

&lt;p&gt;Web components at the enterprise level need to check off a lot of feature boxes to really measure up. If you are considering adopting or integrating web components at your enterprise here are features to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compatibility - there are two audiences to consider: users and developers. Does using web components allow you to provide your users something that can't be done, or can't be done easily, using standard HTML elements? Browser compatibility is a solved issue, and although the polyfill solutions for older browsers are not without their gotchas, they are not what I would call the majority case like they once previously were. Sensible fallbacks and style defaults can accommodate those without modern browsers when necessary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers will be concerned with whether the components integrate with your existing code. In the vast majority of cases this should be true since web components are part of the web platform, but in some cases there may be small adjustments to make the integration seamless (e.g.- your favorite libraries or frameworks: &lt;a href="https://medium.com/patternfly-elements/using-patternfly-elements-web-components-in-your-react-app-fe079be262ed"&gt;React&lt;/a&gt;, &lt;a href="https://medium.com/patternfly-elements/using-patternfly-elements-web-components-in-your-vue-app-340fc9a9d7e5"&gt;Vue&lt;/a&gt;, &lt;a href="https://medium.com/patternfly-elements/using-patternfly-elements-web-components-in-your-angular-app-4b18b1c9c363"&gt;Angular&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accessibility (a11y) - even though web components are mostly implemented in JavaScript that doesn't mean that your site should break if you use them. An enterprise-grade component should handle both graceful degradation (provide a sensible and functional alternative if the component cannot run) as well as progressive enhancement (in cases where the component runs it should improve the experience for all users). Additionally, enterprise components should follow common a11y practices, and in the best cases should handle these concerns out-of-the-box without user intervention.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A11y is where a lot of the sample code for, and more simple understanding of, Web Components goes completely off the rails. I am also guilty of doing things like this in a production environment, and I have little remorse about it because nobody complained. However, recent litigation has shown that the lack of complaints doesn't mean that you won't be held liable when someone does.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;awesome-link-previewer url="..." effect="ease-in"&amp;gt;&amp;lt;/awesome-link-previewer&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The reason this is used as an example is because you &lt;em&gt;can&lt;/em&gt; write all the HTML content of the component within the component itself. However, as noted above, this is &lt;strong&gt;not&lt;/strong&gt; the correct way to do things. Enterprise-grade web components balance the fine line of doing awesome things, while not getting in the way of the regular flow of the web. If you have a component that does cool things to an existing HTML element, that existing element should be rendered to the page and not hidden within the Shadow DOM. It would be like populating a &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; with &lt;code&gt;&amp;lt;option&amp;gt;&lt;/code&gt;s using JS. We know that type of code doesn't always fly for a11y.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Scalability - concerns about scale are frequently left until the end (like in this post), but should really be an up-front consideration. An enterprise-grade component scales well in engineering effort (to create, maintain, and extend them), in performance (one works fine on a page, but what about one thousand? Ten thousand? One billion?), and in usage (written once, but usable around the enterprise). There are occasions where you just need that one-off thing to do a thing, but make sure that if it is a web component that you at least have a thought towards someone else using it, even if it is just the next person to maintain your code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Internationalization (i18n) - I haven't seen much effort put towards this, but if your enterprise is a global organization you'll either need hooks for this or a mechanism to provide translation services. The easiest way for this to work is for the text content to be handled by something other than the web component itself, but a simple flag and translation file would probably work in a pinch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stability and Support - The upcoming release of Microsoft's new Chrome-based Edge means that most/all major browser vendors will have a stake in enhancing the web platform. There is little to no trickery in getting a web component to work, but in the event things don't work, there is a large, and ever-growing community of developers who have likely gone through the same struggles or know how to solve your problem. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;Web Components are here to stay, and if I can make a bold claim, they will be around long after your favorite library/framework. Enterprises seeking to consolidate their eclectic mix of frameworks and libraries can benefit from developing a web component library. Web components allow an organization to provide on-brand elements for building sites, apps, or just small parts of a page. There are very few reasons left for why an enterprise would not take advantage of this web standard. You should use web components today.&lt;/p&gt;

&lt;p&gt;Feedback and critique are always welcome. &lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise-grade Web Component Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/patternfly/patternfly-elements"&gt;https://github.com/patternfly/patternfly-elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SAP/ui5-webcomponents"&gt;https://github.com/SAP/ui5-webcomponents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/salesforce/lwc"&gt;https://github.com/salesforce/lwc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;translated:&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;&lt;br&gt;
Not at all translated. Let's be honest, you didn't actually believe that for a second, did you? Better actual translation: &lt;em&gt;"Rome wasn't built in a day."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;enterprise-y:&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;&lt;br&gt;
organization or business stuff typically &lt;em&gt;not&lt;/em&gt; targeted to small businesses or start-ups because of factors like cost, scale, governance, or some other fancy words that someone might use&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;stuff:&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;&lt;br&gt;
technical term for just about anything that makes sense in the context; may replace with random words for humor (e.g. - business &lt;em&gt;monkey&lt;/em&gt;, legal &lt;em&gt;cheesecake&lt;/em&gt;, your &lt;em&gt;hiccups&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NEO:&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;&lt;br&gt;
Non-Enterprise-y Organizations; aka - &lt;em&gt;cool kids&lt;/em&gt;, &lt;em&gt;hipster businesses&lt;/em&gt;, and &lt;em&gt;vc fodder&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;open source:&lt;/strong&gt; &lt;a&gt;&lt;/a&gt;&lt;br&gt;
You know, that code you use all the time, but also add great features to  on your projects, which you then commit back to the community so everyone benefits? What?! You don't do that?! For shame...&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>ux</category>
    </item>
  </channel>
</rss>
