<?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: Ken Swearengen</title>
    <description>The latest articles on DEV Community by Ken Swearengen (@kennyray212).</description>
    <link>https://dev.to/kennyray212</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%2F853336%2Ff2f35655-51a8-45f9-a6d8-157dfd874200.jpg</url>
      <title>DEV Community: Ken Swearengen</title>
      <link>https://dev.to/kennyray212</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kennyray212"/>
    <language>en</language>
    <item>
      <title>Dev Discussions: How to Reduce your Angular Bundle Size with Google Developers Expert Santosh Yadav</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Mon, 18 Jul 2022 11:24:40 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-how-to-reduce-your-angular-bundle-size-with-google-developers-expert-santosh-yadav-2c3k</link>
      <guid>https://dev.to/coderpad/dev-discussions-how-to-reduce-your-angular-bundle-size-with-google-developers-expert-santosh-yadav-2c3k</guid>
      <description>&lt;p&gt;If you ever have questions about Angular, &lt;a href="https://twitter.com/SantoshYadavDev?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor"&gt;Santosh Yadav&lt;/a&gt; is the person to ask.&lt;/p&gt;

&lt;p&gt;Not only is he an &lt;a href="https://auth0.com/ambassador-program"&gt;Auth0 ambassador&lt;/a&gt; and a &lt;a href="https://stars.github.com/"&gt;GitHub Star&lt;/a&gt;, but he’s currently certified as a &lt;a href="https://developers.google.com/community/experts"&gt;Google Developers Expert&lt;/a&gt; for Angular. &lt;/p&gt;

&lt;p&gt;Santosh jumped into the deep end with Angular early in his career—building apps, teaching others, and attending conferences in his spare time. That dedication to Angular worked out, as he’s now a leading &lt;a href="https://en.wikipedia.org/wiki/MEAN_(solution_stack)"&gt;MEAN stack&lt;/a&gt; trainer and developer, with his own popular&lt;a href="https://www.youtube.com/c/TechTalksWithSantosh/videos"&gt; Angular-focused YouTube channel&lt;/a&gt; to boot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/videos/1314167351"&gt;Santosh recently sat down with CoderPad Developer Advocate Corbin Crutchley&lt;/a&gt; to discuss one Angular topic that’s particularly popular these days – reducing the bundle size of angular apps.&lt;/p&gt;

&lt;p&gt;Bundle sizes impact the performance of a website. If you have a bundle of greater than 1MB, then your user has to wait longer for the browser to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download that bundle&lt;/li&gt;
&lt;li&gt;Parse the bundle&lt;/li&gt;
&lt;li&gt;Display contents of the bundle&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While this might not seem like a big deal, each MB can take an extra second, which can easily cause a user to lose interest and navigate away from the site – not exactly a good business practice.&lt;/p&gt;

&lt;p&gt;Santosh loves using Angular to reduce bundle size and points out four ways Angular can help you do this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tree shaking via Angular Ivy&lt;/li&gt;
&lt;li&gt;Lazy loading&lt;/li&gt;
&lt;li&gt;Source map analyzers&lt;/li&gt;
&lt;li&gt;Standalone components&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bundle reduction tip #1: Use tree shaking
&lt;/h2&gt;

&lt;p&gt;A typical library will ship with hundreds of functions, but rarely will your application need to use all of them.&lt;/p&gt;

&lt;p&gt;This presents a problem in that importing the &lt;em&gt;entire&lt;/em&gt; library can drastically increase your bundle size.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tree shaking&lt;/em&gt; is a way to only import the functions of a module your application will use. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TonpgiQP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/07/img_62d1791786900.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TonpgiQP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/07/img_62d1791786900.png" alt="A comparison of component map with tree shaking. On the left is one index.js file with 3 modules. One module has three files, and one of those files has three functions. In total this beforee images has four files and 11 functions that will be build. On the right is the after tree shaking image where one file has one module, that module has one file, and that file has one function that will be included in the bundle." width="880" height="385"&gt;&lt;/a&gt;&lt;a href="https://stackoverflow.com/questions/45884414/what-is-tree-shaking-and-why-would-i-need-it/55936233#55936233"&gt;via Aaditya Sharma on StackOverflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depending on the size of the library you’re utilizing, you can drastically cut down on your bundle size. As a bonus, you don’t need to do anything to do tree shaking in your Angular application – it’s been a part of Angular Ivy since Angular 8.&lt;/p&gt;

&lt;p&gt;If you’re not familiar with it, Ivy is – at its simplest – an ultra-efficient rendering pipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lDbliz70--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/07/img_62d17918bda46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lDbliz70--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/07/img_62d17918bda46.png" alt='An image with four boxes labelled "rendering pipelien in angular". The first box says "template html", then an arrow to the next box which says "template data", then an arrow to the next box which says "angular interpreter", and finally an arrow pointing to a box that says "DOM".' width="800" height="300"&gt;&lt;/a&gt;The steps Angular Ivy takes to render updates to the DOM. &lt;a href="https://www.angularminds.com/blog/article/what-is-angular-ivy.html"&gt;Via AngularMinds&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition to reducing the bundle size, you’ll also get &lt;a href="https://blog.angular.io/version-9-of-angular-now-available-project-ivy-has-arrived-23c97b63cfa3"&gt;the following benefits&lt;/a&gt; with Ivy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster testing&lt;/li&gt;
&lt;li&gt;Better debugging&lt;/li&gt;
&lt;li&gt;Improved CSS class and style binding&lt;/li&gt;
&lt;li&gt;Improved type checking&lt;/li&gt;
&lt;li&gt;Improved build errors&lt;/li&gt;
&lt;li&gt;Improved build times, enabling AOT on by default&lt;/li&gt;
&lt;li&gt;Improved Internationalization&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bundle reduction tip #2: Lazy loading
&lt;/h2&gt;

&lt;p&gt;While tree shaking will prevent completely unused pieces of code from making it into your bundle, you’ll often have functions that are not used when a user first logs into your application but will be used later.&lt;/p&gt;

&lt;p&gt;Lazy loading creates multiple chunks of code that are only loaded when that particular code is used in the application.&lt;/p&gt;

&lt;p&gt;This can really reduce the size of the application, especially if you split libraries into different feature modules that are only used when needed by the application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YQedxP7f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/07/img_62d179191890b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YQedxP7f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/07/img_62d179191890b.png" alt='A component map labelled Lazy loading along with the Angular symbol. The map has several components, some are marked "lazy" and the rest are not. ' width="880" height="495"&gt;&lt;/a&gt;Example component structure with lazy loading. Via &lt;a href="https://i.ytimg.com/vi/vLIIhzLGmxA/maxresdefault.jpg"&gt;9lessons.info&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While lazy loading isn’t just limited to Angular (you can use it in React via &lt;a href="https://reactjs.org/docs/code-splitting.html"&gt;React.lazy&lt;/a&gt; as well), when paired with the other bundle-reducing technology it makes Angular quite an attractive framework for creating smaller applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bundle reduction tip #3: Source map analyzers
&lt;/h2&gt;

&lt;p&gt;A source map analyzer is precisely what it sounds like – it analyzes the different files, components, and modules of your application to show you how big they are.&lt;/p&gt;

&lt;p&gt;You can then use this information to see where you can improve your code base’s efficiency to reduce its size. Santosh found source map analyzers particularly useful to reduce the size of a component with a large bundle size due to a CSS issue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A6kAjG3p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/07/img_62d17919984d0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A6kAjG3p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/07/img_62d17919984d0.png" alt="A source analysis map that shows the size of different files and folders in relation to one another." width="880" height="516"&gt;&lt;/a&gt;Example results of a source map analysis. Via &lt;a href="https://www.digitalocean.com/community/tutorials/angular-bundle-size"&gt;DigitalOcean&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As demonstrated in the example above, you can see which dependencies take up the most space. If they’re configured wrong, you’ll be able to tell immediately.&lt;/p&gt;

&lt;p&gt;Alternatively, it may help you decide to migrate away to different dependencies to reduce the bundle size further.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bundle reduction tip #4: Standalone components
&lt;/h2&gt;

&lt;p&gt;One of the newest Angular features to help you reduce bundle size are standalone components:&lt;/p&gt;

&lt;p&gt;“Standalone components, directives, and pipes aim to streamline the authoring experience by reducing the need for NgModules,” according to the &lt;a href="https://angular.io/guide/standalone-components"&gt;Angular developer documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Angular is unique in frontend frameworks because you must register your components. &lt;/p&gt;

&lt;p&gt;Standalone components force you to have more explicit imports, which enables you to side-step the need for tree-shaking in some places because you’re just not manually including what you don’t need.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to avoid Angular overdose
&lt;/h2&gt;

&lt;p&gt;As much as Santosh loves working with Angular, he’s also a big advocate of work-life balance. He has advice for would-be workaholics and &lt;a href="https://dev.to/this-is-learning/how-i-made-workplace-toxic-1ici"&gt;how managers can help prevent employee burnout&lt;/a&gt; – and you can watch him talk about those in the &lt;a href="https://www.twitch.tv/videos/1314167351"&gt;Twitch playback video here&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Interested in more conversations with developers about their tech stacks? Check out these other &lt;em&gt;Dev Discussions&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/user-interfaces-with-esther-agbaje-chakra/"&gt;Creating Fantastic User Interfaces with Esther Agbaje of Chakra UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/intro-to-jamstack-with-salma-alam-naylor/"&gt;Intro to the Jamstack with Salma Alam-Naylor of Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/sql-vs-nosql-with-james-quick/"&gt;SQL vs. NoSQL with James Quick of PlanetScale&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Dev Discussions: Everything You Need to Know about Monorepos with Juri Strumpflohner of Nrwl</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Wed, 13 Jul 2022 13:29:26 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-everything-you-need-to-know-about-monorepos-with-juri-strumpflohner-of-nrwl-5ei8</link>
      <guid>https://dev.to/coderpad/dev-discussions-everything-you-need-to-know-about-monorepos-with-juri-strumpflohner-of-nrwl-5ei8</guid>
      <description>&lt;p&gt;As the Director of Developer Experience for &lt;a href="https://nrwl.io/"&gt;Nrwl&lt;/a&gt; (pronounced “narwhal,” like the sea creature), &lt;a href="http://twitter.com/juristr"&gt;Juri Strumpflohner&lt;/a&gt; knows a thing or two about monorepos.&lt;/p&gt;

&lt;p&gt;Nrwl is the company behind &lt;a href="https://nx.dev/"&gt;Nx&lt;/a&gt;, perhaps the most popular monorepo management tool. Juri’s job is to ensure developers like you have the best possible experience using Nx.&lt;/p&gt;

&lt;p&gt;If you’ve never heard the term &lt;em&gt;monorepo&lt;/em&gt;, you’ll want to pay close attention to this post. Monorepos have become increasingly popular as organizations look for more efficient ways to manage and collaborate with their code bases.&lt;/p&gt;

&lt;p&gt;At its simplest, a monorepo is a repository that contains all aspects of an organization’s code base – different projects, applications, and libraries all live together in the same repo. This is in contrast to a polyrepo, where everything lives in its own separate repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/06/img_62b1fec461d46.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IjpVNKyf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/06/img_62b1fec461d46.png" alt='Top image is labeled "monorepo" and has "org 1" at the top with lines drawn from this box to boxes labeled app 1, lib 1, app 2, lib 3, and lib 2. the send image below that is labeled "polyrepo" and has a circle in the middle labelled "library repo" with other circles labelled app 4 repo, app 1 repo, app 2 repo, app 3 repo, and app 2 repo all pointing towards the library repo circle in the center.' width="880" height="1024"&gt;&lt;/a&gt;&lt;a href="https://monorepo.tools/images/monorepo-polyrepo.svg"&gt;Via monorepo.tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pioneered by tech giants like &lt;a href="https://bazel.build/"&gt;Google&lt;/a&gt; and &lt;a href="https://buck.build/"&gt;Meta&lt;/a&gt; with tools like Bazel and Buck, monorepos are seeing widespread adoption across companies of all sizes and industries.&lt;/p&gt;

&lt;p&gt;CoderPad Developer Advocate Corbin Crutchley recently sat down with Juri to discuss what it is about monorepos that are making them so popular – and possibly heading to a code base near you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monorepos – more than just a single repo
&lt;/h2&gt;

&lt;p&gt;While the word &lt;em&gt;monorepo&lt;/em&gt; comes from mono-repository, the term itself can be misleading.&lt;/p&gt;

&lt;p&gt;Yes, one of the defining features of a monorepo is that two or more applications or libraries reside within the same repository or workspace. &lt;/p&gt;

&lt;p&gt;But that alone doesn’t make a monorepo – it makes it a messy monolithic repository that generates more problems than it solves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A good monorepo is defined by the relationships and connections between the components of the repository.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This means that the relationships the development teams would build outside their repository – between applications, libraries, configuration files, etc. – are instead built inside a single repository. Each component has ready access to the other members within the repository.&lt;/p&gt;

&lt;p&gt;Compare this to the more traditional polyrepo, where each application and library has its own repository. To connect, they have to pull packages from the outside using something like node package manager (npm) registries. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ℹ️ Despite the name, most companies don’t have just one repository for the entire company. Many large enterprises will have a few monorepos, each dedicated to a particular domain or department. The key is that within these monorepos, the barrier to collaboration is lower than it would be in a polyrepo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can now start to see some of the benefits of monorepos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since everything is accessible to everything else, all applications have access to the same libraries. That means you’re drastically reducing the amount of redundant code.&lt;/li&gt;
&lt;li&gt;You only need one Continuous Integration/Continuous Delivery process, as opposed to one for every repository.&lt;/li&gt;
&lt;li&gt;It’s easier to catch dependency errors. Since everything is integrated into the same build, the monorepo build tool will catch any downstream errors resulting from the change during compilation rather than when the dependent application or library consumes the change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Often, companies will start building out their monorepo management process themselves. After all, it’s simple enough to throw a couple of applications and libraries into a repository and write the scripts to link them.&lt;/p&gt;

&lt;p&gt;But scaling them can be a whole other issue. As the monorepo grows, builds take longer. Testing slows down as you wait 20, 30, or 40 minutes for the build to finish. So developers start throwing changes into every build, so they don’t have to wait for the next one, which adds more code to the build, which slows it down even more – you get the picture.&lt;/p&gt;

&lt;p&gt;That’s where tools like Nrwl’s Nx come in.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a monorepo management tool boosts your performance
&lt;/h2&gt;

&lt;p&gt;While you could spend significant development effort creating scripts for managing your monorepo builds, it may be easier to stick with a monorepo tool like Nx or &lt;a href="https://lerna.js.org/"&gt;Lerna&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nrwl, in collaboration with other major monorepo management tools, has put together &lt;a href="https://monorepo.tools/"&gt;a great website&lt;/a&gt; documenting the features of these tools. Among the more notable features that monorepo tools have to offer:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Detecting downstream changes&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Many management tools will automatically detect what changes were made and any downstream dependencies on those changes.&lt;/p&gt;

&lt;p&gt;Not only is this a much more efficient way to process your builds, but you also don’t have to worry about breaking any dependencies because you forgot to update it when you pushed your changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Restricting access&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In many monorepo management tools, you can utilize &lt;em&gt;code owner files&lt;/em&gt; to restrict access to different projects within your monorepo. &lt;/p&gt;

&lt;p&gt;If you’re using a folder structure to reflect the different domains and libraries within your project, you can easily apply permissions to the various folders to control project access. These folder restrictions are usually enforced by CI/CD using a runner like GitHub actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Task scheduling&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Perhaps the most ubiquitous feature of monorepo management tools is their ability to schedule build tasks. This allows you to control what gets built and when (i.e., sequentially, in parallel, etc.) to ensure your application and libraries are built efficiently and error-free.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Code generation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Some monorepo tools, like Nx, contain plugins and integrations that make code generation much more effortless. &lt;/p&gt;

&lt;p&gt;You can use these plugins to create a basic app structure (like what you’d get with the &lt;a href="https://reactjs.org/docs/create-a-new-react-app.html"&gt;npx create-react-app command&lt;/a&gt;) or set up testing. With these plugins, you can customize the code generation to create the code for your particular use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Consistent tooling&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of the most significant benefits of utilizing a monorepo management tool is that the same tools are used across all projects in the repository. So instead of balancing three different contracts and hiring a DevOps specialist for each tool, you just have to worry about paying for and managing one toolset.&lt;/p&gt;

&lt;p&gt;You also keep redundant utilities and tools to a minimum. Since the different parts of your repo are connected, you can easily share things like types or libraries between your front and back end.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next for monorepos
&lt;/h2&gt;

&lt;p&gt;If you’re interested in following the development of a specific monorepo management tool, &lt;a href="https://monorepo.tools/"&gt;monorepo.tools&lt;/a&gt; is an excellent place to start. There you can find a list of seven of the most popular monorepo tools, along with the contact information for developers for each of those tools.&lt;/p&gt;

&lt;p&gt;As for Nrwl, Juri mentioned that they recently just took over stewardship of &lt;a href="https://lerna.js.org/"&gt;Lerna.js&lt;/a&gt;, a popular open-source monorepo management tool. He hopes to have Lerna supplement a lot of Nx’s functionality.&lt;/p&gt;

&lt;p&gt;For example, Nx helps ensure different components in your repository link together nicely and that the tool creates a great developer experience for managing your monorepos. When you combine this with Lerna’s great versioning features, you have a powerful management tool.&lt;/p&gt;




&lt;p&gt;Interested in more conversations with developers about their tech stacks? Checkout these other &lt;em&gt;Dev Discussions&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/user-interfaces-with-esther-agbaje-chakra/"&gt;Creating Fantastic User Interfaces with Esther Agbaje of Chakra UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/intro-to-jamstack-with-salma-alam-naylor/"&gt;Intro to the Jamstack with Salma Alam-Naylor of Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/sql-vs-nosql-with-james-quick/"&gt;SQL vs NoSQL with James Quick of PlanetScale&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>monorepo</category>
      <category>devops</category>
      <category>beginners</category>
      <category>nx</category>
    </item>
    <item>
      <title>Dev Discussions: Creating Fantastic User Interfaces with Esther Agbaje of Chakra UI</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Mon, 11 Jul 2022 11:20:20 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-creating-fantastic-user-interfaces-with-esther-agbaje-of-chakra-ui-3fn7</link>
      <guid>https://dev.to/coderpad/dev-discussions-creating-fantastic-user-interfaces-with-esther-agbaje-of-chakra-ui-3fn7</guid>
      <description>&lt;p&gt;Scaling user interfaces (UI) is hard. &lt;/p&gt;

&lt;p&gt;While a simple application &lt;em&gt;can&lt;/em&gt; be thrown together, there’s a surprisingly deep level of complexity once you grow. You need tests to validate functionality and consistency in UI elements across all app screens. And don’t forget to consider edge cases.&lt;/p&gt;

&lt;p&gt;When an application gets large enough, front-end teams will regularly reach for a UI component system to make development more streamlined.&lt;/p&gt;

&lt;p&gt;However, not all off-the-shelf tools are perfect for every scenario. Many teams end up writing their own UI component system to solve these problems. &lt;/p&gt;

&lt;p&gt;Unfortunately, building your own UI component system comes with its own set of challenges. &lt;/p&gt;

&lt;p&gt;CoderPad Developer Advocate Corbin Crutchley recently sat down with Developer Advocate Esther Agbaje of Chakra UI, an open-source component library, to discuss the challenges of making UI design systems that can scale. &lt;/p&gt;

&lt;p&gt;One of the most significant benefits of using component libraries is that it’s easier to build accessibility into your application than pinning it on as an afterthought.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Importance of Accessibility in UI components
&lt;/h2&gt;

&lt;p&gt;Web accessibility is not a side issue or a nice-to-have. It’s essential for our modern digital lives.&lt;/p&gt;

&lt;p&gt;From making web pages readable for colorblind users to allowing pages to be easily translatable for readers whose first (or even second language) is not English, accessibility opens up the web experience for those traditionally excluded from it.&lt;/p&gt;

&lt;p&gt;However, it’s not only a case of “this is the morally right thing to do” – many countries also have legal requirements for creating accessible web pages. &lt;/p&gt;

&lt;p&gt;These requirements are often driven by the standards and specifications outlined in the &lt;a href="https://www.w3.org/WAI/standards-guidelines/wcag/#:~:text=Web%20Content%20Accessibility%20Guidelines%20(WCAG)%202%20is%20developed%20through%20the,%2C%20organizations%2C%20and%20governments%20internationally."&gt;Web Content Accessibility Guidelines (WCAG)&lt;/a&gt; established by the Web Accessibility Initiative (WAI).&lt;/p&gt;

&lt;p&gt;While these guidelines attempt to make the accessibility process more manageable, it can be overwhelming for new developers or anyone unfamiliar with web accessibility.&lt;/p&gt;

&lt;p&gt;Things like right-to-left (RTL) text support, color contrast, and assistive technology support are just a few of the accessibility considerations developers have to contemplate while designing their sites and applications for accessibility.&lt;/p&gt;

&lt;p&gt;That’s where component systems like Chakra UI come in.&lt;/p&gt;

&lt;p&gt;One of the first points that Esther brought up was the accessibility of Chakra – Chakra wants to make design systems available for everyone to use, no matter their circumstances.&lt;/p&gt;

&lt;p&gt;It follows the &lt;a href="https://www.w3.org/WAI/standards-guidelines/aria/"&gt;Web Accessibility Initiative’s Accessible Rich Internet Applications Suite&lt;/a&gt;. This internet standard defines ways to make web applications more accessible for people with disabilities and across different cultures.&lt;/p&gt;

&lt;p&gt;Meeting the specifications for this standard is not easy, as Chakra had to consider how their application would work not only on various browsers but also across various languages.&lt;/p&gt;

&lt;p&gt;One example of this is Right-to-left (RTL) text support. Many of the world’s languages – Hebrew, Arabic, Persian, and Urdu, to name a few – are read from right to left rather than left to right, like with English and other European languages.&lt;/p&gt;

&lt;p&gt;UI developers often need to code these different language structures into their application, but with a plugin like Chakra UI, they can automatically flip the margin based on the language type.&lt;/p&gt;

&lt;p&gt;As Corbin has discussed previously with&lt;a href="https://coderpad.io/blog/development/accessibility-with-ben-myers/"&gt; accessibility expert Ben Myers&lt;/a&gt;, an excellent accessibility experience isn’t added like ice cream on the top of apple pie – it’s baked in like the cinnamon sprinkled in the apple filling itself. &lt;/p&gt;

&lt;p&gt;Using components that already have the accessibility standards baked into them, like Chakra’s components, not only improves the experience for users who have disabilities but also &lt;a href="https://www.policylink.org/resources-tools/curb-cut-effect#:~:text=The%20Curb-Cut%20Effect%20is,we%20rise%20or%20fall%20together."&gt;for everyone else&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Advice for maintaining project documentation
&lt;/h2&gt;

&lt;p&gt;Open-source documentation can be challenging for many reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent contributions&lt;/strong&gt; – getting people motivated to contribute, especially when you need it most during a new feature release or update, can be challenging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication difficulties&lt;/strong&gt; – you have a limited number of subject matter experts and contributors who may be working across multiple time zones and in various languages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inefficient processes&lt;/strong&gt; – not having a thought-out formal process for how contributors should add to the documentation can prevent timely and regular updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esther and her team at Chakra UI ran into some of these obstacles. Initially, their documentation was in the same repository as their code base, but they were having trouble getting contributors to help with the documentation – the process of cloning the repo and then pushing documentation changes was too cumbersome.&lt;/p&gt;

&lt;p&gt;So they moved to have two separate repositories, one for the documentation and one for the Chakra UI code base. This not only helped get more people to contribute, but it also made translating the documentation into other languages a lot easier. &lt;/p&gt;

&lt;p&gt;Some other tips for overcoming those obstacles listed above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a library to generate automatic changelogs every time your code is updated. Chakra UI used &lt;a href="https://github.com/changesets/changesets"&gt;Changesets&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create a formal update and review process for your documentation. There is no one-size-fits-all approach, so you should tailor the process to what works best for your team of contributors and maintainers.&lt;/li&gt;
&lt;li&gt;Similarly, do what you can to make it as easy as possible for contributors to update the documentation. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Design advice: Popovers vs. Modals
&lt;/h2&gt;

&lt;p&gt;After discussing their documentation process, Corbin then asked Esther about a UI topic he had been thinking about recently – when do you use a popover versus a modal to notify a user within an application? &lt;/p&gt;

&lt;p&gt;Popovers and modals are tools to display information to the user. A popover is simply a box that pops up when you click on an element on the webpage. However, a popover still allows you to scroll up and down the page while the popover is active. On the other hand, a modal freezes scrolling until you click on an action on the modal. &lt;/p&gt;

&lt;p&gt;Esther recommends reserving modals for alert dialog where you want a user to take (or not take) a critical action or to inform them of something important before they continue scrolling.&lt;/p&gt;

&lt;p&gt;Popovers can be used for less urgent messages where a user’s action will have minimal impact on the future state of the application.&lt;/p&gt;

&lt;p&gt;For example, if a user wants to delete a vital piece of information from their account, such as a bank account number, this would call for a modal where a user has to confirm that they want to delete their bank account number. &lt;/p&gt;

&lt;p&gt;Everyday use for a popover would be linking users to a website for more information – for example, linking a form to a documentation page that explains what all the fields of the form are for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next for Chakra UI?
&lt;/h2&gt;

&lt;p&gt;Corbin ended the interview by asking Esther what was next for Chakra UI.&lt;/p&gt;

&lt;p&gt;Esther mentioned that they completed their &lt;a href="https://hackathon.chakra-ui.com/"&gt;first successful hackathon&lt;/a&gt; and had a whole list of initiatives to make the web development experience even easier for front-end developers.&lt;/p&gt;

&lt;p&gt;Among the things they’re working on now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/how-to-upgrade-to-react-18/"&gt;React 18 support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Improve color mode&lt;/li&gt;
&lt;li&gt;Adding even more components, like pagination and carousels&lt;/li&gt;
&lt;li&gt;Integration with web component API provider &lt;a href="https://zagjs.com/"&gt;Zag&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re looking for more information on how to use Chakra UI, you can start by checking out their web page &lt;a href="https://chakra-ui.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Dev Discussions: Intro to the Jamstack with Salma Alam-Naylor of Netlify</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Wed, 06 Jul 2022 12:49:39 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-intro-to-the-jamstack-with-salma-alam-naylor-of-netlify-54jj</link>
      <guid>https://dev.to/coderpad/dev-discussions-intro-to-the-jamstack-with-salma-alam-naylor-of-netlify-54jj</guid>
      <description>&lt;p&gt;Salma-Alam Naylor can trace her love of Jamstack to her time as a music teacher.&lt;/p&gt;

&lt;p&gt;Before she spread the joy of learning web development, she was a musical comedian and music teacher who taught kids how to play in a rock band.&lt;/p&gt;

&lt;p&gt;She ended up falling in love with technology later in life. As someone who came to development from a non-traditional career path, she developed a special place in her heart for technologies that removed people’s barriers to developing their websites.&lt;/p&gt;

&lt;p&gt;Now she’s a staff developer experience engineer at the Jamstack-native cloud platform Netlify, where she continues to preach the cause of web development for everyone.&lt;/p&gt;

&lt;p&gt;For Salma, Jamstack helps open up a world of possibilities for people who want to create their own websites or get into web development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, what is Jamstack?
&lt;/h2&gt;

&lt;p&gt;Most people vaguely familiar with Jamstack think it’s a set of specific technologies – notably &lt;strong&gt;J&lt;/strong&gt;avaScript, &lt;strong&gt;A&lt;/strong&gt;PIs, and &lt;strong&gt;M&lt;/strong&gt;arkdown (JAM).&lt;/p&gt;

&lt;p&gt;That’s a big misunderstanding that Salma was quick to correct: Jamstack isn’t defined by your tools. Instead, it’s an architectural decision about how website requests are processed and the responses rendered to the user.&lt;/p&gt;

&lt;p&gt;To understand this new architecture, it helps to take a step back in time to the early days of the internet. &lt;/p&gt;

&lt;p&gt;Back in the early 2000s, every time someone made a URL request to access a website, the request would go to a server, the server would run code to build the .html document, and then the server would send the document back to the requester. &lt;/p&gt;

&lt;p&gt;Not only was this a long process – imagine a server in Beijing having to render a page in Cairo – but early websites relied on massive monolithic tech stacks to carry out this process. &lt;/p&gt;

&lt;p&gt;There was no real front end/back end separation. Front-end developers were often an afterthought, forced to use the templating systems that came with the monolithic tech stacks. &lt;/p&gt;

&lt;p&gt;Because these systems were so complex and intertwined, there was a lot of overhead with unused technology sitting idle and maintenance issues a pain to troubleshoot.&lt;/p&gt;

&lt;p&gt;That all changed &lt;a href="https://coderpad.io/blog/development/web-components-101-history/"&gt;around 2010&lt;/a&gt; when companies started to decouple the front end from the back end – that’s when we saw the emergence of front-end frameworks like Angular.js and Backbone.js.&lt;/p&gt;

&lt;p&gt;As front ends started to develop their own ecosystems, another advancement in web dev technology was occurring – the creation of static site generators like &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; and &lt;a href="https://www.gatsbyjs.com/"&gt;Gatsby.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The premise behind static sites is simple – you use a static site generator to generate the .html page and then publish them to a Content Delivery Network (CDN).&lt;/p&gt;

&lt;p&gt;The beautiful part about publishing them to CDNs is that the CDN comprises various distribution nodes worldwide. So the CDN distributes them to all the nodes around the world where they are cached. &lt;/p&gt;

&lt;p&gt;When a user wants to access the website, they are directed to the nearest CDN node – and not a server halfway across the world – which &lt;em&gt;drastically&lt;/em&gt; reduces the time it takes to serve up the page, making for a much better user experience.&lt;/p&gt;

&lt;p&gt;That, in a nutshell, is the Jamstack architecture: Serving pre-generated assets that are bundled up at build time and then put onto a CDN which distributes them to users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jamstack lowers barriers for beginners
&lt;/h2&gt;

&lt;p&gt;The only thing you have to worry about as a Jamstack developer is creating the static HTML file that will be published to the CDN. How you do that is up to you – you can use any Javascript framework, Ruby, or even write the HTML all by yourself.&lt;/p&gt;

&lt;p&gt;You don’t have to worry about anything related to the &lt;a href="https://en.wikipedia.org/wiki/DevOps"&gt;DevOps&lt;/a&gt; of your web application. In other words, you don’t have to know anything about how to spin up and manage the server to which your application will be deployed. &lt;/p&gt;

&lt;p&gt;That’s because Jamstack is generally managed using a serverless cloud platform like Netlify, Cloudflare, or Amazon CloudFront (to name a few).&lt;/p&gt;

&lt;p&gt;This removes any need for you to know how to manage servers and code deployment. It also allows you to push your web pages to production quickly and roll them back to previous versions if you accidentally push an error.&lt;/p&gt;

&lt;p&gt;Therefore Jamstack drastically lowers the barrier to entry for new web developers – it’s much easier getting a web page live than developing a page and then worrying about setting up the infrastructure it will live on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Take the YOLO approach to get started with Jamstack
&lt;/h2&gt;

&lt;p&gt;The great thing about Jamstack is its simplicity. You only really need to know HTML (&lt;a href="https://whitep4nth3r.com/blog/html-is-all-you-need-to-make-a-website/"&gt;Salma argues you don’t even need to know CSS&lt;/a&gt;) and how to connect to a hosting provider to get started.&lt;/p&gt;

&lt;p&gt;That helps enable what Salma calls “YOLO” (You Only Live Once) publishing, which is a web dev “technique” she recommends for new web developers.&lt;/p&gt;

&lt;p&gt;One problem with new developers – especially when they’re only exposed to more complex web development – is that they’re so overwhelmed with different ways of creating a web page that they don’t know where to start. And if they do start, they want it to be so feature-rich and perfect that they never end up pushing the page to production.&lt;/p&gt;

&lt;p&gt;YOLO is a form of rapid iterative development where you quickly create a page and push it to production, warts and all. You then promptly learn – both by using the website and by getting feedback from others – about what went right and wrong and how to improve the latter. &lt;a href="https://www.forbes.com/sites/deeppatel/2017/06/16/why-perfection-is-the-enemy-of-done/?sh=78da23ea4395"&gt;In the words of Confucious&lt;/a&gt;, “Better a diamond with a flaw than a pebble without.”&lt;/p&gt;

&lt;p&gt;If you made a big mistake, you can roll back to the previous version, make your corrective changes, and publish the page again. &lt;/p&gt;

&lt;p&gt;You don’t need to spend time learning the inner workings of the cloud service’s infrastructure or how they deploy your code to the CDN – they take care of all that so you can focus on creating excellent web applications.&lt;/p&gt;

&lt;p&gt;You don’t need to spend hours learning the newest React features or use complex build tools to make a good web page. You just need to get started building &lt;em&gt;something&lt;/em&gt; that you can quickly publish. &lt;/p&gt;

&lt;p&gt;Once you get your first pages published and become comfortable with that process, then you can start implementing more advanced Jamstack features. The key to not getting overwhelmed here is to only focus on learning the features that are essential for you and your web apps. &lt;/p&gt;

&lt;p&gt;It’s easy to get distracted by new features, so it will take some effort to separate yourself from the “I need to learn everything” bug that often infects new developers.&lt;/p&gt;

&lt;p&gt;As long as your page is readable, usable, and accessible, it doesn’t matter what it looks like. Sometimes simple is better, especially if you’re learning something for the first time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jamstack: A force for good
&lt;/h2&gt;

&lt;p&gt;Ultimately Salma’s goal for preaching about Jamstack is accessibility – she wants to live in a world where technology allows everyone to do something good.&lt;/p&gt;

&lt;p&gt;Jamstack does this by making it easy for people to create and publish beautiful content. &lt;/p&gt;

&lt;p&gt;If you want to get started with Jamstack, the place to begin is &lt;a href="https://jamstack.org/resources/"&gt;Jamstack.org&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Once you get through those introductory readings, you’ll probably want to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.w3schools.com/html/"&gt;Learn HTML&lt;/a&gt; if you haven’t already (unless you’re going straight to a &lt;a href="https://jamstack.org/generators/"&gt;static site generator&lt;/a&gt; like Next.js or Jekyll).&lt;/li&gt;
&lt;li&gt;Create your HTML file or generate it using your static generator of choice&lt;/li&gt;
&lt;li&gt;Select &lt;a href="https://www.pluralsight.com/blog/software-development/where-to-host-your-jamstack-site"&gt;a hosting company&lt;/a&gt; to host your page and distribute it to a CDN&lt;/li&gt;
&lt;li&gt;Publish your page using the hosting company’s tools.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it! That’s all you need to do to publish your first Jamstack-powered page.&lt;/p&gt;




&lt;p&gt;P.S. Are you a woman interested in, or already working with, Jamstack? Salma currently leads the &lt;em&gt;Women of Jamstack&lt;/em&gt; group and would love for you to &lt;a href="https://womenofjamstack.com/"&gt;check it out&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>jamstack</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>career</category>
    </item>
    <item>
      <title>Dev Discussions: Breaking into Open Source with GitHub Star Ruth Ikegah</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Thu, 23 Jun 2022 11:41:45 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-breaking-into-open-source-with-github-star-ruth-ikegah-3nf2</link>
      <guid>https://dev.to/coderpad/dev-discussions-breaking-into-open-source-with-github-star-ruth-ikegah-3nf2</guid>
      <description>&lt;p&gt;Did you know you don’t have to know how to code to contribute to an open source project?&lt;/p&gt;

&lt;p&gt;Ruth Ikegah first started contributing as a technical writer – fixing typos, creating tutorials, and writing how-to guides for projects she was interested in.&lt;/p&gt;

&lt;p&gt;She’s now an experienced Python developer who is a maintainer on a handful of open source community projects and a contributor on many more. She also has her &lt;a href="https://ruthikegah.xyz/" rel="noopener noreferrer"&gt;own blog&lt;/a&gt;, regularly speaks at open source conferences, and advocates for increasing open source contributions from developers across Africa.&lt;/p&gt;

&lt;p&gt;Ruth readily admits this was not an easy path for her – finding open source projects to contribute to as a beginner was a struggle. Instead of giving up, she focused on figuring out ways that beginners could contribute (like documentation), which led her to become an advocate for beginners.&lt;/p&gt;

&lt;p&gt;This advocacy propelled her to be nominated as a &lt;a href="https://stars.github.com/profiles/ruth-ikegah/" rel="noopener noreferrer"&gt;GitHub Star&lt;/a&gt; in 2020 – a program that recognizes GitHub contributors who are particularly inspiring or great community educators.&lt;/p&gt;

&lt;p&gt;She recently sat down with CoderPad Developer Advocate Corbin Crutchley to give some tips on how beginners can break into the open source space and balance their professional growth with mental care.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started with open source contribution
&lt;/h2&gt;

&lt;p&gt;Often the most common path to open source contribution is through your development skills. &lt;/p&gt;

&lt;p&gt;For beginner developers, this could be something as simple as cloning the repo of a project you like and running the code to look for bugs. Submitting bug reports is a great way to start contributing to OS projects.&lt;/p&gt;

&lt;p&gt;Do you think your dev skills need to level up before you’re comfortable with that? Or simply want to help out in a way better suited to your skillset?&lt;/p&gt;

&lt;p&gt;There are several non-coding contributions that Ruth highlights to help you get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Improve documentation:&lt;/strong&gt; Documentation is often the last thought of developers. It can be outdated, riddled with typos, or full of errors – or it may even just be completely absent. If you have strong writing skills, this may be for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Help organize conferences&lt;/strong&gt;: If you’ve got more of an organization bent, you can help organize one of the many get-togethers that bring open source communities together. Getting speakers, doing administrative work, helping with logistics, and even giving a speech yourself are all ways to contribute to community events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sponsor a project&lt;/strong&gt;: Even all-volunteer projects need money! Providing the funding to help maintain a project is another noble way to contribute to the open source community.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lend your design skills&lt;/strong&gt;: Those open source logos didn’t design themselves. Neither did the UIs. Designers can help make the product beautiful and usable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can use the &lt;a href="https://github.com/explore" rel="noopener noreferrer"&gt;GitHub Explore page&lt;/a&gt; to locate a project you may want to work on or an event you want to help out with.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Getting paid to contribute&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Yes, there are ways to get paid for contributing to open source projects.&lt;/p&gt;

&lt;p&gt;Ruth mentioned that for many people – parents, full-time students, etc. – the time commitment needed to work on open source projects could be a deterrent, especially if that time takes away from being able to earn money.&lt;/p&gt;

&lt;p&gt;Open source internships hope to solve that problem. &lt;/p&gt;

&lt;p&gt;They’re exactly what they sound like – you work on an open source project for a short period, and you’re compensated for your work in return.&lt;/p&gt;

&lt;p&gt;Perhaps two of the most well-known are Google’s &lt;a href="https://summerofcode.withgoogle.com/" rel="noopener noreferrer"&gt;Summer of Code&lt;/a&gt; for developers and &lt;a href="https://developers.google.com/season-of-docs" rel="noopener noreferrer"&gt;Season of Docs&lt;/a&gt; for technical writers. In these programs, open source projects apply for a grant from Google to hire an open source intern.&lt;/p&gt;

&lt;p&gt;In return for your work with these projects, you’ll get a stipend–the exact amount will vary depending on your location and the project size, but it’s generally in the thousands of dollars.&lt;/p&gt;

&lt;p&gt;If you’d rather be an open source bounty hunter, &lt;a href="https://bountysource.com/" rel="noopener noreferrer"&gt;BountySource.com&lt;/a&gt; may be more up your alley.&lt;/p&gt;

&lt;p&gt;Here open source projects will list issues that need to be solved, with a bit of monetary incentive to help motivate you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2h1bfu6zrdxog.cloudfront.net%2Fwp-content%2Fuploads%2F2022%2F05%2Fimg_62839072832f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2h1bfu6zrdxog.cloudfront.net%2Fwp-content%2Fuploads%2F2022%2F05%2Fimg_62839072832f6.png" alt="A screen shot of open source website bountysource.com that displays a list of bounties; one is Implementing vector-enhancements for facility 2 for s390x which pays $14000, the other is updating the altivec/vsx to be on par with the other accelerated architectures which pays $7505."&gt;&lt;/a&gt;Some bounties on BountySource.com&lt;/p&gt;

&lt;p&gt;Even if you’re not in it for the money, contributing to open source projects can be extremely rewarding. For some, it can even be downright addictive. &lt;/p&gt;

&lt;h2&gt;
  
  
  Maintaining mental health for developers
&lt;/h2&gt;

&lt;p&gt;Both Corbin and Ruth have struggled with burnout while working as maintainers and contributors to open source projects. &lt;/p&gt;

&lt;p&gt;It’s easy to want to do everything and take on too much. It can feel like you’re letting the other contributors or users down if you take a break and step away to rest. You don’t want the project to fall apart, so you make sacrifices in all the wrong places.&lt;/p&gt;

&lt;p&gt;Ruth readily admits it takes courage to step back and make time for yourself when you have that pressure to deal with.&lt;/p&gt;

&lt;p&gt;But she does have some tips to make taking a mental health break more manageable, and it all starts with project maintainers setting the example. They have to realize that: &lt;/p&gt;

&lt;p&gt;1) burnout can happen to anyone and actually decreases productivity, and &lt;/p&gt;

&lt;p&gt;2) the project won’t fall apart if they take a break. &lt;/p&gt;

&lt;p&gt;Now, this might take some planning – like delegating some of the work to some of the project contributors – but by taking a break themselves, project maintainers let the contributors know that it’s okay not to live and breathe the project every day of their lives.&lt;/p&gt;

&lt;p&gt;The maintainers should also be aware of pending burnout in their contributors, like a drastic drop in activity. Additionally, maintainers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have regular check-ins with contributors to ensure they’re getting rest and taking care of themselves. &lt;/li&gt;
&lt;li&gt;Encourage them to take breaks and let them know that their health is more important than the project.&lt;/li&gt;
&lt;li&gt;Discuss the possibility of burnout with them and the steps they can take to prevent it.&lt;/li&gt;
&lt;li&gt;Make sure they don’t overload new contributors with work, as they may not yet know how to say “no” to you.&lt;/li&gt;
&lt;li&gt;Set a formalized roadmap or list of goals for new contributors so that they can more easily pace themselves.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ruth emphasizes that maintainers should act as mentors to project contributors. &lt;/p&gt;

&lt;p&gt;Not only is this important for creating healthy working relationships for the sake of the project, but it allows contributors to feel more comfortable talking with the maintainers about burnout. It also helps maintainers to be able to take breaks and hand off work to contributors for their own mental health. &lt;/p&gt;

&lt;p&gt;Nevertheless, the responsibility for turning down work isn’t only on project maintainers – contributors too need to know when they’ve reached their limits and be willing to have a conversation with the maintainers to let them know that they need time to recuperate or hand things off to other people.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parting tip: Always be learning
&lt;/h2&gt;

&lt;p&gt;It’s not uncommon for open source contributors to become maintainers themselves after gaining some experience. &lt;/p&gt;

&lt;p&gt;But Ruth recommends continuing to educate yourself outside of your contributions to a particular project.&lt;/p&gt;

&lt;p&gt;She’s currently taking courses in open source management to help improve her community management skills. When it comes to sources of learning, she recommends a few free or low-cost sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open source project conference videos on Youtube&lt;/li&gt;
&lt;li&gt;&lt;a href="https://training.linuxfoundation.org/" rel="noopener noreferrer"&gt;Linuxfoundation.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opensource.com/" rel="noopener noreferrer"&gt;Opensource.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lab.github.com/" rel="noopener noreferrer"&gt;GitHub Learning Lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://2021.allthingsopen.org/" rel="noopener noreferrer"&gt;The All Things Open conference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No matter where you take your courses, the important thing is that you keep improving upon your skills and growing yourself as a developer, designer, technical writer, or any other career path. &lt;/p&gt;

&lt;p&gt;And before you know it, you’ll be maintaining your own open source project.&lt;/p&gt;




&lt;p&gt;CoderPad too believes in continuous learning – so please enjoy these informative articles we’ve published to help keep you on top of your engineering game:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/the-complete-guide-to-regular-expressions-regex/" rel="noopener noreferrer"&gt;The Complete Guide to Regular Expressions (Regex)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/integration-tests-vs-unit-tests-integration-matters-more/" rel="noopener noreferrer"&gt;Integration tests vs. unit tests: Why integration tests matter more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/rules-of-reacts-useeffect/" rel="noopener noreferrer"&gt;Rules of React’s useEffect&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>beginners</category>
      <category>career</category>
      <category>github</category>
    </item>
    <item>
      <title>Dev Discussions: Eradicating Whiteboard Interviews with Jon Nguyen of NoWhiteBoard.org</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Tue, 21 Jun 2022 17:47:57 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-eradicating-whiteboard-interviews-with-jon-nguyen-of-nowhiteboardorg-kdn</link>
      <guid>https://dev.to/coderpad/dev-discussions-eradicating-whiteboard-interviews-with-jon-nguyen-of-nowhiteboardorg-kdn</guid>
      <description>&lt;p&gt;Raise your hand if you’ve ever had to do a whiteboard interview for a job. 🤚&lt;/p&gt;

&lt;p&gt;Now raise your hand if you like doing whiteboard interviews. &lt;/p&gt;

&lt;p&gt;... I’ll wait.&lt;/p&gt;

&lt;p&gt;If you didn’t find your hand waving in the air, you’ll enjoy the insights Jon Nguyen of &lt;a href="https://www.nowhiteboard.org/"&gt;NoWhiteboard.org&lt;/a&gt; provided during his discussion with CoderPad developer advocate Corbin Crutchley. &lt;/p&gt;

&lt;p&gt;Jon’s website is a goldmine for people fed-up with having to jump through hoops to get a job. It’s a job board for companies that don’t do whiteboard interviews and are transparent about their interview process.&lt;/p&gt;

&lt;p&gt;Inspired by the “Hiring Without Whiteboards” repo on Github, Jon wanted a job board as candidate-friendly as possible. His goal in starting it was to help candidates who don’t have the luxury to spend months preparing for interviews or days carrying out whiteboard tests.&lt;/p&gt;

&lt;p&gt;He also posts the salary (when possible), the recruiter’s contact information, and the needed skills, so you have all the essential information when you’re ready to apply. &lt;/p&gt;

&lt;h2&gt;
  
  
  What’s wrong with whiteboards?
&lt;/h2&gt;

&lt;p&gt;Jon’s journey to NoWhiteboard.org stemmed from the frustrations he and many other developers encountered while looking for a new job. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First&lt;/strong&gt;, there are the companies that put you through eight rounds of interviews – including hours-long coding tests – only to ghost you near the end. That’s a lot of wasted time and effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second&lt;/strong&gt; is the time of the actual coding/whiteboard tests. They take time, some more than others. &lt;/p&gt;

&lt;p&gt;If you already have a full-time job or kids – or like many others, both – finding the time to take these tests can be difficult. These developers may not have time to take them at all, and you eliminate many developers from your pool. You are also biasing your candidate pool towards those who have lots of time to work on a test.&lt;/p&gt;

&lt;p&gt;Not to mention the issue in point #1 again. How would you feel about spending your weekend on a coding test to not move on to the next round while also not getting any feedback about what they were looking for?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third&lt;/strong&gt; is what companies typically use them for and what they’re actually good at measuring. &lt;/p&gt;

&lt;p&gt;Looking for a new job is already nerve-wracking enough. Spending your relaxation time on overly-long take-homes or coding in front of people you don’t know can leave you with a bad taste in your mouth – especially if they’re not measuring anything meaningful.&lt;/p&gt;

&lt;p&gt;Companies often use these to “test” your coding skills with an algorithm question. They don’t test coding skills more than they test your ability to remember things from your university or early career that usually don’t have any bearing on the actual job. How often are developers actually coding standard algorithms in their day-to-day job?&lt;/p&gt;

&lt;p&gt;That can be annoying for junior candidates – especially if they don’t come from a computer science background – and downright insulting to more senior developers. &lt;/p&gt;

&lt;p&gt;If the question is something that a candidate can easily Google and find the answer to, it’s probably not a good question. It’s not a practical way to evaluate the thought process or problem-solving skills of how someone would actually work within your company.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better way
&lt;/h2&gt;

&lt;p&gt;So what are the things that interviewers should be evaluating, whether they use whiteboard interviews or not?&lt;/p&gt;

&lt;p&gt;Corbin and Jon both agree that communicating well with others is one of the most significant measures of success for employees. &lt;/p&gt;

&lt;p&gt;You can easily add this into a live coding interview by doing a paired-programming exercise with the candidate, asking them how they document their code or asking them what they would do if they found a bug in another developer’s code. &lt;/p&gt;

&lt;p&gt;Additionally, you can gauge how a candidate thinks by giving them a difficult choice to make – for example if you’re a tech lead leading a team behind on feature development with a looming deadline, what do you sacrifice? Do you miss the deadline to get all the features in? Do you request your devs to work overtime to meet the deadline?&lt;/p&gt;

&lt;p&gt;Corbin stresses again that whatever question is asked should represent an issue the developer candidate would face on the job; the question should also be clearly written with explicit requirement criteria. &lt;/p&gt;

&lt;p&gt;Jon adds there are ways companies can show respect for a candidate, and the time they’re investing in the process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://coderpad.io/resources/docs/live-interview-pads/focus-time/"&gt;Allow the candidate time to read the question&lt;/a&gt; and collect their thoughts before the timer starts, whether in a take-home test or a live interview.&lt;/li&gt;
&lt;li&gt;Pay the candidate for completing any project or test that is part of the interview (&lt;a href="https://medium.com/@adam_carrigan/why-we-pay-candidates-for-our-coding-challenges-4b36e6cd21e3"&gt;MindsDB does this&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://coderpad.io/resources/docs/take-home-projects/add-configurable-time-limit/"&gt;Create a time limit for the test&lt;/a&gt; so that the candidate isn’t spending their entire weekend working on the project. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Keep in mind:&lt;/strong&gt; Good developers and engineers will often stay in their current roles because of how bad the tech interview process is these days. If you want to increase your talent pool, you need to fix any broken processes you have in your interview process.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was your worst interview experience?
&lt;/h2&gt;

&lt;p&gt;Corbin and Jon then shared their best and worst interview experiences, which should serve as a list of do’s and don’ts if you find yourself interviewing anyone anytime soon.&lt;/p&gt;

&lt;p&gt;Corbin’s worst interview experience started well with a take-home test he enjoyed and did well on. It went downhill when he was asked an algorithm question about reversed linking. He fumbled through that as he was self-taught and didn’t take the traditional computer science degree path to become a developer.&lt;/p&gt;

&lt;p&gt;To add insult to injury, they went deeper into theory – rather than into practical application – by asking him “tech trivia” questions like the difference between async vs. defer keywords in &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags. You know, the kind of questions one could easily Google.&lt;/p&gt;

&lt;p&gt;His best interview experience was with Hilton. He did both a take-home test and a live interview coding exercise, and where Hilton shined was during the exercise. Instead of the standard “code anxiously in front of the interviewer,” Hilton turned it into a peer programming exercise where Corbin coded side-by-side with the interviewer. &lt;/p&gt;

&lt;p&gt;The interviewer turned it into a conversation about the different ways to solve the problem and the pros and cons of each. Corbin felt that it was so informal, and he learned so much that he didn’t even realize he was being evaluated for his problem-solving skills.&lt;/p&gt;

&lt;p&gt;Jon’s worst experience happened near the beginning of the interview process when the recruiter gave him an update on the process. Five minutes into that phone call, the recruiter started asking him “tech trivia” questions out of the blue. &lt;/p&gt;

&lt;p&gt;What made matters worse, the questions were asked by a recruiter with no technical background, only looking for Jon to give the correct keywords. They didn’t understand much of the nuance of Jon’s answer, and he ended up stopping the phone call early and not finishing the interview process.&lt;/p&gt;

&lt;p&gt;His best interview experience was with his most recent company. He had a take-home assignment to create a REST endpoint, and it was short enough that he didn’t feel like he had to give up his weekend to work on it. &lt;/p&gt;

&lt;p&gt;After that, he had a live interview with a question that was built upon the work he did for the take-home assignment. That helped him feel more prepared for the interview and more interested in it. He got to talk about the tradeoffs of his solution versus others, and it felt more relevant to the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Jon is so passionate about eliminating whiteboard interviews that he recently resigned from his job to pursue NoWhiteboard.org full-time. He has more tidbits on questions he asks as an interviewer and why he thinks side projects are an excellent way for junior developers to stand out – and you can watch him talk about those in the &lt;a href="https://www.twitch.tv/videos/1433173237"&gt;Twitch playback video here&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Interested in more conversations with developers about their career? Checkout these other &lt;em&gt;Dev Discussions&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/getting-hired/dev-discussions-how-to-get-a-great-job-james-quick/"&gt;How To Get a Great Job at a Great Company with James Quick of PlanetScale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/getting-hired/dev-discussions-fortune-500-jobs-brad-garropy/"&gt;Getting a job in Fortune 500 Companies with Brad Garropy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://coderpad.io/blog/development/interview-with-james-perkins-of-rollyourtweet/"&gt;James Perkins of RollYourTweet on How to Create a Successful SaaS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>career</category>
      <category>inclusion</category>
      <category>leetcode</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Dev Discussions: A Primer on Accessibility with Inclusive Design Expert Ben Myers of SomeAntics</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Wed, 15 Jun 2022 12:10:02 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-a-primer-on-accessibility-with-inclusive-design-expert-ben-myers-of-someantics-333n</link>
      <guid>https://dev.to/coderpad/dev-discussions-a-primer-on-accessibility-with-inclusive-design-expert-ben-myers-of-someantics-333n</guid>
      <description>&lt;p&gt;Have you ever been on a website where the text is gray and the background is a slightly darker shade of gray?&lt;/p&gt;

&lt;p&gt;Or tried to read an article on your phone where you weren’t able to magnify it?&lt;/p&gt;

&lt;p&gt;Hopefully the answer to both of those questions is a loud “No,” and the reason for that is accessibility standards.&lt;/p&gt;

&lt;p&gt;For some people those standards – contrast specifications and magnification capabilities – are conveniences, but for many others they are a necessity for web browsing. &lt;/p&gt;

&lt;p&gt;And for others still those standards are a cause they advocate for to make the internet a better place for everyone. Ben Myers is one of those.&lt;/p&gt;

&lt;p&gt;He started as an engineer implementing accessible frontends with React before moving to a large tech company where he’s responsible for “ensuring that [the] developer documentation is accessible to all, regardless of disability or language.”&lt;/p&gt;

&lt;p&gt;When he’s not working on making apps more accessible, he’s showing others how to build great user experiences that focus on accessibility in his &lt;a href="https://www.twitch.tv/SomeAnticsDev"&gt;SomeAntics&lt;/a&gt; Twitch stream or discussing inclusive design on &lt;a href="https://twitter.com/BenDMyers"&gt;Twitter&lt;/a&gt;. He got into content creation for accessibility because he saw a lack of practical application for the content that was out there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/videos/1436442023"&gt;In a recent conversation&lt;/a&gt; with CoderPad’s Corbin Crutchley, Ben gives the low-down on what it means for an application to be accessible and what you can do to make it happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is accessibility?
&lt;/h2&gt;

&lt;p&gt;Ben defines accessibility as the subset of usability that focuses on creating equitable experiences that include users with disabilities.&lt;/p&gt;

&lt;p&gt;Due to the vast reach of the internet, you have to assume that a significant portion of your users have some disability – and it may not necessarily be in the traditional sense.&lt;/p&gt;

&lt;p&gt;Ben points out that there is a whole spectrum of disabilities and how people experience them. It could be that they have vision or hearing issues, a temporary loss of physical capacities like a broken arm or leg, short term memory loss due to a head injury or cancer, a learning disability like dyslexia, a mental health disorder like depression – the list goes on and on. &lt;/p&gt;

&lt;p&gt;Each person will experience these disabilities differently, and often people will experience more than one at a time or within their lifetime. &lt;/p&gt;

&lt;p&gt;Some disabilities also may only reveal themselves in specific environments. For example, someone may stumble on a website that over-stimulates them, which exacerbates focus issues that impact their short-term memory. Disability and environment interact with each other.&lt;/p&gt;

&lt;p&gt;That’s why it can be challenging to pin down the particular access needs of any given person at any given moment. If I’m visually impaired, I may be fine viewing a web page as long as I have my glasses, but if my glasses were to break or get lost, my accessibility needs would change until my glasses are repaired.&lt;/p&gt;

&lt;h2&gt;
  
  
  When you develop for accessibility, everyone benefits
&lt;/h2&gt;

&lt;p&gt;After discussing what accessibility is, Corbin and Ben go into why people should care about accessibility. &lt;/p&gt;

&lt;p&gt;Outside of the fact that it’s just the right thing to do, studies also show that even people without chronic disabilities benefit when you design for accessibility.&lt;/p&gt;

&lt;p&gt;To illustrate this, he brings up the &lt;em&gt;curb cut effect&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mljAGv1S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/04/img_625d58d31994e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mljAGv1S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/04/img_625d58d31994e.png" alt="The corner of an intersection where two sidewalks meet. The sidewalks each have curb cuts built into them, which look like ramps going into the street." width="880" height="622"&gt;&lt;/a&gt; Curb cut on a residential street&lt;/p&gt;

&lt;p&gt;Curb cuts are the ramps you see at sidewalks that lead into the road (usually into crosswalks) that were initially designed to make crossing streets less dangerous and more convenient for people in wheelchairs. They were initially implemented in Kalamazoo, Michigan, and Berkeley, California, in response to efforts from &lt;a href="https://www.independentliving.org/docs3/brown99a.html"&gt;disabled World War 2 veterans&lt;/a&gt; and &lt;a href="https://manifold.umn.edu/read/building-access/section/3648dfee-4278-4849-8e47-b5eb56fad60e"&gt;paraplegic university students&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;But what researchers found was that it wasn’t just people in wheelchairs who were using the curb cuts. Parents with strollers, travelers with wheeled suitcases, bicyclists, skateboarders – even workers with wheelbarrows – were using the curb cuts.&lt;/p&gt;

&lt;p&gt;A more modern example of the curb-cut effect is closed captions. Initially intended for deaf users, closed captioning is also used by people with temporary access needs: non-English speakers may use them to translate what’s being said, bar patrons may use them to comprehend what’s going on in a noisy environment. And lots of us just don’t want to play sound on our devices if we can help it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Accessibility should not be a separate experience
&lt;/h2&gt;

&lt;p&gt;For accessibility to work, it has to be a fundamental part of the application experience. If you tack it on as an afterthought, lots of users endup with a sub-par experience.&lt;/p&gt;

&lt;p&gt;Overlays are a common type of these afterthoughts. They’re a type of automated application that claim to scan – and sometimes fix – your website for accessibility issues. The issue is that they 1) don’t fix the source code generating the HTML, 2) often miss important accessibility criteria, and 3) can hinder your website's performance. &lt;/p&gt;

&lt;p&gt;Companies often buy into them because they don’t care or understand accessibility – usually, it’s just lip-service to accessibility to cover themselves from possible legal issues. &lt;/p&gt;

&lt;p&gt;Accessibility should be baked into the product from the beginning of the design process – and there is a strong business incentive to do so.&lt;/p&gt;

&lt;p&gt;Ben cites the &lt;a href="https://wearepurple.org.uk/the-purple-pound-infographic/"&gt;Purple Pound&lt;/a&gt; study, which highlights the purchasing power of people with disabilities and their friends and family in the United Kingdom. They estimate that web pages inaccessible to people with disabilities lost around £17.1 million – about $22.3 million per year.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better browsers with the accessibility tree
&lt;/h2&gt;

&lt;p&gt;Corbin and Ben then dive into the modern marvel of the web browser – and just how much work browser developers have put into making the browsing experience more accessible.&lt;/p&gt;

&lt;p&gt;Chrome and other browsers create an “accessibility tree” – it’s a representation of the website compiled primarily from the semantic markup. It’s what assistive technologies use to present an accessible experience to users.&lt;/p&gt;

&lt;p&gt;You can access the accessibility tree in Chrome’s Dev Tools:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QEOvfRwu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/04/img_625d58dd62967.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QEOvfRwu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/04/img_625d58dd62967.png" alt="An image Chrome dev tools screen with the accessibility tree juxtaposed with the regular domain object model in the middle and the website itself on the far left. " width="880" height="398"&gt;&lt;/a&gt;Accessibility tree in Dev Tools&lt;/p&gt;

&lt;p&gt;&lt;a href="https://html.com/semantic-markup/"&gt;Semantic markup&lt;/a&gt; is an entire discussion in and of itself. Still, Ben briefly describes it as using the tags, elements, and attributes to best reflect the intended purpose and behavior of the content. For example, using the different levels of header tags (&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;, etc.) to create the hierarchy of the content or using anchor tags to take you somewhere when clicked.&lt;/p&gt;

&lt;p&gt;An example of semantic markup used in assistive technology is the &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; tag. This tag registers a shortcut for screen readers so that visually impaired users don’t have to listen to the entirety of the contents being read to get to the section they want to get to.&lt;/p&gt;

&lt;p&gt;Every web experience is device mediated – it’ll differ whether you’re using a screen reader, laptop browser, mobile browser, etc. The goal of the accessibility tree is to curate the content of a page to give each device – and hence each user – the best foundation for understanding the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Web Content Accessibility Guidelines (WCAG)
&lt;/h2&gt;

&lt;p&gt;If you have no idea where to start implementing accessibility, Ben recommends looking at the &lt;a href="https://www.w3.org/WAI/standards-guidelines/wcag/"&gt;Web Content Accessibility Guidelines (WCAG)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These are a set of guidelines developed by the &lt;a href="https://www.w3.org/"&gt;World Wide Web Consortium (W3C)&lt;/a&gt;, which sets the standards for pretty much the entire internet.&lt;/p&gt;

&lt;p&gt;WCAG are basic industry standards and are often the legal standard in places where accessibility is mandated. &lt;/p&gt;

&lt;p&gt;The guidelines are broken out by the general criteria that an accessible web page should have – perceivable, operable, understandable, and robust. &lt;/p&gt;

&lt;p&gt;Under each criterion are more specific pass/fail criteria that must be met to meet the standards for the general criteria. These criteria include actual implementation steps under the “&lt;strong&gt;How To Meet&lt;/strong&gt;” link and explanations about why they are essential for accessibility in the “&lt;strong&gt;Understanding&lt;/strong&gt;” link. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZI6KsTDr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/04/img_625d58deb88f2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZI6KsTDr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/04/img_625d58deb88f2.png" alt="A screenshot of the “Understandable” section of the WCAG along with a list of five of those criteria." width="880" height="398"&gt;&lt;/a&gt;Some of the “Understandable” criteria&lt;/p&gt;

&lt;p&gt;Ben points out that there are three levels of accessibility that go from A (the least strict) to AAA (the most stringent). While AAA is the ideal, most companies and compliance organizations aim for AA since it reaches most people and the difficulty of being 100% compliant with the AAA level.&lt;/p&gt;

&lt;p&gt;Ben says that he is always learning something new regarding WCAG. For example, one criterion states that a web page should be viewable in every orientation. While this may sound trivial, it helps people who use wheelchairs with mounts for their devices since they often cannot freely rotate their devices due to their disability. &lt;/p&gt;

&lt;h2&gt;
  
  
  More ways to be more accessible
&lt;/h2&gt;

&lt;p&gt;When Ben advocates for accessibility, he talks a lot about user choice – what can you do to allow the user to tailor the experience to their needs?&lt;/p&gt;

&lt;p&gt;Inclusive design allows users to create this optimal experience for themselves. In particular, Ben mentions the user settings of &lt;a href="https://discord.com/"&gt;Discord&lt;/a&gt; as a great example of this. Discord provides a lot of visual settings that are incredibly beneficial for people with color blindness or other visual impairments. &lt;/p&gt;

&lt;p&gt;You need to continuously test your product for accessibility. Test it across browsers, devices, and assistive technologies. &lt;/p&gt;

&lt;p&gt;Ben talks about the saying “Nothing about us without us,” which is another way of saying that it’s essential to involve people with access needs in your user testing. &lt;/p&gt;

&lt;p&gt;If user testing isn’t available to you for some reason, reach out to disability activists on Twitter or other social media sites. Ask them questions or read the insights they produce in their content.&lt;/p&gt;

&lt;p&gt;If you’re interested in watching the whole accessibility discussion between Ben and Corbin, you can find it on the CoderPad Twitch channel &lt;a href="https://www.twitch.tv/videos/1436442023"&gt;here&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>design</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Dev Discussions: SQL vs NoSQL with James Quick of PlanetScale</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Mon, 13 Jun 2022 18:48:36 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-sql-vs-nosql-with-james-quick-of-planetscale-379f</link>
      <guid>https://dev.to/coderpad/dev-discussions-sql-vs-nosql-with-james-quick-of-planetscale-379f</guid>
      <description>&lt;p&gt;We recently shared &lt;a href="https://coderpad.io/blog/getting-hired/dev-discussions-how-to-get-a-great-job-james-quick/"&gt;some excellent job advice&lt;/a&gt; from YouTuber and Developer Advocate James Quick. &lt;/p&gt;

&lt;p&gt;But Corbin and James’ conversation didn’t end with that – they also covered some great information about the differences between SQL and NoSQL and how to choose the proper database for your particular use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  The difference between relational and non-relational databases
&lt;/h2&gt;

&lt;p&gt;Developers have traditionally stored data in the form of a series of tables that relate to one another through a combination of primary and foreign keys – also known as relational databases. The main way we interact with relational databases is through Structured Query Language (SQL). &lt;/p&gt;

&lt;p&gt;For example, two relational database tables might look like this:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;hero_table&lt;/em&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;superpower&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flash&lt;/td&gt;
&lt;td&gt;Really fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storm&lt;/td&gt;
&lt;td&gt;Controls weather&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;villain_table&lt;/em&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;superpower&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Magneto&lt;/td&gt;
&lt;td&gt;Great with magnets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bellatrix Lestrange&lt;/td&gt;
&lt;td&gt;Powerful witch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A SQL statement to merge two tables would look something like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;superpower&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;hero_table&lt;/span&gt;
&lt;span class="k"&gt;UNION&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;superpower&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;villain_table&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SQL and relational databases work great when you have structured and orderly data. However, as data capturing has increased on such a massive scale – think of the terabytes of real-time data captured on users cruising the internet every day – issues with scaling and tracking data that don’t have a consistent structure have become rampant. &lt;/p&gt;

&lt;p&gt;Enter Not Only SQL (NoSQL) and non-relational databases. Instead of using tables consisting of rows and columns to store data, a non-relational database generally uses a JSON object stored with similar objects in a collection. All relationships between collections are informal. &lt;/p&gt;

&lt;p&gt;So rather than having a bunch of different tables that need to link to one another, you can store all the information you need in the collection of objects. So our superheroes and villains data collection might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Flash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"superpower"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"really fast"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hero"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Storm"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"superpower"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Controls weather"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hero"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Magneto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"superpower"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Great with magnets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"villain"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bellatrix Lestrange"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"superpower"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Powerful witch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"villain"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The actual syntax of the NoSQL queries you make to a NoSQL database will depend on the database provider. For example, if you were using MongoDB, you’d use this query to list all the objects from your “supernatural characters” collection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;supernatural_characters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So when should you use one and not the other?&lt;/p&gt;

&lt;h2&gt;
  
  
  SQL vs NoSQL? It depends on the data
&lt;/h2&gt;

&lt;p&gt;As we mentioned earlier, SQL is great if you have lots of structured data that won’t have too many regular schema or column changes. &lt;/p&gt;

&lt;p&gt;An excellent example of structured data is a database that tracks baseball statistics. Generally, you’ll always have a player table with a player name, team name, homeruns, at bats etc–as well as a number of calculated averages like batting average and earned run average. You’ll also probably have a team table with the team’s name, team home runs, location, etc. &lt;/p&gt;

&lt;p&gt;There is a risk to having data structured like this, however – if you have a set of data that regularly has empty or null values for specific fields (e.g., a calculated field like batting average for a year when a player was out on injury), then you’re unnecessarily increasing your disk space, storage costs, and data retrieval time because the database has to store and recall those empty fields. &lt;/p&gt;

&lt;p&gt;NoSQL objects can contain whatever you want –or don’t want – them to have. For that reason, NoSQL databases can be a bit more performant than SQL databases when it comes to reading data. &lt;/p&gt;

&lt;p&gt;You may want to use NoSQL over SQL if you need to scale your data across many machines horizontally. &lt;/p&gt;

&lt;p&gt;Horizontal scaling allows you to spread processing power across multiple machines, increasing the speed of your &lt;a href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete"&gt;CRUD operations&lt;/a&gt;. Because of the way relational databases are designed, it’s challenging to get them spread across multiple processing nodes. &lt;/p&gt;

&lt;p&gt;On the flip side, NoSQL databases can fall apart if a data access pattern changes since there is no way to enforce schemas and relationships like there is with SQL databases. Without carefully managing what data gets logged and where, then it's very easy to make a mess of the data.&lt;/p&gt;

&lt;p&gt;For example, you could have a collection that tracks user demographics like their name, location, and age. &lt;/p&gt;

&lt;p&gt;After three years the product pivots to track health data for users and stops tracking demographic data, so now the product is collecting height, weight, and birth date in the same user collection. &lt;/p&gt;

&lt;p&gt;A month after that the product owner decides they want the birthday collected as a UTC string instead of a normal date string. &lt;/p&gt;

&lt;p&gt;Now you have not only a collection with two different schemas (demographics and health info), but you have a field (birthday) that has two different data types. This can cause lots of processing issues and is one of the reasons you may want to have the schema-enforcement that SQL provides.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of Object-Relational Mapping (ORM)
&lt;/h2&gt;

&lt;p&gt;James dove into object-relational mapping (ORM) towards the end of the database discussion.&lt;/p&gt;

&lt;p&gt;If you’re unfamiliar with ORM, it’s a way for developers to interact with both relational and non-relational databases that doesn’t involve generating complex SQL statements – or any SQL at all.&lt;/p&gt;

&lt;p&gt;ORMs are an abstraction layer that sits above a database and takes human-readable function calls and translates them into SQL or NoSQL. This is a considerable advantage to developers as it reduces errors from having to write complex queries and the same function definitions can be used to manage multiple different databases.&lt;/p&gt;

&lt;p&gt;Here’s what it would look like to insert a row into a relational database with Prisma, an ORM for JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mi"&gt;2&lt;/span&gt;  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;prisma&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;      &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;alice@prisma.io&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;      &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="mi"&gt;7&lt;/span&gt;        &lt;span class="na"&gt;create&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="mi"&gt;8&lt;/span&gt;      &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="mi"&gt;9&lt;/span&gt;      &lt;span class="na"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="mi"&gt;10&lt;/span&gt;        &lt;span class="na"&gt;create&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;bio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I like turtles&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="mi"&gt;11&lt;/span&gt;      &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="mi"&gt;12&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="mi"&gt;13&lt;/span&gt;  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find an ORM for just about every language; Hibernate is a popular one for Java, and Django ORM is often used with Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless computing, horizontal scaling SQL with PlanetScale
&lt;/h2&gt;

&lt;p&gt;James discusses more or his database knowledge with Corbin along with a brief introduction to serverless computing. &lt;/p&gt;

&lt;p&gt;You can find those conversations in the &lt;a href="https://www.twitch.tv/videos/1425572449?t=0h0m1s"&gt;Twitch replay video here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>beginners</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Dev Discussions: How To Get a Great Job at a Great Company with James Quick of PlanetScale</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Wed, 08 Jun 2022 18:11:53 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-how-to-get-a-great-job-at-a-great-company-with-james-quick-of-planetscale-2f3i</link>
      <guid>https://dev.to/coderpad/dev-discussions-how-to-get-a-great-job-at-a-great-company-with-james-quick-of-planetscale-2f3i</guid>
      <description>&lt;p&gt;It’s not often you’re glad you got rejected from a job.&lt;/p&gt;

&lt;p&gt;But for James Quick, it turned out to be a pretty good thing. He had interviewed for a software engineering role at Microsoft, where he didn’t quite make the cut. Still, the interviewers saw enough skill in him to suggest he interview for a “technology evangelist” role with them. He landed it.&lt;/p&gt;

&lt;p&gt;There James was able to gain some valuable public speaking experience – and more importantly, he learned how much he liked talking with others about technology. &lt;/p&gt;

&lt;p&gt;James left Microsoft for a stint as a developer with FedEx, but his calling was clear – he missed the conferences and content creation he was doing as an advocate. He started creating videos on YouTube and speaking at conferences again and then got back into tech advocacy, first with Auth0 and more recently with PlanetScale. &lt;/p&gt;

&lt;p&gt;When he’s not promoting PlanetScale, you can often find him creating content for his 100K+ subscriber &lt;a href="https://www.youtube.com/c/jamesqquick"&gt;YouTube channel&lt;/a&gt; and advising others on how to find a great job in technology.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.twitch.tv/videos/1425572449?t=0h0m1s"&gt;James discusses some of these job hacks in a recent conversation&lt;/a&gt; with CoderPad Developer Advocate Corbin Crutchley.&lt;/p&gt;

&lt;h2&gt;
  
  
  Great Job Hack #1: Create Content
&lt;/h2&gt;

&lt;p&gt;James believes that his content helped him to get the jobs he’s had – and considers it a great way for anyone who wants to get into the tech industry. Even if you’re not super technical or don’t want to get into a super-technical role like engineering, content is a way to share your learning journey with others and prove your knowledge. &lt;/p&gt;

&lt;p&gt;So how do you get started creating content?&lt;/p&gt;

&lt;p&gt;Just write or record! Find a topic that interests you and blog or talk about it. Too often, beginner content creators want their first piece of content to be perfect – so they never end up getting anything published. It may sound scary, but the only way you’re going to become a better content creator is to start creating so you can get the feedback you need to improve your work. &lt;/p&gt;

&lt;p&gt;For example, when James wanted to get into blogging, he made it a goal to publish one post per week. It wasn’t pretty at first, but he got feedback every week and got better.&lt;/p&gt;

&lt;p&gt;He uses feedback to continually refine his methods with other content mediums as well. With YouTube, he admits that he doesn’t create the prettiest videos, but he’s consistent and speaks on topics that people care about. &lt;/p&gt;

&lt;p&gt;James has found diminishing returns when it comes to polishing his YouTube videos. After a certain level of editing, the views don’t increase enough to warrant the time spent on editing the video further.&lt;/p&gt;

&lt;p&gt;He also recently started creating content on &lt;a href="https://www.tiktok.com/@jamesqquick?lang=en"&gt;TikTok&lt;/a&gt;. He uses Tiktok to be less formal and more “himself” compared to the tutorial content he creates. But while this content is less formal than his YouTube courses, they still allow him to position himself as a subject matter expert, making him a more valuable employee.&lt;/p&gt;

&lt;p&gt;Creating content is a great way to get noticed by hiring managers and recruiters. If your content is relevant to their business or open roles, you may be one of the first people they reach out to. &lt;/p&gt;

&lt;p&gt;And let’s not forget that those same hiring managers and recruiters often will also Google your name before an interview to check your online presence.&lt;/p&gt;

&lt;p&gt;Good companies should like that you are active in online communities. If they have a problem with it, they probably are not a place you want to work. &lt;/p&gt;

&lt;h2&gt;
  
  
  Great Job Hack #2: Maintain work-life balance
&lt;/h2&gt;

&lt;p&gt;If you’ve worked in software for the past two years or plan on doing so in the near future, there’s a good chance you’ll be doing it from the comfort of your home.&lt;/p&gt;

&lt;p&gt;While working from home can promote flexibility and productivity, it isn’t without its downsides, one of which is that it becomes harder to separate work life from home life. While the hustle-and-grind culture may bring you short-term gains in your career, it can also quickly lead to burnout and bad health.&lt;/p&gt;

&lt;p&gt;For that reason, James is a big proponent of work-life balance; he promptly ends his day at 5 pm to focus on his family and hobbies outside of work. When requests come in after 5 pm, he holds them until the next day to make self-care a priority.&lt;/p&gt;

&lt;p&gt;Corbin added that he was doing double overtime without pay when he first started working in tech because he thought that was what one did to become a successful developer. But promotions were also harder to come by because &lt;em&gt;everyone&lt;/em&gt; was working 80 hour weeks. Nobody thought to question the psychological toll this was having on the workforce.&lt;/p&gt;

&lt;p&gt;If finding balance is difficult for you and you’re starting to suffer because of it, James offers two pieces of advice:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Set up boundaries:&lt;/strong&gt; If you want people to respect your boundaries, you have to set them up and enforce them. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Look for companies that prioritize work-life balance:&lt;/strong&gt; This is something you’ll want to ask about during the interview process. Corbin adds that while job hunting can often be anxiety-inducing for people who may desperately need a job, it’s essential to remember that interviewing is a two-way street. &lt;/p&gt;

&lt;h2&gt;
  
  
  Great Job Hack #3: Be confident in your skills
&lt;/h2&gt;

&lt;p&gt;The job advice discussion then moved on to something that many new – and even veteran – developers deal with when looking for a new job: confidence in their skills and talent.&lt;/p&gt;

&lt;p&gt;There’s a reason the term “imposter syndrome” is thrown around so much these days. Most of us have struggled with the feeling that we weren’t good enough at some point in our careers. &lt;/p&gt;

&lt;p&gt;But there’s a difference between acknowledging your weak points and deprecating all the hard work and experience that got you to where you are today. &lt;/p&gt;

&lt;p&gt;Companies will hire someone who admits they don’t know something but are willing to learn – they’re a lot less likely to hire someone who isn’t confident in themselves and what they do and do not know.&lt;/p&gt;

&lt;p&gt;James teaches coding classes with LaunchCode and regularly advises his students to acknowledge the skills and talents that they bring to a job. It takes a lot of hard work and dedication to get into software development, and you should be proud of that no matter what path you’re taking to get there. &lt;/p&gt;

&lt;p&gt;Another way you can improve your confidence in your skills is to teach someone what you just learned. Not only do you reinforce what you’ve learned, but James often finds that the best teachers are those who just learned a topic, as they know what it’s like to be a fresh learner and can more easily help people who struggle to grasp what’s being taught. &lt;/p&gt;

&lt;h2&gt;
  
  
  Before You Go: Databases and Serverless Computing
&lt;/h2&gt;

&lt;p&gt;James and Corbin didn’t limit their discussion to just job advice – they also dove deep into &lt;a href="https://coderpad.io/blog/development/sql-vs-nosql-with-james-quick/"&gt;the differences between SQL and NoSQL &lt;/a&gt;and touched on the benefits of serverless computing. You can find more on that in the full &lt;a href="https://www.twitch.tv/videos/1425572449?t=0h0m1s"&gt;Twitch stream here&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>codenewbie</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Dev Discussions: Getting a job in Fortune 500 Companies with Brad Garropy</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Mon, 06 Jun 2022 13:00:13 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-getting-a-job-in-fortune-500-companies-with-brad-garropy-53n3</link>
      <guid>https://dev.to/coderpad/dev-discussions-getting-a-job-in-fortune-500-companies-with-brad-garropy-53n3</guid>
      <description>&lt;p&gt;Brad Garropy didn’t start his career thinking he’d work for some of the biggest names in technology.&lt;/p&gt;

&lt;p&gt;He didn’t even develop a taste for coding until he got to the University of Texas and took two classes on programming while earning his degree in electrical engineering. As a teenager, he was more interested in using computers for cruising the internet than writing software applications.&lt;/p&gt;

&lt;p&gt;Once out of college, he knew he wanted to get into coding, and luckily his university had a recruitment pipeline with Dell that allowed him to land a job there writing firmware in C. But it wasn’t long before he was itching to work his way “up the language stack.”&lt;/p&gt;

&lt;p&gt;That’s when he started to pursue web development by teaching himself the fundamentals of the front-end. Once he built up his portfolio, he started applying for web dev jobs and eventually landed a role with Adobe, where he worked on their Magento e-commerce platform.&lt;/p&gt;

&lt;p&gt;After his stint at Adobe, he now finds himself as a web platform engineer for Trello, owned by the software giant Atlassian.&lt;/p&gt;

&lt;p&gt;Quite a path for someone who started writing firmware in C and now uses React to grow one of the world’s most famous project management applications.&lt;/p&gt;

&lt;p&gt;So how did he do it?&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #1: Take advantage of university or bootcamp partnerships
&lt;/h2&gt;

&lt;p&gt;If you go to a school that has a recruitment partnership with a company that even vaguely interests you, then jump on it! &lt;/p&gt;

&lt;p&gt;Brad said that the process for getting the job was pretty straightforward, and a lot of that has to do with the fact that it’s an established company with an established recruitment program with the university.&lt;/p&gt;

&lt;p&gt;It may not necessarily be something you want to do long-term, but it’s an excellent way to get some experience. Brad was able to get some programming experience – &lt;a href="https://www.geeksforgeeks.org/c-programming-language/"&gt;even if it was in C&lt;/a&gt; – and it helped motivate him to learn more about more advanced programming languages.&lt;/p&gt;

&lt;p&gt;It’s worth noting that even if you don’t go through the university path to become a developer or engineer there are similar options available. A lot of coding bootcamps also partner with companies to funnel students into software careers.&lt;/p&gt;

&lt;p&gt;And if neither one of those options work for you – if you’re self-taught, for example – following tip #2 will help push you to the front of the pack when it comes to getting an interview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #2: Show initiative with independent projects
&lt;/h2&gt;

&lt;p&gt;When Brad was teaching himself web development, he started creating and maintaining open source libraries to have a portfolio of projects to show to prospective employers. &lt;/p&gt;

&lt;p&gt;While that number is now hovering around 20-30 open source projects he’s working on, he credits his initial portfolio with helping him get his job at Adobe. Portfolios can make a big difference for people who are coming to a role from a non-traditional background – like in Brad’s case where he was self-taught and switching from firmware to web development.&lt;/p&gt;

&lt;p&gt;But he didn’t just throw everything on GitHub and then through the link to every interviewer.&lt;/p&gt;

&lt;p&gt;He wanted to prove he could do web development. So first, he made his own website. Then he started creating open source projects to solve problems he was running into. As he began developing these solutions or discovered these problems, he would blog about them.&lt;/p&gt;

&lt;p&gt;So not only did Adobe and other interviewers get to see what he was capable of technically, but they also got an insight into how he thinks and his communication skills.&lt;/p&gt;

&lt;p&gt;“It’s great for show-and-tell,” as he puts it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip #3: Know the role
&lt;/h2&gt;

&lt;p&gt;When asked about how the interview process went with Dell, Adobe, and Atlassian, Brad commented that it was a little different for each one. &lt;/p&gt;

&lt;p&gt;While he calls his job with Adobe a “stroke of luck,” he mentioned a couple of things he did to make himself the ideal candidate. Keep in mind that this role was for a brand new team working with newer tech.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As an external candidate, he could bring a new perspective to the project.&lt;/li&gt;
&lt;li&gt;He regularly read up on new technologies to show that he grasped the tools available to the team.&lt;/li&gt;
&lt;li&gt;A lot of his interview was conducted by backend engineers who were less familiar with front-end tech, so he could position himself as a knowledgeable resource on front-end matters – &lt;em&gt;even though he was wholly self-taught and new to the job field&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;His next job search would take him through 60 applications and 20 interviews, so by the time he wound up interviewing with Atlassian, he had a good idea of what interviewers were looking for. But just as importantly, after over a decade in tech, he knew what kinds of questions the interviewers should be asking.&lt;/p&gt;

&lt;p&gt;So when he was asked about algorithms as a senior developer, he pushed back – these weren’t relevant questions to the position. He focused on the role’s needs and positioned himself as someone who could fill those needs. &lt;/p&gt;

&lt;p&gt;Brad readily admitted to using &lt;a href="https://coderpad.io/blog/development/github-copilot-breaks-bad-interviews/"&gt;Github Copilot&lt;/a&gt; during some of the algorithm questions – and he didn’t feel bad about it. Copilot allowed him to focus on the higher-level business tasks that his role would generally be working on rather than something that a simple AI can solve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some advice for content creators
&lt;/h2&gt;

&lt;p&gt;Of course, Brad didn’t just stick to talking about his career path. &lt;/p&gt;

&lt;p&gt;He and CoderPad Developer Advocate Corbin Crutchley also went deep into content creation and how to get started talking about the problems you’re solving. If you are interested in creating a podcast, blog, or Youtube/Twitch channel, &lt;a href="https://www.twitch.tv/videos/1306547232"&gt;you’ll want to watch the entire live stream right here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>opensource</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Dev Discussions: James Perkins of RollYourTweet on How to Create a Successful SaaS</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Tue, 31 May 2022 19:31:02 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-james-perkins-of-rollyourtweet-on-how-to-create-a-successful-saas-1on7</link>
      <guid>https://dev.to/coderpad/dev-discussions-james-perkins-of-rollyourtweet-on-how-to-create-a-successful-saas-1on7</guid>
      <description>&lt;p&gt;Developer advocate and software engineer James Perkins of &lt;a href="https://www.rollyourtweet.com/"&gt;RollYourTweet.com&lt;/a&gt; has some sage advice for anyone looking to create the next big app:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;”Your users don’t care about your tech stack.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In a &lt;a href="https://www.twitch.tv/videos/1425566066"&gt;recent discussion&lt;/a&gt; with CoderPad’s Corbin Crutchley, James talks about his experience with creating a SaaS application and the lessons he learned from creating RollYourTweet.&lt;/p&gt;

&lt;p&gt;He doesn’t mince words – the people who think your tech stack is cool probably are not going to be the people who are going to use it. More importantly, they’re not going to be the ones &lt;em&gt;paying&lt;/em&gt; for it. The only reason users care about the technology you use is that it improves the product and their experience.&lt;/p&gt;

&lt;p&gt;James – who regularly works with content creators as a Developer Advocate with Tina.io – added that “the content teams don’t care about tech, they just care if it solves their problems.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback before optimization
&lt;/h2&gt;

&lt;p&gt;The conversation then delved into the time and place for optimization – and both Corbin and James agreed there were higher priorities for getting an app off the ground than optimization.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Does the code work? Do we need to spend the time to optimize it now, or can it wait? It’s more important to get it in front of the users for feedback."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Additionally, code can be &lt;em&gt;too&lt;/em&gt; optimized and over-engineered. Frequently this kind of code can be complex, leading to readability issues. &lt;/p&gt;

&lt;p&gt;This may not be an issue if you’re the only one working on the application. Still, if you ever plan to scale your application and bring in more developers to your team, it can quickly become a maintenance issue nightmare. Consider what would happen if you were hit by a bus (&lt;a href="https://en.wikipedia.org/wiki/Bus_factor"&gt;aka the bus factor&lt;/a&gt;) – would your teammates be able to maintain the code without you?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The “bus problem” is also an issue in Open Source Software Security, which we explore in &lt;a href="https://coderpad.io/blog/development/open-source-software-dependency-security/"&gt;this blog post&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s why James reiterated that a successful application focuses more on rapid iterative development than optimization.&lt;/p&gt;

&lt;h2&gt;
  
  
  You can’t please everyone
&lt;/h2&gt;

&lt;p&gt;Corbin then asked James how he deals with both growing his product and the increased criticism that comes with that growth.&lt;/p&gt;

&lt;p&gt;James's answer? “Thick skin.”&lt;/p&gt;

&lt;p&gt;James started his career in tech support, so he is no stranger to being yelled at by angry customers for ridiculous reasons. &lt;/p&gt;

&lt;p&gt;He mentions that there are two types of angry people who call customer support:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The people who are upset at the moment that something isn’t working. These folks usually calm down with time and reasonable effort to fix their issue.&lt;/li&gt;
&lt;li&gt;People who are chronically unhappy and will never like the product.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The former may be able to give you valuable feedback on the product (once they calm down). The latter are probably not worth your time.&lt;/p&gt;

&lt;h2&gt;
  
  
  SaaS success is 90% marketing and 10% code
&lt;/h2&gt;

&lt;p&gt;While negative feedback can be helpful, James makes it a point to encourage his users to provide positive feedback – and he uses that process for marketing the product.&lt;/p&gt;

&lt;p&gt;He has a “public roadmap” where users can suggest improvements to the product and then see as those suggestions are implemented. Not only does it show them what’s being worked on, but they also become involved in the development process, which makes them more invested in the product.&lt;/p&gt;

&lt;p&gt;James will be the first one to tell you that marketing is hard, so one of his go-to strategies is “self-marketing” by just publicly answering questions about the product or just discussing a challenge he had to overcome. &lt;/p&gt;

&lt;p&gt;For example, James recently took some feedback that he had received on Roll Your Tweet and turned it into a Twitter thread:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0LIFusBY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0fjbkwrmiiusf0n0zys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0LIFusBY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0fjbkwrmiiusf0n0zys.png" alt="Image description" width="518" height="860"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  A note on analytics
&lt;/h2&gt;

&lt;p&gt;Even though James doesn’t put a ton on emphasis on your tech stack, he still recommends using an analytics tool to inform your marketing efforts. Analytics will help understand how your users are using your website or application, and those insights should help you figure out how to convert people to take the action you want them to take.&lt;/p&gt;

&lt;p&gt;James recommends using a couple open-source or privacy-focused options like &lt;a href="https://plausible.io/"&gt;Plausible&lt;/a&gt; and &lt;a href="https://usefathom.com/"&gt;Fathom&lt;/a&gt;, but he encourages using them in a very particular way.&lt;/p&gt;

&lt;p&gt;First, be your own user tester. Run through the pages as if you were the customer you want, and watch what’s happening in your analytics dashboard.&lt;/p&gt;

&lt;p&gt;Once you get that initial understanding of how the analytics work with your use case, move on to the “Mum test” (or “Mom test” if you’re from the west side of the Atlantic Ocean): Show your mom or any other friend or family member your website or application. Would they know what to do with it?&lt;/p&gt;

&lt;p&gt;Again, look at your analytics dashboard as they’re going through your service. Where are they pausing? Where are they clicking? Are they using the back button a lot? Are they drawn to a particular feature?&lt;/p&gt;

&lt;p&gt;Answering these questions can help you figure out what to fix and where to focus your marketing efforts. &lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;SaaS creation was just one of many topics that James and Corbin discussed – other hot topics included James’ work with content management systems (CMS), including his time at Tina.io, and a brief discussion on JAMStack and the JSX/Markdown hybrid known as MDX. The entire Twitch stream is worth watching, and &lt;a href="https://www.twitch.tv/videos/1425566066"&gt;you can find it here&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Interested in more developer stories? Check out these three from our coworkers over at CodinGame in celebration of Women’s History Month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.codingame.com/blog/meet-ilke-passionate-ios-woman-developer/?utm_source=coderpad&amp;amp;utm_medium=blog"&gt;Meet Ilke: A Tireless Problem Solver and Passionate iOS Woman Developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codingame.com/blog/woman-developer-interview-elena/?utm_source=coderpad&amp;amp;utm_medium=blog"&gt;Meet Elena: A Marketer Turned Into A Web Developer and React Expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codingame.com/blog/ambareen-standing-for-women-developers-rights/?utm_source=coderpad&amp;amp;utm_medium=blog"&gt;Meet Ambareen: Standing for Women Developers’ Rights in India&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Dev Discussions: Ryan Carniato of SolidJS on Building “The Tesla of JavaScript UI Frameworks”</title>
      <dc:creator>Ken Swearengen</dc:creator>
      <pubDate>Tue, 31 May 2022 19:15:57 +0000</pubDate>
      <link>https://dev.to/coderpad/dev-discussions-ryan-carniato-of-solidjs-on-building-the-tesla-of-javascript-ui-frameworks-45p4</link>
      <guid>https://dev.to/coderpad/dev-discussions-ryan-carniato-of-solidjs-on-building-the-tesla-of-javascript-ui-frameworks-45p4</guid>
      <description>&lt;p&gt;CoderPad’s Corbin Crutchley &lt;a href="https://www.twitch.tv/videos/1275982315"&gt;recently sat down with Ryan Carniato&lt;/a&gt; to discuss his work on the hyper-performant UI library, SolidJS – which Ryan dubs “&lt;a href="https://ryansolid.medium.com/solidjs-the-tesla-of-javascript-ui-frameworks-6a1d379bc05e"&gt;The Tesla of Javascript UI Frameworks&lt;/a&gt;” for its efficiency and performance.&lt;/p&gt;

&lt;p&gt;It’s not often you come across a programmer who used to be a touring musician – but Ryan has experience both slinging code with SolidJS as well as some sweet tunes with his band &lt;em&gt;Mr. Solid&lt;/em&gt; (&lt;a href="https://www.hersheys.ca/allancandy/en_ca/products/allan-solid-milk.html"&gt;both named after a tasty Canadian treat&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;Ryan has been coding since he was 10 years old and started his software engineering career working .NET. It was during these professional years that Ryan discovered Knockout.js and his passion for creating reactive user interfaces; he’s been working in the JavaScript space “solidly” for the past decade. He learned JavaScript by “going to other websites and viewing the source code,” a method that’s become more challenging with the advent of minifiers and obfuscated code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SolidJS and what is it used for?
&lt;/h2&gt;

&lt;p&gt;Boiled down to it’s essence, Ryan calls Solid a “state library” that has slightly different primitives than React. Ryan built Solid to have “[blazing-fast performance, declarative nature, feature set, and &lt;a href="https://sabe.io/tutorials/getting-started-with-solid"&gt;a] small bundle size&lt;/a&gt;,” all while supporting most major features in React.&lt;/p&gt;

&lt;p&gt;Solid is heavily influenced by Knockout.js, which came out around 2010 and was made for creating declarative UIs; it has often been compared to React Components. Both React and Knockout have been strong inspirations for SolidJS – down to Knockout’s tutorials that let you run the code in the browser. &lt;/p&gt;

&lt;p&gt;&amp;gt; Interested in learning more about the history of front end web components? Check out our blog post on &lt;a href="https://coderpad.io/blog/development/web-components-101-history/"&gt;Web Components 101: History&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Solid’s reactivity is based on the concept of a “signal” – per &lt;a href="https://www.solidjs.com/docs/latest"&gt;Solid’s documentation&lt;/a&gt;, “Signals are the most basic reactive primitive. They track a single value (which can be any JavaScript object) that changes over time.”&lt;/p&gt;

&lt;p&gt;The signals are associated with a set of subscribed listeners; when the tracked value changes the signal notifies the listeners and they carry out their respective processing actions. This is a lightweight way to improve reactivity and performance in Solid.&lt;/p&gt;

&lt;p&gt;Here’s an example of a “Hello World” in SolidJS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;HelloWorld&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setFirst&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;JSON&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLast&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bourne&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;createEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Hello&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HelloWorld&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Solid&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Front end frameworks may be a dime-a-dozen, but Solid lives up to it’s jet-speed reputation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/ryansolid/introducing-the-solidjs-ui-library-4mck"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dkLnIMdW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2h1bfu6zrdxog.cloudfront.net/wp-content/uploads/2022/03/img_62278f0c87949.png" alt="SolidJS process speeds compared to its competitors" width="880" height="655"&gt;&lt;/a&gt;SolidJS process speeds compared to competitors&lt;/p&gt;

&lt;p&gt;SolidJS is also smaller than a lot of its competition. In an implementation of the &lt;a href="https://github.com/gothinkster/realworld"&gt;RealWorld Demo&lt;/a&gt; SolidJS &lt;a href="https://levelup.gitconnected.com/a-solid-realworld-demo-comparison-8c3363448fd8"&gt;was able to bundle to just 11.1kb&lt;/a&gt; – about 8% the size of the same implementation using Angular.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/ryansolid/introducing-the-solidjs-ui-library-4mck"&gt;According to Ryan&lt;/a&gt;, it’s also fully featured and “supports most React features like Fragments, Portals, Context, Suspense, Error Boundaries, Lazy Components, Async and Concurrent Rendering, Implicit Event Delegation, SSR and Hydration(although there is no Next.js equivalent yet). It supports a few things not yet in React like Suspense for Async Data Loading, and Streaming SSR with Suspense.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences between SolidJS and React
&lt;/h2&gt;

&lt;p&gt;SolidJS can be thought of as a faster and lighter-weight version of React. They both are declarative and support JSX, but Solid cuts out a lot of overhead processes that allow it to render much faster than React.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bye Bye Virtual DOM
&lt;/h3&gt;

&lt;p&gt;You read that right – instead of updating a virtual DOM like React, SolidJS updates the DOM itself. Ryan designed this to increase the speed of rendering as there is now less overhead pushing changes from the virtual DOM to the real DOM. &lt;/p&gt;

&lt;p&gt;You can find more on how Solid does this and more differences between SolidJS and React &lt;a href="https://blog.logrocket.com/solidjs-vs-react/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web Components Not Included
&lt;/h3&gt;

&lt;p&gt;While Solid is a great fit to integrate into web components, it actually does not use web components “under-the-hood” to generate component instances. Ryan’s reasoning is that while there are certainly uses for web components, they come with performance trade-offs. He found that for Solid he wanted the lightest possible abstraction for a component, which is simply a function that runs once. &lt;/p&gt;

&lt;p&gt;If you’re interested in learning more about the pros and cons of different web component frameworks, check out this article from CoderPad Developer Advocate Corbin Crutchley &lt;a href="https://coderpad.io/blog/development/web-components-101-framework-comparison/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  More Differences With React
&lt;/h3&gt;

&lt;p&gt;Because of Solid’s ability to utilize functions as the reactivity system, you don’t need to rely on dependency arrays like you do with React’s hooks. That means stale closures are dramatically reduced in the Solid ecosystem.&lt;/p&gt;

&lt;p&gt;What’s more, because &lt;a href="https://www.solidjs.com/guides/getting-started#no-compilation%3F"&gt;Solid has a non-JSX method for declaring UI elements&lt;/a&gt;, you don’t need to have a compiler in order to use SolidJS. Even when using JSX + Babel, you only ever compile the Babel instructions to vanilla JavaScript instructions to create HTML nodes – no &lt;code&gt;React.createElement&lt;/code&gt; here!&lt;/p&gt;

&lt;p&gt;For example, our HelloWorld might look like this before being transformed with Solid’s JSX transform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;solid-js/web&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;HelloWorld&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Hello&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HelloWorld&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And after the transform, looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;createComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;insert&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;solid-js/web&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_tmpl$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&amp;lt;div&amp;gt;Hello &amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;HelloWorld&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_el$&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;_tmpl$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cloneNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;_el$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstChild&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_el$&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;_el$&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;createComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;HelloWorld&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{}),&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how it’s using all vanilla JavaScript APIs like &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNode"&gt;&lt;code&gt;cloneNode&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Node/firstChild"&gt;&lt;code&gt;firstChild&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hackers Wanted
&lt;/h2&gt;

&lt;p&gt;Want to earn some cash and learn more about Solid? They’re hosting a Solid-based hackathon where winners can end up with a few thousand dollars in their pockets to help improve the SolidJS ecosystem. Anybody of any skill level can enter and you don’t have to give up your weekend to participate – entries aren’t due until April 7th. &lt;/p&gt;

&lt;p&gt;To find out more about the hackathon, check out the info page &lt;a href="https://hack.solidjs.com/"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Ryan has a very unique and substantial development background which is why it's no surprise that Solid definitely hits its mark in being an extremely fast and lightweight frontend library. If you’re interested in watching the whole discussion between Ryan and Corbin you can find it on the CoderPad Twitch channel &lt;a href="https://www.twitch.tv/videos/1275982315"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

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