<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://www.sitepen.com/blog</id>
    <title>Sitepen</title>
    <updated>2026-04-29T17:57:33.095Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>SitePen</name>
    </author>
    <link rel="alternate" href="https://www.sitepen.com/blog"/>
    <link rel="self" href="https://www.sitepen.com/atom.xml"/>
    <subtitle>Enterprise Web Apps Done Right</subtitle>
    <icon>https://www.sitepen.com/favicon.png</icon>
    <rights>All rights reserved 2026, SitePen</rights>
    <entry>
        <title type="html"><![CDATA[Leveling-Up Your Dev Team]]></title>
        <id>https://www.sitepen.com/blog/leveling-up-your-dev-team</id>
        <link href="https://www.sitepen.com/blog/leveling-up-your-dev-team"/>
        <updated>2023-07-10T13:55:24.000Z</updated>
        <summary type="html"><![CDATA[<p>Software projects succeed or fail based on the quality of the teams behind them. Expert developers can be hard to find. So how do you get junior developers to level up? It’s not enough to teach how to use a framework or tech stack. Good developers can follow a pattern. Great developers know why patterns </p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Leadership" term="leadership"/>
        <category label="Project Management" term="project-management"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[TypeScript 5.0 Cheat Sheet]]></title>
        <id>https://www.sitepen.com/blog/typescript-cheat-sheet</id>
        <link href="https://www.sitepen.com/blog/typescript-cheat-sheet"/>
        <updated>2023-06-07T09:12:25.000Z</updated>
        <summary type="html"><![CDATA[<p>This cheat sheet is an adjunct to our Definitive TypeScript Guide. Originally published November 2018. Updated November 2022 for TypeScript 4.8.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Redesigning Enterprise Apps Efficiently: The Bottom Up Approach]]></title>
        <id>https://www.sitepen.com/blog/redesigning-enterprise-apps-efficiently-the-bottom-up-approach</id>
        <link href="https://www.sitepen.com/blog/redesigning-enterprise-apps-efficiently-the-bottom-up-approach"/>
        <updated>2023-05-19T13:04:20.000Z</updated>
        <summary type="html"><![CDATA[<p>Not long ago, good design was considered nice to have, but non-essential to a product or company. In today&#8217;s market, however, good design has become a commodity. The apps we use on our phones, our laptops, or even on our TVs are constantly scrutinized based on their quality of user experience design.</p>
]]></summary>
        <author>
            <name>Scott Jensen</name>
        </author>
        <category label="Enterprise Apps Development" term="enterprise-apps-development"/>
        <category label="UI Design" term="ui-design"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Getting Started with WebRTC]]></title>
        <id>https://www.sitepen.com/blog/getting-started-with-webrtc</id>
        <link href="https://www.sitepen.com/blog/getting-started-with-webrtc"/>
        <updated>2023-05-16T08:57:28.000Z</updated>
        <summary type="html"><![CDATA[<p>Did you know that a desktop browser has almost everything you need to make video calls? A client-side web app can use the WebRTC API, which is built into modern browsers, to access a system&#8217;s camera(s), start a video stream, and connect to a remote system, all without requiring any third party plugins. In the </p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="Video" term="video"/>
        <category label="Web Development" term="web-development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Definitive TypeScript 5.0 Guide]]></title>
        <id>https://www.sitepen.com/blog/update-the-definitive-typescript-guide</id>
        <link href="https://www.sitepen.com/blog/update-the-definitive-typescript-guide"/>
        <updated>2023-03-21T04:32:52.000Z</updated>
        <summary type="html"><![CDATA[<p>Originally published October 2018. Updated March 2023. This article describes the features and functionality of TypeScript 5.0. One of the most interesting languages for large-scale application development is Microsoft’s TypeScript. TypeScript is unique in that it is a superset of JavaScript, but with optional types, interfaces, generics, and more. </p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
        <category label="Tutorials" term="tutorials-2"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building a Serverless Chat Application with Supabase]]></title>
        <id>https://www.sitepen.com/blog/building-a-serverless-chat-application-with-supabase</id>
        <link href="https://www.sitepen.com/blog/building-a-serverless-chat-application-with-supabase"/>
        <updated>2023-03-14T02:12:40.000Z</updated>
        <summary type="html"><![CDATA[<p>Modern times have seen an explosion in services providing a multitude of serverless possibilities, but what is serverless? Does this mean there are no servers? You’d think, but no. </p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Serverless" term="serverless"/>
        <category label="Supabase" term="supabase"/>
        <category label="Realtime" term="realtime"/>
        <category label="React" term="react"/>
        <category label="Milestone Mayhem" term="milestone-mayhem"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using Redux-Saga to Write a Game Loop]]></title>
        <id>https://www.sitepen.com/blog/using-redux-saga-to-write-a-game-loop</id>
        <link href="https://www.sitepen.com/blog/using-redux-saga-to-write-a-game-loop"/>
        <updated>2023-03-13T10:39:52.000Z</updated>
        <summary type="html"><![CDATA[<p>Redux-Saga is an intuitive side effect manager for Redux. There are many methods and tools to manage side effects with Redux, but Redux-Saga is fascinating because it&#8217;s an implementation of Communicating Sequential Processes, CSP for short.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="TypeScript" term="typescript"/>
        <category label="React" term="react"/>
        <category label="Milestone Mayhem" term="milestone-mayhem"/>
        <category label="Redux" term="redux"/>
        <category label="Redux Saga" term="redux-saga"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Design to Development: Bridging the Gap for a Successful Handoff]]></title>
        <id>https://www.sitepen.com/blog/design-to-development-bridging-the-gap-for-a-successful-handoff</id>
        <link href="https://www.sitepen.com/blog/design-to-development-bridging-the-gap-for-a-successful-handoff"/>
        <updated>2023-03-07T05:23:57.000Z</updated>
        <summary type="html"><![CDATA[<p>Let’s be honest, getting designs from your UX team into the hands of your engineering team in a way that makes sense is rarely easy. Add tight deadlines, team changes, and miscommunication to this process, and your application will likely end up looking very different than what you expected. </p>
]]></summary>
        <author>
            <name>Scott Jensen</name>
        </author>
        <category label="UI Design" term="ui-design"/>
        <category label="Documentation" term="documentation"/>
        <category label="Design" term="design"/>
        <category label="Web Development" term="web-development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Exploring the Creative Possibilities of Markov Chains for Text Generation]]></title>
        <id>https://www.sitepen.com/blog/exploring-the-creative-possibilities-of-markov-chains-for-text-generation</id>
        <link href="https://www.sitepen.com/blog/exploring-the-creative-possibilities-of-markov-chains-for-text-generation"/>
        <updated>2023-02-23T07:04:50.000Z</updated>
        <summary type="html"><![CDATA[<p>News about AI is everywhere right now. Whether it&#8217;s ChatGPT or Stable Diffusion, we’re using AI algorithms to generate text and images. Before the recent explosion of neural networks though, people have been using computers as word smiths for decades.</p>
]]></summary>
        <author>
            <name>Rory Mulligan</name>
        </author>
        <category label="AI" term="ai"/>
        <category label="Algorithms" term="algorithms"/>
        <category label="Markov chains" term="markov-chains"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using the Local File System to Enrich Your Apps]]></title>
        <id>https://www.sitepen.com/blog/using-the-local-file-system-to-enrich-your-apps</id>
        <link href="https://www.sitepen.com/blog/using-the-local-file-system-to-enrich-your-apps"/>
        <updated>2023-02-15T06:26:57.000Z</updated>
        <summary type="html"><![CDATA[<p>Use the File System Access API to read, write, and edit files on the local file system directly from the browser.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="File System API" term="file-system-api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Unlocking the Power of Parser Combinators: A Beginner&#8217;s Guide]]></title>
        <id>https://www.sitepen.com/blog/unlocking-the-power-of-parser-combinators-a-beginners-guide</id>
        <link href="https://www.sitepen.com/blog/unlocking-the-power-of-parser-combinators-a-beginners-guide"/>
        <updated>2023-02-09T02:27:01.000Z</updated>
        <summary type="html"><![CDATA[<p>In this article, we&#8217;re going to explore a particular type of parser that is conceptually simple, super flexible, and crazy easy to test. We&#8217;ll use these parsers to help us solve a problem that many of us have been faced with and frustrated by: parsing dates.</p>
]]></summary>
        <author>
            <name>Rory Mulligan</name>
        </author>
        <category label="TypeScript" term="typescript"/>
        <category label="Parser Combinators" term="parser-combinators"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Beyond the Code: A Look at the Next Steps in Mobile App Development]]></title>
        <id>https://www.sitepen.com/blog/beyond-the-code-a-look-at-the-next-steps-in-mobile-app-development</id>
        <link href="https://www.sitepen.com/blog/beyond-the-code-a-look-at-the-next-steps-in-mobile-app-development"/>
        <updated>2023-02-07T07:03:53.000Z</updated>
        <summary type="html"><![CDATA[<p>Developing a mobile app is a major accomplishment, but it&#8217;s just the first step in a long journey. In order for your app to be successful, it&#8217;s important to not only develop the app but also to beta test it, release it, and update it after it&#8217;s released to the public.</p>
]]></summary>
        <author>
            <name>Rory Mulligan</name>
        </author>
        <category label="Testing" term="testing"/>
        <category label="mobile" term="mobile"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Going Private: How to Set Up and Use a Private Node Registry with Expo Application Services]]></title>
        <id>https://www.sitepen.com/blog/going-private-node-registry-with-eas</id>
        <link href="https://www.sitepen.com/blog/going-private-node-registry-with-eas"/>
        <updated>2023-02-03T03:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>We discuss the benefits of using a private node registry with Expo Application Services, as well as the steps involved in using such a registry.</p>
]]></summary>
        <author>
            <name>Rory Mulligan</name>
        </author>
        <category label="React Native" term="react-native"/>
        <category label="Expo" term="expo"/>
        <category label="Node Registry" term="node-registry"/>
        <category label="EAS" term="eas"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Software &#038; Data Architecture: Part 2]]></title>
        <id>https://www.sitepen.com/blog/software-data-architecture-part-2</id>
        <link href="https://www.sitepen.com/blog/software-data-architecture-part-2"/>
        <updated>2023-02-01T03:14:44.000Z</updated>
        <summary type="html"><![CDATA[<p>In the first part of this article, we learned about fundamental data architecture and modeling concepts that provide valuable insights into your system. While the visual nature of these artifacts is helpful in its own right, what other benefits can teams gain from analyzing and documenting these concepts?</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Software Development Life Cycle" term="software-development-life-cycle"/>
        <category label="Enterprise Apps Development" term="enterprise-apps-development"/>
        <category label="Software Architecture Design" term="software-architecture-design"/>
        <category label="Information Security" term="information-security"/>
        <category label="Data Modeling" term="data-modeling"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Software &#038; Data Architecture: Part 1]]></title>
        <id>https://www.sitepen.com/blog/software-data-architecture-part-1</id>
        <link href="https://www.sitepen.com/blog/software-data-architecture-part-1"/>
        <updated>2023-01-24T06:52:08.000Z</updated>
        <summary type="html"><![CDATA[<p>The definitions of ‘information architecture’ and ‘data architecture’ are, unfortunately, pretty broad. They cover many areas of systems engineering and are applicable across several disciplines, including the design of business processes, user experiences, and software implementations. Every concept you can find in any accepted definition for the terms has value. </p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Software Development Life Cycle" term="software-development-life-cycle"/>
        <category label="Enterprise Apps Development" term="enterprise-apps-development"/>
        <category label="Software Architecture Design" term="software-architecture-design"/>
        <category label="Information Security" term="information-security"/>
        <category label="Data Modeling" term="data-modeling"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The State of Machine Learning 2023]]></title>
        <id>https://www.sitepen.com/blog/the-state-of-machine-learning-2023</id>
        <link href="https://www.sitepen.com/blog/the-state-of-machine-learning-2023"/>
        <updated>2023-01-18T10:56:26.000Z</updated>
        <summary type="html"><![CDATA[<p>2022 increased the public spotlight on AI like no other year with the virality of image generation tools like DALL-E and Midjourney, text compositions from ChatGPT, and the increasing sophistication of humanoid robots. These systems certainly raise interesting societal questions around plagiarism and what “art” is, the ethics of AI content generation, and the actual beneficiaries of generalized task automation, among many others.</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Machine Learning" term="machine-learning"/>
        <category label="Artificial Intelligence" term="artificial-intelligence"/>
        <category label="Computer Vision" term="computer-vision"/>
        <category label="Natural Language Processing" term="natural-language-processing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Intro to tRPC]]></title>
        <id>https://www.sitepen.com/blog/intro-to-trpc</id>
        <link href="https://www.sitepen.com/blog/intro-to-trpc"/>
        <updated>2022-12-13T09:44:50.000Z</updated>
        <summary type="html"><![CDATA[<p>The benefits of TypeScript are numerous, from strong type safety, code maintenance to refactoring, and more. It’s also not uncommon today for web developers to be responsible for both the front end and the back end of a project. This can be highlighted by the popularity of frameworks like Next and Remix, both of which allow developers to work on full-stack TypeScript applications.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="TypeScript" term="typescript"/>
        <category label="Web Development" term="web-development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Advanced TypeScript 4.8 Concepts: Classes and Types]]></title>
        <id>https://www.sitepen.com/blog/advanced-typescript-concepts-classes-and-types</id>
        <link href="https://www.sitepen.com/blog/advanced-typescript-concepts-classes-and-types"/>
        <updated>2022-11-16T02:30:00.000Z</updated>
        <summary type="html"><![CDATA[<p>Originally published November 2018. Updated November 2022. This article describes the features and functionality of TypeScript 4.8.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Basics of Proxy]]></title>
        <id>https://www.sitepen.com/blog/the-basics-of-proxy</id>
        <link href="https://www.sitepen.com/blog/the-basics-of-proxy"/>
        <updated>2022-11-08T03:17:33.000Z</updated>
        <summary type="html"><![CDATA[<p>Modern JavaScript is amazing. There are so many features you might not have had a chance to use, and some that are probably being utilized by some of your favorite frameworks and tooling. One such feature is the Proxy.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Proxy" term="proxy"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Intro to HTML-first Frontend Frameworks]]></title>
        <id>https://www.sitepen.com/blog/intro-to-html-first-frontend-frameworks</id>
        <link href="https://www.sitepen.com/blog/intro-to-html-first-frontend-frameworks"/>
        <updated>2022-10-31T04:02:17.000Z</updated>
        <summary type="html"><![CDATA[<p>In the beginning was HTML, and our pages were fast. But they were boring, so we added JavaScript.&nbsp; JavaScript ended up being so capable that we ended up creating entire applications with it, dynamically creating and destroying DOM interactively to users&#8217; delight. Applications grew in complexity and so frameworks were created to tame that complexity, giving developers components, state management, routing, and so much more.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Performance" term="performance"/>
        <category label="Front-end" term="front-end"/>
        <category label="HTML First" term="html-first"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Intro to Feature Toggles]]></title>
        <id>https://www.sitepen.com/blog/intro-to-feature-toggles</id>
        <link href="https://www.sitepen.com/blog/intro-to-feature-toggles"/>
        <updated>2022-10-26T06:32:41.000Z</updated>
        <summary type="html"><![CDATA[<p>Feature toggles (sometimes referred to as feature flags) are an engineering practice aiming to control application behavior without the need to deploy a code change. The behaviors that toggles can affect range from hiding under development features, limited feature release (canary) to a subset of users, or used to switch to fallback implementation in the event of a system issue, and more. These feature toggles are defined outside of the codebase in a shared datastore or service that the application can look up at runtime to determine the status (traditionally on or off, but some features toggle implementations can accept more descriptive values).</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Pattern" term="pattern"/>
        <category label="Architecture" term="architecture"/>
        <category label="Enterprise Apps Development" term="enterprise-apps-development"/>
        <category label="Continuous Integration" term="continuous-integration"/>
        <category label="Software Delivery" term="software-delivery"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[CI/CD Challenges: An Enterprise Overview of Continuous Integration, Delivery, and Deployment]]></title>
        <id>https://www.sitepen.com/blog/ci-cd-challenges-an-enterprise-overview</id>
        <link href="https://www.sitepen.com/blog/ci-cd-challenges-an-enterprise-overview"/>
        <updated>2022-10-24T10:48:08.000Z</updated>
        <summary type="html"><![CDATA[<p>Continuous integration, continuous delivery, and continuous deployment implementations cover a wide range of automation possibilities for your software. This article will provide an overview of these three principles, the benefits they can bring to your engineering efficiency, and potential challenges. A continuous integration pipeline is the first step to embracing a CI/CD process.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Architecture" term="architecture"/>
        <category label="Enterprise Apps Development" term="enterprise-apps-development"/>
        <category label="Continuous Integration" term="continuous-integration"/>
        <category label="Software Delivery" term="software-delivery"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Intl for Your Apps]]></title>
        <id>https://www.sitepen.com/blog/intl-for-your-apps</id>
        <link href="https://www.sitepen.com/blog/intl-for-your-apps"/>
        <updated>2022-10-07T06:34:18.000Z</updated>
        <summary type="html"><![CDATA[<p>At some point when you build applications with a wide user base, you find that you need to support various combinations of languages and locales. This could be in the form of having to support a locale from the browser, or maybe a user has defined their preferred locale in their profile, so you need to display data in a different locale from the browser default. Taking a step back from translating text, which most likely involves you defining files in multiple languages, you can handle the formatting of dates and numbers in your applications.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="i18n" term="i18n"/>
        <category label="Localization" term="localization"/>
        <category label="Internationalization" term="internationalization"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Jest + ESM: Almost There&#8230;]]></title>
        <id>https://www.sitepen.com/blog/jest-esm-almost-there</id>
        <link href="https://www.sitepen.com/blog/jest-esm-almost-there"/>
        <updated>2022-09-08T06:18:35.000Z</updated>
        <summary type="html"><![CDATA[<p>Jest is one of the most popular testing frameworks, but it hasn&#8217;t really kept up with the growing support for native JavaScript modules (ESM) in the developer community. A fresh install of Jest will simply not work with native modules. However, Jest does have experimental support for ES modules.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="Testing" term="testing"/>
        <category label="Jest" term="jest"/>
        <category label="esm" term="esm"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Basics of a Monorepo: Where Projects Go to Meet]]></title>
        <id>https://www.sitepen.com/blog/the-basics-of-a-monorepo-where-projects-go-to-meet</id>
        <link href="https://www.sitepen.com/blog/the-basics-of-a-monorepo-where-projects-go-to-meet"/>
        <updated>2022-08-30T09:17:55.000Z</updated>
        <summary type="html"><![CDATA[<p>You may not need a monorepo, but it’s useful to know what they are and what they have to offer. You could have a monorepo that is a mix of frontend, backend, utilities, linters, or more, each with its own set of build tools, and various needs. As a monorepo, it can help you tell a cohesive overall story for your projects.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Web Development" term="web-development"/>
        <category label="Monorepo" term="monorepo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Web Speech API: Can You Hear Me Now?]]></title>
        <id>https://www.sitepen.com/blog/the-web-speech-api-can-you-hear-me-now</id>
        <link href="https://www.sitepen.com/blog/the-web-speech-api-can-you-hear-me-now"/>
        <updated>2022-08-17T04:47:08.000Z</updated>
        <summary type="html"><![CDATA[<p>How often have you wanted to yell at your computer or phone? What if your device could save that tirade as a text in an email or note you could review in the future, a memento of your favorite outbursts? Or, maybe you want to provide your users a more hands-free experience, with alerts that also speak to you. Or you simply want to add a clean voice-to-text component to your application. The Web Speech API provides developers with a tool to accomplish all of this! You can do two things with the Web Speech API: speech recognition and speech synthesis.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Web Development" term="web-development"/>
        <category label="Web Speech API" term="web-speech-api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Give Svelte a Try]]></title>
        <id>https://www.sitepen.com/blog/give-svelte-a-try</id>
        <link href="https://www.sitepen.com/blog/give-svelte-a-try"/>
        <updated>2022-08-11T08:45:28.000Z</updated>
        <summary type="html"><![CDATA[<p>Svelte has become increasingly popular over the last several years, even being voted the &#8220;most loved&#8221; web development framework in the 2021 Stack Overflow Developer Survey. Quite a few articles have been written about how much nicer Svelte is to work with than React. Supposedly Svelte is easier to pick up for new developers and generally more pleasant to work with.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="React" term="react"/>
        <category label="Svelte" term="svelte"/>
        <category label="Front-end" term="front-end"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Welcome to Web Bundles]]></title>
        <id>https://www.sitepen.com/blog/welcome-to-web-bundles</id>
        <link href="https://www.sitepen.com/blog/welcome-to-web-bundles"/>
        <updated>2022-07-08T07:46:34.000Z</updated>
        <summary type="html"><![CDATA[<p>Web bundles are an exciting part of the web packaging specification. They provide you the ability to package up your entire website into a single bundle and share it with others. Have you ever had to create a zip file of your project and email it to someone? This is similar to how web bundles work, but in a formalized spec that can be opened directly in the browser.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Web Development" term="web-development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Spend Some Time With the Temporal API]]></title>
        <id>https://www.sitepen.com/blog/spend-some-time-with-the-temporal-api</id>
        <link href="https://www.sitepen.com/blog/spend-some-time-with-the-temporal-api"/>
        <updated>2022-06-14T01:51:00.000Z</updated>
        <summary type="html"><![CDATA[<p>Ask almost any developer what their greatest fear is and one deep-seated topic will rise above the rest&#8230; dates. To be fair, this will mostly stem from where those dates originate.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Temporal API" term="temporal-api"/>
        <category label="JavaScript" term="javascript"/>
        <category label="Tools" term="tools"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why Type Annotations in JavaScript are a Good Idea]]></title>
        <id>https://www.sitepen.com/blog/why-type-annotations-in-javascript-are-a-good-idea</id>
        <link href="https://www.sitepen.com/blog/why-type-annotations-in-javascript-are-a-good-idea"/>
        <updated>2022-05-17T05:58:33.000Z</updated>
        <summary type="html"><![CDATA[<p>In March 2022, a Stage 0 proposal was announced that would add TypeScript-like type annotations to the JavaScript language. The utility and ergonomics of static types for JavaScript have been debated since before TypeScript&#8217;s inception; some developers feel that types add needless complexity to the language, while others feel that types add a much-needed safety net. Today, static typing is one of the most desired JavaScript features, and adding some level of type syntax to the language would provide several benefits.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
        <category label="Open Source" term="open-source"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[A Recipe for the Perfect Software Delivery Storm: Part 2]]></title>
        <id>https://www.sitepen.com/blog/a-recipe-for-the-perfect-software-delivery-storm-part-2</id>
        <link href="https://www.sitepen.com/blog/a-recipe-for-the-perfect-software-delivery-storm-part-2"/>
        <updated>2022-04-05T02:51:17.000Z</updated>
        <summary type="html"><![CDATA[<p>The first half of this 2-part series highlighted why ongoing maintenance is vital for the health of large-scale enterprise systems, especially heading into a substantial upgrade or replacement project as the system reaches end-of-life. We inverted the problem and started describing a recipe for implementing the worst “best” possible enterprise system upgrade project a business could ever want. Now, what other areas could we add to the recipe for even more fun? Disclaimer: The following recipe is intended as satire &#8211; not to be taken literally! Are engineers interacting directly with product owners? Who wants that! Add extra layers into the hierarchy, such as analysts with conflicting information or multiple levels of product owners with differing ideas on future direction.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Anti-Patterns" term="anti-patterns"/>
        <category label="Software Delivery" term="software-delivery"/>
        <category label="Humor" term="humor"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[A Recipe for the Perfect Software Delivery Storm: Part 1]]></title>
        <id>https://www.sitepen.com/blog/a-recipe-for-the-perfect-software-delivery-storm-part-1</id>
        <link href="https://www.sitepen.com/blog/a-recipe-for-the-perfect-software-delivery-storm-part-1"/>
        <updated>2022-04-04T02:22:59.000Z</updated>
        <summary type="html"><![CDATA[<p>Enterprise software delivery for large-scale projects is complex. It requires substantial time and financial resources to complete, whereas a single system can cost millions of dollars and take years to deliver. Firms will likely expect their software ecosystems to operate for decades before retiring or replacing them to maximize profit and justify the significant initial development outlay.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Anti-Patterns" term="anti-patterns"/>
        <category label="Software Delivery" term="software-delivery"/>
        <category label="Humor" term="humor"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Doing It All With Deno]]></title>
        <id>https://www.sitepen.com/blog/doing-it-all-with-deno</id>
        <link href="https://www.sitepen.com/blog/doing-it-all-with-deno"/>
        <updated>2022-04-01T02:17:23.000Z</updated>
        <summary type="html"><![CDATA[<p>We&#8217;ve talked before about some of the great features Deno brings to the table: first-class TypeScript support, a solid standard library, support for Web standards, and implicit security. All of this makes Deno great for writing scripts and servers, but it also works well for writing client-side applications. You can create a complete web app with nothing but Deno (and libraries 😄): client, server, and even tests! In this post, I&#8217;m going to walk through a simple Deno-based Todos app.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="TypeScript" term="typescript"/>
        <category label="React" term="react"/>
        <category label="Deno" term="deno"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[4 Ingredients to Successful Software Development]]></title>
        <id>https://www.sitepen.com/blog/4-ingredients-to-successful-software-development</id>
        <link href="https://www.sitepen.com/blog/4-ingredients-to-successful-software-development"/>
        <updated>2022-03-31T02:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>Software engineering is one of the most challenging endeavors we can engage in today. Successful software projects must address the vast scope of today&#8217;s applications while paying meticulous attention to the small details that can make the difference between a fast, efficient system and a slow, cumbersome burden. Surprisingly, the things that are most often complained about &#8211; short deadlines, moving targets, etc.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Leadership" term="leadership"/>
        <category label="Web Development" term="web-development"/>
        <category label="Project Management" term="project-management"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Doing More with Expo: Using Custom Native Code]]></title>
        <id>https://www.sitepen.com/blog/doing-more-with-expo-using-custom-native-code</id>
        <link href="https://www.sitepen.com/blog/doing-more-with-expo-using-custom-native-code"/>
        <updated>2022-03-24T06:52:20.000Z</updated>
        <summary type="html"><![CDATA[<p>Expo, a framework that significantly improves the React Native developer experience, has become very popular in the last couple of years. Its &#8220;managed&#8221; workflow lets developers work entirely in React; the underlying native app, including the often messy process of updating React Native, is completely taken care of by the framework. Unfortunately, using the managed flow has traditionally required apps to stick to whatever set of native extensions are in the Expo Go client; if more native code is needed, developers have had to use Expo&#8217;s &#8220;bare&#8221; flow, which is missing many of the conveniences of the managed flow.&nbsp; This is no longer the case.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="React Native" term="react-native"/>
        <category label="Blueshift" term="blueshift"/>
        <category label="Expo" term="expo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Native Everywhere: iMessage Apps and Input Services]]></title>
        <id>https://www.sitepen.com/blog/react-native-everywhere-imessage-apps-and-input-services</id>
        <link href="https://www.sitepen.com/blog/react-native-everywhere-imessage-apps-and-input-services"/>
        <updated>2021-10-08T06:16:23.000Z</updated>
        <summary type="html"><![CDATA[<p>React Native is great for writing mobile applications. It lets you use web paradigms for UI construction, which are usually much simpler than the native analogues. Tools like Expo make developing apps even easier, allowing developers to mostly ignore the native side of things.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="Swift" term="swift"/>
        <category label="mobile" term="mobile"/>
        <category label="React Native" term="react-native"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Automate Web Vitals Checks with Github Actions and Lighthouse]]></title>
        <id>https://www.sitepen.com/blog/automate-web-vitals-checks-with-github-actions-and-lighthouse</id>
        <link href="https://www.sitepen.com/blog/automate-web-vitals-checks-with-github-actions-and-lighthouse"/>
        <updated>2021-08-04T09:22:01.000Z</updated>
        <summary type="html"><![CDATA[<p>Introduction Web Vitals&nbsp;scores can have a huge influence on your search engine rankings and directly impact your user’s experience when visiting your website. Follow our guide to automating Web Vitals checks against your Vercel CI Deployment using GitHub Actions and ensure that you don’t introduce performance issues into your code that could affect your search engine ranking. Web Vitals and Lighthouse As we covered previously in our&nbsp;Size Matters: The Value of Performance Optimization&nbsp;post, your Web Vitals scores will directly impact your search engine ranking.</p>
]]></summary>
        <author>
            <name>Tom Dye</name>
        </author>
        <category label="Performance" term="performance"/>
        <category label="Modernization" term="modernization"/>
        <category label="GitHub" term="github"/>
        <category label="Lighthouse" term="lighthouse"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Deno: Desktop JS Evolved]]></title>
        <id>https://www.sitepen.com/blog/deno-desktop-js-evolved</id>
        <link href="https://www.sitepen.com/blog/deno-desktop-js-evolved"/>
        <updated>2021-07-29T12:09:28.000Z</updated>
        <summary type="html"><![CDATA[<p>Deno, introduced by Node.js creator Ryan Dahl during JSConf 2018, has grown into a credible alternative to Node.js, and the JavaScript and TypeScript communities have continued to track Deno&#8217;s progress. Like Node.js, Deno is a system for executing JavaScript code in various environments ( desktop, command-line, server, etc.). It works similarly to Node.js — you write scripts in JavaScript or TypeScript and run them using the deno command line program.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
        <category label="Node.js" term="node-js-2"/>
        <category label="Deno" term="deno"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Improving Web Application Security with a Content Security Policy]]></title>
        <id>https://www.sitepen.com/blog/improving-web-application-security-with-csp</id>
        <link href="https://www.sitepen.com/blog/improving-web-application-security-with-csp"/>
        <updated>2021-07-14T05:06:48.000Z</updated>
        <summary type="html"><![CDATA[<p>A Content Security Policy (CSP) is an important aspect of securing websites and web applications. CSP is a resource security specification (W3C recommendation) for web browsers. It is configured by sending directives in an HTTP header.</p>
]]></summary>
        <author>
            <name>Mangala SSS Khalsa</name>
        </author>
        <category label="Security" term="security"/>
        <category label="Testing" term="testing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Taming Strings with Template Literal Types]]></title>
        <id>https://www.sitepen.com/blog/taming-strings-with-template-literal-types</id>
        <link href="https://www.sitepen.com/blog/taming-strings-with-template-literal-types"/>
        <updated>2021-06-18T05:35:45.000Z</updated>
        <summary type="html"><![CDATA[<p>Among the vast number of improvements that ES2015 brought to the JavaScript language was a powerful feature called &#8220;template literals.&#8221; Naturally, TypeScript, as a superset of JavaScript, has supported this useful construct since its beginning. However, TypeScript 4.1 introduced a novel application of the template literal concept to increase the power and usefulness of its type-system: it introduced something called a template literal type. In this article, we&#8217;ll talk about this new feature and how you can use it to increase the robustness of one of the most challenging things that a type system can face: strings.</p>
]]></summary>
        <author>
            <name>Michael Van Sickle</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[PWAs: Blurring the Line Between Native and Web Applications]]></title>
        <id>https://www.sitepen.com/blog/pwas-blurring-the-line-between-native-and-web-applications</id>
        <link href="https://www.sitepen.com/blog/pwas-blurring-the-line-between-native-and-web-applications"/>
        <updated>2021-06-15T06:49:09.000Z</updated>
        <summary type="html"><![CDATA[<p>Today&#8217;s software development landscape has never been more challenging. The rich capabilities of modern hardware and the high consumer expectations for performance and stability combine to ensure that developers need as much help as possible to meet their deadlines. Of all these challenges, one of the most vexing is the need to support today&#8217;s vast number of devices and operating systems.&nbsp; A primary goal for creating cross-platform applications is to ensure that as much code can be reused as possible.</p>
]]></summary>
        <author>
            <name>SitePen Engineering</name>
        </author>
        <category label="Web Development" term="web-development"/>
        <category label="Progressive Web Applications" term="progressive-web-applications"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[My Engineers Love TypeScript, but Will it Actually Make My Project Better?]]></title>
        <id>https://www.sitepen.com/blog/my-engineers-love-typescript-but-will-it-actually-make-my-project-better</id>
        <link href="https://www.sitepen.com/blog/my-engineers-love-typescript-but-will-it-actually-make-my-project-better"/>
        <updated>2021-06-10T05:29:51.000Z</updated>
        <summary type="html"><![CDATA[<p>TypeScript has become a hugely popular alternative to JavaScript in the frontend web development community. Many engineering teams are convinced it is a critical tool that allows them to write better code faster. From a business perspective, however, things are not so straightforward.</p>
]]></summary>
        <author>
            <name>Eric Heasley</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
        <category label="Modernization" term="modernization"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to git by with a GUI]]></title>
        <id>https://www.sitepen.com/blog/how-to-git-by-with-a-gui</id>
        <link href="https://www.sitepen.com/blog/how-to-git-by-with-a-gui"/>
        <updated>2021-06-07T12:26:31.000Z</updated>
        <summary type="html"><![CDATA[<p>Getting started with Git can be a daunting task, especially if you are not at home in the command line. Fortunately, Git is a mature and widely used tool so there is a lot of reference and &#8220;How do I…?&#8221; material available. One aspect less commonly covered is using Git with some of the numerous Git GUIs available.</p>
]]></summary>
        <author>
            <name>Mangala SSS Khalsa</name>
        </author>
        <category label="Development Life Cycle" term="development-life-cycle"/>
        <category label="Git" term="git"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Rome: The Last JavaScript Package]]></title>
        <id>https://www.sitepen.com/blog/rome-the-last-javascript-package</id>
        <link href="https://www.sitepen.com/blog/rome-the-last-javascript-package"/>
        <updated>2021-06-01T06:30:55.000Z</updated>
        <summary type="html"><![CDATA[<p>Rome is a new set of tools for working with web-facing technologies like JavaScript, TypeScript, JSON, HTML, Markdown, and CSS. The toolchain currently supports linting and formatting, with active plans to also support bundling, compiling, minification, type checking, testing, and documentation generation. Rome aims to holistically enable all aspects of the modern web-focused development workflow.</p>
]]></summary>
        <author>
            <name>Paul Bouchon</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
        <category label="Rome" term="rome"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[An Introduction to Continuous Software Development]]></title>
        <id>https://www.sitepen.com/blog/an-introduction-to-continuous-software-development</id>
        <link href="https://www.sitepen.com/blog/an-introduction-to-continuous-software-development"/>
        <updated>2021-05-28T04:11:11.000Z</updated>
        <summary type="html"><![CDATA[<p>Improve customer satisfaction and maintain an edge over competitors by getting cutting-edge features into production faster and with fewer defects with Continuous Software Development techniques. Continuous Software Development is a term applied to a set of incremental strategies that aim to reduce the delay between development and deployment of new features. The methods are an evolution of agile development practices.</p>
]]></summary>
        <author>
            <name>Michael Van Sickle</name>
        </author>
        <category label="Continuous Integration" term="continuous-integration"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to Simplify Angular Unit Test Authoring]]></title>
        <id>https://www.sitepen.com/blog/simplify-angular-unit-test-authoring</id>
        <link href="https://www.sitepen.com/blog/simplify-angular-unit-test-authoring"/>
        <updated>2021-05-27T07:12:33.000Z</updated>
        <summary type="html"><![CDATA[<p>Are you working with Angular?&nbsp; Have you written hundreds of unit tests and do you feel like it is taking way more time to write the tests than it did to write the application code?&nbsp; Let&#8217;s talk about ways to speed up the authoring of those Angular unit tests and get back to doing the fun stuff. Angular components interact with users through the DOM and you want your automated tests to do the same.&nbsp; Here is an example of some test code that clicks a save button. See the Angular Components Library: More Than Just Material post for more information about how components work.</p>
]]></summary>
        <author>
            <name>Ed Hager</name>
        </author>
        <category label="Testing" term="testing"/>
        <category label="Angular" term="angular"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Hitchhikers Guide to NFTs]]></title>
        <id>https://www.sitepen.com/blog/hitchhikers-guide-to-nfts</id>
        <link href="https://www.sitepen.com/blog/hitchhikers-guide-to-nfts"/>
        <updated>2021-05-26T04:06:23.000Z</updated>
        <summary type="html"><![CDATA[<p>As the world warms up to the idea that cryptocurrencies are here to stay, many have started to think more deeply about the advantages these digital currencies offer over traditional money. Transactions are fast, security is guaranteed by design, and third-party verification is instantly and indefinitely possible. These characteristics of speed, security, and verifiability aren&#8217;t only useful for finance, and other sectors such as rare art and collectibles operate under the very same principles.</p>
]]></summary>
        <author>
            <name>Paul Bouchon</name>
        </author>
        <category label="Blockchain" term="blockchain"/>
        <category label="Ethereum" term="ethereum"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Nine Principles of Modern Data Architecture]]></title>
        <id>https://www.sitepen.com/blog/nine-principles-of-modern-data-architecture</id>
        <link href="https://www.sitepen.com/blog/nine-principles-of-modern-data-architecture"/>
        <updated>2021-05-24T10:29:10.000Z</updated>
        <summary type="html"><![CDATA[<p>It has been said that all businesses today are IT businesses. They just happen to make their money selling different things. While that statement may not be universally true, software and computer technology have become a central part of most companies&#8217; day-to-day operations.</p>
]]></summary>
        <author>
            <name>Michael Van Sickle</name>
        </author>
        <category label="Architecture" term="architecture"/>
        <category label="Modernization" term="modernization"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Size Matters: The Value of Performance Optimization]]></title>
        <id>https://www.sitepen.com/blog/size-matters-the-value-of-performance-optimization</id>
        <link href="https://www.sitepen.com/blog/size-matters-the-value-of-performance-optimization"/>
        <updated>2021-05-21T05:50:48.000Z</updated>
        <summary type="html"><![CDATA[<p>At SitePen, web application development is the core of what we do. We pride ourselves on our reputation for creating rich web apps that are highly responsive and reliable. The first chance that we have to demonstrate our skills is through our company website.</p>
]]></summary>
        <author>
            <name>Tom Dye</name>
        </author>
        <category label="Performance" term="performance"/>
        <category label="Dojo" term="dojo"/>
        <category label="Modernization" term="modernization"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Angular Components Library: More Than Just Material]]></title>
        <id>https://www.sitepen.com/blog/angular-components-library-more-than-just-material</id>
        <link href="https://www.sitepen.com/blog/angular-components-library-more-than-just-material"/>
        <updated>2021-05-20T06:24:40.000Z</updated>
        <summary type="html"><![CDATA[<p>The Angular Components library started its life as Angular Material, a set of Material Design components built for Angular by the Angular team. Released around the time of Angular 5, the Angular Material library consisted of some 30 material components. The team had spent nearly two years building the components and during that process had been on the lookout for common patterns.</p>
]]></summary>
        <author>
            <name>Dan Lautzenheiser</name>
        </author>
        <category label="HTML" term="html"/>
        <category label="TypeScript" term="typescript"/>
        <category label="Angular" term="angular"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to Choose A Web Development Partner]]></title>
        <id>https://www.sitepen.com/blog/how-to-choose-a-web-development-partner-2</id>
        <link href="https://www.sitepen.com/blog/how-to-choose-a-web-development-partner-2"/>
        <updated>2021-05-19T10:45:44.000Z</updated>
        <summary type="html"><![CDATA[<p>SitePen is a web development company focused on modernizing apps, tools, and teams for the Enterprise. Our claim to fame is our long-standing development team that through the years has created, developed, and supported the longest-lived enterprise platform for client-side web development, the Dojo Toolkit. Today, our platform-agnostic approach to web development enables our customers to make intelligent choices that propel their company&#8217;s web initiatives forward, allowing for unsurpassed performance, modularity, and stability.&nbsp; So let&#8217;s get right to it.</p>
]]></summary>
        <author>
            <name>Michael Van Sickle</name>
        </author>
        <category label="Web Development" term="web-development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Vetting a UI Component Library]]></title>
        <id>https://www.sitepen.com/blog/vetting-a-ui-component-library</id>
        <link href="https://www.sitepen.com/blog/vetting-a-ui-component-library"/>
        <updated>2021-05-10T05:44:37.000Z</updated>
        <summary type="html"><![CDATA[<p>When developing web applications, choosing a UI component library is one of the earliest decisions your team has to make. Beyond reducing the amount of functionality your team has to maintain, UI component libraries shield developers from the complexities involved in designing user interactions that are accessible and behave correctly across browsers and devices. Choosing the right component library is nearly as important as choosing the framework in which your application is built.</p>
]]></summary>
        <author>
            <name>Matthew Wistrand</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Accessibility" term="accessibility"/>
        <category label="css" term="css"/>
        <category label="HTML" term="html"/>
        <category label="UI Libraries" term="ui-libraries"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Considerations When Modernizing Legacy Applications]]></title>
        <id>https://www.sitepen.com/blog/considerations-when-modernizing-legacy-applications</id>
        <link href="https://www.sitepen.com/blog/considerations-when-modernizing-legacy-applications"/>
        <updated>2021-04-28T04:55:17.000Z</updated>
        <summary type="html"><![CDATA[<p>Software development and usage of software-driven products are rapidly evolving subject areas. Healthy competition means crafting applications becomes quicker and cheaper over time. The customers of such systems expect ever-more-sophisticated capabilities and user experiences out of a growing pool of competitors.</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Project Management" term="project-management"/>
        <category label="Modernization" term="modernization"/>
        <category label="Web Development" term="web-development"/>
        <category label="Architecture" term="architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Life Without Callbacks]]></title>
        <id>https://www.sitepen.com/blog/life-without-callbacks</id>
        <link href="https://www.sitepen.com/blog/life-without-callbacks"/>
        <updated>2021-04-22T04:44:52.000Z</updated>
        <summary type="html"><![CDATA[<p>Let&#8217;s face it. Reactive programming and the traditional web APIs are not friends. Event handlers, observers, dimensions, all of these things are meant to be used imperatively using callbacks.</p>
]]></summary>
        <author>
            <name>Rory Mulligan</name>
        </author>
        <category label="React" term="react"/>
        <category label="Web Components" term="web-components"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[5 Tips for “Spring Cleaning” Your Agile Practices]]></title>
        <id>https://www.sitepen.com/blog/5-tips-for-spring-cleaning-your-agile-practices</id>
        <link href="https://www.sitepen.com/blog/5-tips-for-spring-cleaning-your-agile-practices"/>
        <updated>2021-04-20T03:33:15.000Z</updated>
        <summary type="html"><![CDATA[<p>Maybe it’s the spring air and the budding trees. Maybe it’s the longer daylight hours. Maybe you watched too many home organization TV shows when it was too cold to go outside.</p>
]]></summary>
        <author>
            <name>Alyssa Jones</name>
        </author>
        <category label="Team Health" term="team-health"/>
        <category label="Agile" term="agile"/>
        <category label="Project Management" term="project-management"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Floating on Tailwind CSS]]></title>
        <id>https://www.sitepen.com/blog/floating-on-tailwind-css</id>
        <link href="https://www.sitepen.com/blog/floating-on-tailwind-css"/>
        <updated>2021-04-15T11:16:21.000Z</updated>
        <summary type="html"><![CDATA[<p>As modern reactive front ends have begun to converge on effective module patterns and universal approaches to common application paradigms, it&#8217;s not uncommon to see much of the variance between frontends as far as how they expose and implement their given style guide. The implementation and the delivery of application styles to an underlying component tree have become almost an art form, where each application attempts to solve the ever-present CSS problems of naming and reuse in the best, most effective way possible. Tailwind CSS provides a set of style guide-agnostic utility classes backed by opinionated, customizable variables, allowing developers to switch between projects using the same CSS toolset.</p>
]]></summary>
        <author>
            <name>Paul Bouchon</name>
        </author>
        <category label="css" term="css"/>
        <category label="Web Development" term="web-development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Add CarPlay to your React Native App]]></title>
        <id>https://www.sitepen.com/blog/add-carplay-to-your-react-native-app</id>
        <link href="https://www.sitepen.com/blog/add-carplay-to-your-react-native-app"/>
        <updated>2021-04-08T05:03:06.000Z</updated>
        <summary type="html"><![CDATA[<p>CarPlay is an Apple iOS car integration standard that allows you to display content from your iPhone onto your compatible car head unit and control your phone. Common uses for this include casting music from services such as Spotify or Apple Music or for trip navigation using a map application. As CarPlay advances with each iOS release, more and more app categories are added, opening the door for more third-party apps to be created and accessed on your car head unit.</p>
]]></summary>
        <author>
            <name>Tom Dye</name>
        </author>
        <category label="TypeScript" term="typescript"/>
        <category label="mobile" term="mobile"/>
        <category label="React Native" term="react-native"/>
        <category label="CarPlay" term="carplay"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Native: Crash Course for the Business-Side]]></title>
        <id>https://www.sitepen.com/blog/react-native-crash-course-for-the-business-side</id>
        <link href="https://www.sitepen.com/blog/react-native-crash-course-for-the-business-side"/>
        <updated>2021-03-31T06:48:36.000Z</updated>
        <summary type="html"><![CDATA[<p>Mobile development mostly deals with 2 platforms: iOS and Android. There are distinct ecosystems for both platforms &#8212; each has its own languages (Java and Kotlin for Android, Objective-C, and Swift for iOS), its own standard environment (Android Studio for Android, Xcode for iOS), its own app architectures, app stores, libraries, etc. The basic capabilities of each platform are similar, and the developer has to consider a lot of the same issues (screen size, obtaining permission for things like location data, etc.), but developing apps for each are distinct processes.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="mobile" term="mobile"/>
        <category label="React Native" term="react-native"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to Choose a Software Development Company]]></title>
        <id>https://www.sitepen.com/blog/how-to-choose-a-software-development-company</id>
        <link href="https://www.sitepen.com/blog/how-to-choose-a-software-development-company"/>
        <updated>2021-03-25T08:21:27.000Z</updated>
        <summary type="html"><![CDATA[<p>There are many articles and blog posts on the internet that attempt to advise readers on how to choose a software development company. Almost all of them discuss the traits and attributes that make one vendor superior to another. The difficulty with this approach is that a vendor&#8217;s ability is meaningless if it doesn&#8217;t align with an organization&#8217;s needs.</p>
]]></summary>
        <author>
            <name>Michael Van Sickle</name>
        </author>
        <category label="Web Development" term="web-development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Get Lean with Your MVP by Hacking Human Psychology]]></title>
        <id>https://www.sitepen.com/blog/get-lean-with-your-mvp-by-hacking-human-psychology</id>
        <link href="https://www.sitepen.com/blog/get-lean-with-your-mvp-by-hacking-human-psychology"/>
        <updated>2021-03-22T08:30:38.000Z</updated>
        <summary type="html"><![CDATA[<p>Most agile product teams have heard the concepts around using a Minimum Viable Product (MVP) to learn about what customers want, Lean Startup style, but the process of defining an MVP to fulfill those goals often proves to be easier said than done. Let it be reiterated that an MVP in software development is not needed when the market and/or user needs are well known, leading to much confusion and dilution of terminology commonality in which the enterprise world has used the term to simply refer to the first release of any product and the inevitable scoping such a release receives. One popular agilist widely said, “Oh, if it’s already viable, why even build further?” This is a simple misuse of the term! The Lean in Lean Startup refers to getting rid of what is waste relative to the immediate goals of a new product.</p>
]]></summary>
        <author>
            <name>Cherie Brown</name>
        </author>
        <category label="Leadership" term="leadership"/>
        <category label="Agile" term="agile"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Software takes more than “the right technology”]]></title>
        <id>https://www.sitepen.com/blog/software-takes-more-than-the-right-technology</id>
        <link href="https://www.sitepen.com/blog/software-takes-more-than-the-right-technology"/>
        <updated>2021-02-26T05:04:28.000Z</updated>
        <summary type="html"><![CDATA[<p>Carpenters have lots of tools to pick from. Drills, impact drivers, circular saws, and miter saws; each tool may be really good for a specific purpose and a great carpenter will know when to use each one. However, the best carpenter is not necessarily the one who uses the most tools, but the one who best knows how to use the tools he has to get the job done quickly and accurately.</p>
]]></summary>
        <author>
            <name>Anthony Ciccarello</name>
        </author>
        <category label="Software Architecture Design" term="software-architecture-design"/>
        <category label="Architecture" term="architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introduction to Machine Learning with JavaScript]]></title>
        <id>https://www.sitepen.com/blog/introduction-to-machine-learning-with-javascript</id>
        <link href="https://www.sitepen.com/blog/introduction-to-machine-learning-with-javascript"/>
        <updated>2020-10-19T08:37:14.000Z</updated>
        <summary type="html"><![CDATA[<p>Machine learning is a subset of AI that is concerned with algorithms that can improve through experience. Experience in this case generally translates to being fed lots of data. What’s more interesting than what machine learning is though, is what it can do.</p>
]]></summary>
        <author>
            <name>Bradley Maier</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Machine Learning" term="machine-learning"/>
        <category label="TensorFlow" term="tensorflow"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Agile Project Management: Best Practices and Methodologies]]></title>
        <id>https://www.sitepen.com/blog/agile-project-management-best-practices-and-methodologies</id>
        <link href="https://www.sitepen.com/blog/agile-project-management-best-practices-and-methodologies"/>
        <updated>2020-10-19T08:33:22.000Z</updated>
        <summary type="html"><![CDATA[<p>Want to get the most out of your dev management process?&nbsp; This article covers some of the best practices and methodologies SitePen uses to accomplish enterprise-level development goals.&nbsp;&nbsp;&nbsp; We’ll start with some basics on Agile methodology, then we’ll provide practical info about how our experience has culminated in a lean development process that turns ideas into milestones, and ultimately into product outcomes. We focus on instilling best practices throughout the software development lifecycle in all areas of the project to ensure that we not only leave behind a healthy codebase but also the healthy processes and teams to maintain and extend it for years to come. Agile principles are applicable in virtually all software development environments.</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Agile" term="agile"/>
        <category label="Project Management" term="project-management"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[What&#8217;s new in TypeScript 4.0?]]></title>
        <id>https://www.sitepen.com/blog/whats-new-in-typescript-4-0</id>
        <link href="https://www.sitepen.com/blog/whats-new-in-typescript-4-0"/>
        <updated>2020-09-29T07:37:04.000Z</updated>
        <summary type="html"><![CDATA[<p>The recent release of TypeScript 4.0 offers a smorgasbord of improvements including improvements to coding editor experience, build scenarios and support for variadic tuple types. Let&#8217;s take a closer look at some of these improvements a developer can make use of in this latest release. TypeScript 4.0 has made two different updates that allow for more flexibility in typing tuples.</p>
]]></summary>
        <author>
            <name>Sam Menza</name>
        </author>
        <category label="TypeScript" term="typescript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Architecture Spotlight: Event Sourcing – Part Two]]></title>
        <id>https://www.sitepen.com/blog/architecture-spotlight-event-sourcing-part-two</id>
        <link href="https://www.sitepen.com/blog/architecture-spotlight-event-sourcing-part-two"/>
        <updated>2020-08-06T08:00:00.000Z</updated>
        <summary type="html"><![CDATA[<p>In the previous architecture spotlight entry, we discussed Event Sourcing and illustrated the concept with a simple banking account example. We laid out many of its pros and cons to help readers decide if the pattern would be useful to them. In this post, we will be expanding the example and showing a working code implementation using a popular event streaming technology, Apache Kafka.</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Pattern" term="pattern"/>
        <category label="Web Development" term="web-development"/>
        <category label="Event Sourcing" term="event-sourcing"/>
        <category label="Architecture" term="architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[What is a 2nd Generation Framework?]]></title>
        <id>https://www.sitepen.com/blog/what-is-a-2nd-generation-framework</id>
        <link href="https://www.sitepen.com/blog/what-is-a-2nd-generation-framework"/>
        <updated>2020-08-03T09:43:49.000Z</updated>
        <summary type="html"><![CDATA[<p>An article on 2nd Generation JavaScript Frameworks &amp; Libraries: beyond Angular, React, and Vue! recaps Geertjan Wielenga’s talk on the evolution of JavaScript and the influence of the enterprise in recent years. Wielenga spoke of the pioneers of JavaScript frameworks and libraries including Dojo (1.x), Mootools, Extjs, jQuery, and YUI which were among the first libraries to address the needs of the developer. Piecemeal solutions built on top of these to solve increasingly common problems and were followed by the need for building tools to aid in simplifying the complexity of deploying large web applications.&nbsp; Current LandscapeJumping to present day, Weilenga highlights the dominant front-end frameworks, Angular, Vue &amp; React, categorizing them as “first-generation frameworks” and identifying their common (and serious) issues: Large amounts of technological churn added to the ever-evolving ecosystem around them that developers have to keep up with.&nbsp;Incompatible custom stacks.&nbsp;&nbsp;Developer specialization; developers identifying by framework instead of language.</p>
]]></summary>
        <author>
            <name>Carrie Rice</name>
        </author>
        <category label="Frameworks" term="frameworks"/>
        <category label="Dojo Toolkit" term="dojotoolkit"/>
        <category label="Dojo" term="dojo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Increasing Value in Your Software Development Lifecycle]]></title>
        <id>https://www.sitepen.com/blog/increasing-value-in-your-software-development-lifecycle</id>
        <link href="https://www.sitepen.com/blog/increasing-value-in-your-software-development-lifecycle"/>
        <updated>2020-07-23T04:40:04.000Z</updated>
        <summary type="html"><![CDATA[<p>Today, many software projects rely on some form of iterative software development lifecycle (SDLC) to incrementally deliver features to their users. A feature is identified, analyzed, designed, scoped, implemented, tested, and ultimately shipped to users &#8211; and this cycle is repeated for all features throughout a project’s lifetime. These types of methodologies are especially useful when developing web applications, where evolution happens at a rapid pace and time to market is often paramount.</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Agile" term="agile"/>
        <category label="Scrum" term="scrum"/>
        <category label="SDLC" term="sdlc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Writing Tests that Work]]></title>
        <id>https://www.sitepen.com/blog/writing-tests-that-work</id>
        <link href="https://www.sitepen.com/blog/writing-tests-that-work"/>
        <updated>2020-06-30T10:18:49.000Z</updated>
        <summary type="html"><![CDATA[<p>Your team realizes that testing is valuable. Your team creates tests for already completed features. The result was encouraging and your team even found a few bugs hiding in the application.</p>
]]></summary>
        <author>
            <name>Anthony Ciccarello</name>
        </author>
        <category label="Testing" term="testing"/>
        <category label="Web Development" term="web-development"/>
        <category label="Automated Testing" term="automated-testing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why Automated Testing Matters]]></title>
        <id>https://www.sitepen.com/blog/why-automated-testing-matters</id>
        <link href="https://www.sitepen.com/blog/why-automated-testing-matters"/>
        <updated>2020-06-30T10:07:05.000Z</updated>
        <summary type="html"><![CDATA[<p>Your software development team released an MVP application into production. The application only had a few features and the codebase is far from perfect, but there are big plans for the future! Your team presses on, adding features and your user base continues to grow. After a few months, cracks begin to surface.</p>
]]></summary>
        <author>
            <name>Anthony Ciccarello</name>
        </author>
        <category label="Testing" term="testing"/>
        <category label="Web Development" term="web-development"/>
        <category label="Automated Testing" term="automated-testing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Smart Contracts: A Tutorial]]></title>
        <id>https://www.sitepen.com/blog/smart-contracts-a-tutorial</id>
        <link href="https://www.sitepen.com/blog/smart-contracts-a-tutorial"/>
        <updated>2020-06-17T10:26:46.000Z</updated>
        <summary type="html"><![CDATA[<p>Now that we&#8217;ve demystified smart contracts and better understand what they are and how they work, let&#8217;s build our own contract on top of the Ethereum blockchain. Because smart contracts are computer programs at their core, many of the concepts that we&#8217;ll use to build a basic contract will seem familiar. Major advancements in developer tooling and infrastructure in the Ethereum ecosystem allow us to effectively develop a smart contract completely in-browser, so let&#8217;s get started.</p>
]]></summary>
        <author>
            <name>Paul Bouchon</name>
        </author>
        <category label="Ethereum" term="ethereum"/>
        <category label="Bitcoin" term="bitcoin"/>
        <category label="Solidity" term="solidity"/>
        <category label="Blockchain" term="blockchain"/>
        <category label="Cryptocurrency" term="cryptocurrency"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Demystifying Smart Contracts]]></title>
        <id>https://www.sitepen.com/blog/demystifying-smart-contracts</id>
        <link href="https://www.sitepen.com/blog/demystifying-smart-contracts"/>
        <updated>2020-06-17T10:25:10.000Z</updated>
        <summary type="html"><![CDATA[<p>Smart contracts are often described as a transformative new technology that borders on magic, able to remove third-parties and monetary risk alike from business deals using the power of the blockchain. The autonomous execution and enforcement of an agreement may sound like something out of a Harry Potter novel, but the maturation of blockchain-based programming techniques have made smart contracts more of a reality than ever.&nbsp; Many types of business transactions today require intermediate parties to facilitate the exchange of goods or services. These intermediaries are necessary in business deals in order to verify that no single party violates the terms set forth in the contract governing an exchange, especially in deals involving a high degree of mistrust.</p>
]]></summary>
        <author>
            <name>Paul Bouchon</name>
        </author>
        <category label="Blockchain" term="blockchain"/>
        <category label="Cryptocurrency" term="cryptocurrency"/>
        <category label="Ethereum" term="ethereum"/>
        <category label="Bitcoin" term="bitcoin"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[An Even More Modern Terminal-Based Development Environment]]></title>
        <id>https://www.sitepen.com/blog/an-even-more-modern-terminal-based-development-environment</id>
        <link href="https://www.sitepen.com/blog/an-even-more-modern-terminal-based-development-environment"/>
        <updated>2020-06-15T05:00:45.000Z</updated>
        <summary type="html"><![CDATA[<p>It&#8217;s been a year since I last talked about my development environment. Many things remain the same: I&#8217;m using neovim, zsh, and tmux. However, I have made a few changes to improve usability and make my day-to-day work feel faster.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="Terminal" term="terminal"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Importance of Good Software Architecture]]></title>
        <id>https://www.sitepen.com/blog/the-importance-of-good-software-architecture</id>
        <link href="https://www.sitepen.com/blog/the-importance-of-good-software-architecture"/>
        <updated>2020-06-10T05:48:02.000Z</updated>
        <summary type="html"><![CDATA[<p>Software architecture is the analysis, thought and design considerations that form the foundational scaffolding for a successful software system. If you write software for work or as a hobby, whether you know it or not, you’re already dealing with software architecture and the processes of making architectural decisions within your applications. You might even work for a company where software architecture is a defined, hired-for skill set with its own career development track.</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Pattern" term="pattern"/>
        <category label="Web Development" term="web-development"/>
        <category label="Architecture" term="architecture"/>
        <category label="Software Architecture Design" term="software-architecture-design"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progressively Adopting TypeScript in a Dojo Toolkit Application]]></title>
        <id>https://www.sitepen.com/blog/progressively-adopting-typescript-in-a-dojo-toolkit-application</id>
        <link href="https://www.sitepen.com/blog/progressively-adopting-typescript-in-a-dojo-toolkit-application"/>
        <updated>2020-06-03T13:38:44.000Z</updated>
        <summary type="html"><![CDATA[<p>TypeScript has become a mainstay of modern web development libraries. Consuming functions and widgets written by a third party can be error-prone without some type of guidance. Introducing static typing to the interfaces doesn’t just reduce misuse, it has added benefits including intelligent code completion.</p>
]]></summary>
        <author>
            <name>Rory Mulligan</name>
        </author>
        <category label="TypeScript" term="typescript"/>
        <category label="Dojo Toolkit" term="dojotoolkit"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[A Smooth Transition: Designing for the Development Handoff]]></title>
        <id>https://www.sitepen.com/blog/a-smooth-transition-designing-for-the-development-handoff</id>
        <link href="https://www.sitepen.com/blog/a-smooth-transition-designing-for-the-development-handoff"/>
        <updated>2020-06-03T11:35:17.000Z</updated>
        <summary type="html"><![CDATA[<p>In an olympic sprint relay, four runners operate as a team to sprint a total of four hundred meters. In order to compete at a record-setting level, an athlete needs to be capable of running one hundred meters in less than ten seconds. The training and dedication it takes to get to this level of performance is nothing short of staggering.</p>
]]></summary>
        <author>
            <name>Ryan Clayton</name>
        </author>
        <category label="EnterpriseJS" term="enterprisejs"/>
        <category label="UI Design" term="ui-design"/>
        <category label="Design" term="design"/>
        <category label="Software Development Life Cycle" term="software-development-life-cycle"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Business Analysis: One of the Overlooked Areas of Successful Software Development]]></title>
        <id>https://www.sitepen.com/blog/business-analysis-one-of-the-overlooked-areas-of-successful-software-development</id>
        <link href="https://www.sitepen.com/blog/business-analysis-one-of-the-overlooked-areas-of-successful-software-development"/>
        <updated>2020-06-02T10:04:54.000Z</updated>
        <summary type="html"><![CDATA[<p>As a career business analyst, I’ve lost count of the number of times I’ve asked this question. More often than not, stakeholders are ready to discuss solutions before dissecting the problem itself. The result? A half-baked “solution” that may or may not address the key problem, and likely also creates new problems.</p>
]]></summary>
        <author>
            <name>Dorothy Srun</name>
        </author>
        <category label="Business Analysis" term="business-analysis"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Disciplined Engineering – Part 3: Refining Your Engineering Process]]></title>
        <id>https://www.sitepen.com/blog/disciplined-engineering-part-3-refining-your-engineering-process</id>
        <link href="https://www.sitepen.com/blog/disciplined-engineering-part-3-refining-your-engineering-process"/>
        <updated>2020-05-21T10:39:50.000Z</updated>
        <summary type="html"><![CDATA[<p>This is part 3 of the Disciplined Engineering series.  It is for teams that have an established engineering process with confidence around the quality of their application. This article will help improve your engineering game by identifying the common patterns that will further improve your team’s focus on quality. If you don’t have an established culture of engineering at your company, we recommend reading Part 1: Building an Engineering Process.</p>
]]></summary>
        <author>
            <name>Paul Shannon</name>
        </author>
        <category label="Employee Onboarding" term="employee-onboarding"/>
        <category label="Testing" term="testing"/>
        <category label="Accountability" term="accountability"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Disciplined Engineering – Part 2: Creating Code Confidence]]></title>
        <id>https://www.sitepen.com/blog/disciplined-engineering-part-2-creating-code-confidence</id>
        <link href="https://www.sitepen.com/blog/disciplined-engineering-part-2-creating-code-confidence"/>
        <updated>2020-05-21T10:39:13.000Z</updated>
        <summary type="html"><![CDATA[<p>This is part 2 of the Disciplined Engineering series. It focuses on improving the confidence of the code produced by your team. If you haven’t already, we recommend reading Part 1: Building an Engineering Process as a prerequisite for these practices.</p>
]]></summary>
        <author>
            <name>Paul Shannon</name>
        </author>
        <category label="Continuous Integration" term="continuous-integration"/>
        <category label="TypeScript" term="typescript"/>
        <category label="Testing" term="testing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Disciplined Engineering – Part 1: Building an Engineering Process]]></title>
        <id>https://www.sitepen.com/blog/disciplined-engineering-part-1-building-an-engineering-process</id>
        <link href="https://www.sitepen.com/blog/disciplined-engineering-part-1-building-an-engineering-process"/>
        <updated>2020-05-21T10:38:31.000Z</updated>
        <summary type="html"><![CDATA[<p>This is part 1 of the Disciplined Engineering series.&nbsp; It is for teams that want to establish a culture of engineering excellence for their organization. For teams that already have an established process, we recommend reading&nbsp;Part 2: Creating Code Confidence. If you’re looking to further improve upon your process, please check out&nbsp;Part 3: Refining Your Engineering Process.</p>
]]></summary>
        <author>
            <name>Paul Shannon</name>
        </author>
        <category label="Accountability" term="accountability"/>
        <category label="Development Life Cycle" term="development-life-cycle"/>
        <category label="Agile" term="agile"/>
        <category label="Project Management" term="project-management"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Snapshot Testing: Benefits and Drawbacks]]></title>
        <id>https://www.sitepen.com/blog/snapshot-testing-benefits-and-drawbacks</id>
        <link href="https://www.sitepen.com/blog/snapshot-testing-benefits-and-drawbacks"/>
        <updated>2020-05-19T09:15:14.000Z</updated>
        <summary type="html"><![CDATA[<p>Snapshot testing has become very popular for front end-development over the last few years. The term has almost become synonymous with Jest and React, but it can be used to test more than just components. This article provides a brief overview of what snapshot testing is, what it isn&#8217;t, and how it might be helpful for your project.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="React" term="react"/>
        <category label="Intern" term="intern"/>
        <category label="Testing" term="testing"/>
        <category label="Jest" term="jest"/>
        <category label="Enterprise Apps Development" term="enterprise-apps-development"/>
        <category label="Snapshot" term="snapshot"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Sensible Improvements in TypeScript 3.9]]></title>
        <id>https://www.sitepen.com/blog/sensible-improvements-in-typescript-3-9</id>
        <link href="https://www.sitepen.com/blog/sensible-improvements-in-typescript-3-9"/>
        <updated>2020-05-15T13:18:06.000Z</updated>
        <summary type="html"><![CDATA[<p>The recent TypeScript 3.9 release primarily focuses on performance and stability, but it does include some language updates that are worth a closer look. Continuing its quest to save you from yourself, TypeScript 3.9 expands on the uncalled function checks that were introduced in version 3.7. These checks report when a function is used within an if condition without being called, like: const isValid() => someGlobalValue > 10; let answer: string; if (isValid) { // error because isValid isn&#8217;t called answer = &#8216;yes&#8217;; } else { answer = &#8216;no&#8217;; } The latest version brings this functionality to ternary operators as well: const answer1 = isValid ? &#8216;yes&#8217; : &#8216;no&#8217;; // error const answer2 = isValid() ? &#8216;yes&#8217; : &#8216;no&#8217;; // no error This type of functionality is a perfect example of the language going above and beyond to warn developers about potential problems with their code, especially when those problems aren’t syntax or type-related.</p>
]]></summary>
        <author>
            <name>Nick Nisi</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Performance Testing with k6]]></title>
        <id>https://www.sitepen.com/blog/performance-testing-with-k6</id>
        <link href="https://www.sitepen.com/blog/performance-testing-with-k6"/>
        <updated>2020-05-13T08:35:23.000Z</updated>
        <summary type="html"><![CDATA[<p>There’s an old adage in the software industry &#8211; premature optimization is the root of all evil. A corollary to this should be &#8211; no optimization is just as bad as premature optimization. It is often true that effort spent optimizing a system before features are properly implemented, correct and stable is effort wasted, but even a fully-implemented system can offer a terrible user experience if performance is never considered.</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Testing" term="testing"/>
        <category label="Web Development" term="web-development"/>
        <category label="k6" term="k6"/>
        <category label="Performance" term="performance"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Accessibility Inspectors: A Basic Guide]]></title>
        <id>https://www.sitepen.com/blog/accessibility-inspectors-a-basic-guide</id>
        <link href="https://www.sitepen.com/blog/accessibility-inspectors-a-basic-guide"/>
        <updated>2020-05-06T10:10:02.000Z</updated>
        <summary type="html"><![CDATA[<p>As accessibility-minded developers working on accessibility-minded teams, we strive to design and build inclusive applications that yield a pleasant experience for all users. However, despite our best efforts we may make mistakes and implement features in a sub-optimal way, or worse, discover that some users cannot use those features at all. Fortunately, in recent years browsers have introduced tools that help debug some of these issues.</p>
]]></summary>
        <author>
            <name>Matthew Wistrand</name>
        </author>
        <category label="Accessibility" term="accessibility"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Virtual Reality in 2020]]></title>
        <id>https://www.sitepen.com/blog/virtual-reality-in-2020</id>
        <link href="https://www.sitepen.com/blog/virtual-reality-in-2020"/>
        <updated>2020-05-05T11:08:40.000Z</updated>
        <summary type="html"><![CDATA[<p>Virtual reality (VR) is one of the most interesting emerging technologies for the web in 2020. Recently at HalfStack Phoenix I shared insights on VR, WebVR, the web, and what makes VR a lasting technology that will change the way we interact with information over the coming decade. To better understand the adoption trajectory of virtual reality, consider a variation on Domestication Theory that describes three stages of progression for successful technologies: elation &#8211; the promise of the technology is limitlesslove/hate &#8211; the technology is the best solution for a number of niche marketstransparency &#8211; the technology gets adopted and is routine When modern VR headsets like the Oculus Rift and HTC Vive were demoed to the public the reaction was amazement.</p>
]]></summary>
        <author>
            <name>Paul Shannon</name>
        </author>
        <category label="VR" term="vr"/>
        <category label="Web VR" term="web-vr"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Progressively Adopting TypeScript in an Application]]></title>
        <id>https://www.sitepen.com/blog/progressively-adopting-typescript-in-an-application</id>
        <link href="https://www.sitepen.com/blog/progressively-adopting-typescript-in-an-application"/>
        <updated>2020-04-30T07:00:43.000Z</updated>
        <summary type="html"><![CDATA[<p>SitePen is a huge advocate for TypeScript and the benefits of having well-typed code. TypeScript is especially powerful when used by medium and large teams that want to find ways to increase their overall confidence in their code. One of the questions we get asked often is how can we migrate a codebase that is currently written in JavaScript to TypeScript.</p>
]]></summary>
        <author>
            <name>Paul Shannon</name>
        </author>
        <category label="TypeScript" term="typescript"/>
        <category label="Web Development" term="web-development"/>
        <category label="Babel" term="babel"/>
        <category label="WebPack" term="webpack"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Getting Started with React Native]]></title>
        <id>https://www.sitepen.com/blog/getting-started-with-react-native</id>
        <link href="https://www.sitepen.com/blog/getting-started-with-react-native"/>
        <updated>2020-04-06T12:49:38.000Z</updated>
        <summary type="html"><![CDATA[<p>React Native is a JavaScript framework for writing hybrid native mobile applications for both iOS and Android platforms. React Native uses the same JSX and React development approach you would take for developing for the browser, but applications get built as native applications in Objective-C (for iOS) or Java (for Android) by the React Native tooling. The key difference between React Native and other JS mobile frameworks such as Ionic or Cordova is that the result is a hybrid native application rather than a hybrid web application utilizing web views.</p>
]]></summary>
        <author>
            <name>Tom Dye</name>
        </author>
        <category label="TypeScript" term="typescript"/>
        <category label="React" term="react"/>
        <category label="Frameworks" term="frameworks"/>
        <category label="React Native" term="react-native"/>
        <category label="JavaScript" term="javascript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Architecture Spotlight: Event Sourcing]]></title>
        <id>https://www.sitepen.com/blog/architecture-spotlight-event-sourcing</id>
        <link href="https://www.sitepen.com/blog/architecture-spotlight-event-sourcing"/>
        <updated>2020-04-02T05:16:47.000Z</updated>
        <summary type="html"><![CDATA[<p>Event sourcing is a powerful architectural pattern that records all changes made to an application’s state, in the sequence in which the changes were originally applied. This sequence serves as both the system of record where current state can be sourced from, as well as an audit log of everything that happened within the application over its lifetime. Event sourcing promotes decentralized change handling and state querying, meaning the pattern scales well and is a good fit for many types of systems that already deal with event processing or are looking to gain some of the many benefits offered by such a design.</p>
]]></summary>
        <author>
            <name>Stuart Bingë</name>
        </author>
        <category label="Pattern" term="pattern"/>
        <category label="Web Development" term="web-development"/>
        <category label="Event Sourcing" term="event-sourcing"/>
        <category label="Architecture" term="architecture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New TypeScript Features that Improve the Developer Experience]]></title>
        <id>https://www.sitepen.com/blog/new-typescript-features-that-improve-the-developer-experience</id>
        <link href="https://www.sitepen.com/blog/new-typescript-features-that-improve-the-developer-experience"/>
        <updated>2020-03-18T05:24:59.000Z</updated>
        <summary type="html"><![CDATA[<p>In many ways, TypeScript is more like a powerful linting and documentation tool to author better JavaScript, rather than a separate programming language. One significant benefit of TypeScript is its deliberate support for some of the latest ECMAScript language features. Updating to new versions of TypeScript provides support for new language features but in a safe, backwards-compatible manner.</p>
]]></summary>
        <author>
            <name>Nick Nisi</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[What Makes Intern Different]]></title>
        <id>https://www.sitepen.com/blog/what-makes-intern-different</id>
        <link href="https://www.sitepen.com/blog/what-makes-intern-different"/>
        <updated>2020-03-10T05:13:26.000Z</updated>
        <summary type="html"><![CDATA[<p>Intern has always taken a different path in the pursuit of flexible automated web app testing. In the early days, Intern leveraged AMD modules when most other testing frameworks were not modular or only supported CommonJS modules, allowing Intern to support modular code in any environment. Intern was also one of the first tools to leverage Istanbul to support code coverage analysis, and its flexible architecture supports integration into a variety of CI/CD environments.</p>
]]></summary>
        <author>
            <name>Jason Cheatham</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Intern" term="intern"/>
        <category label="Testing" term="testing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why did we start TSConf?]]></title>
        <id>https://www.sitepen.com/blog/learn-typescript-best-practices-at-tsconf</id>
        <link href="https://www.sitepen.com/blog/learn-typescript-best-practices-at-tsconf"/>
        <updated>2020-03-06T11:34:56.000Z</updated>
        <summary type="html"><![CDATA[<p>The ubiquity of JavaScript is undeniable; it’s the universal language of the web — a position that no other languages hold. JavaScript is flexible, able to adapt and grow as the web grows. But that flexibility is often the downfall of JavaScript; without a disciplined team working diligently to keep the codebase maintainable, JavaScript can fall apart.</p>
]]></summary>
        <author>
            <name>Nick Nisi</name>
        </author>
        <category label="Conferences" term="conferences"/>
        <category label="TSConf" term="tsconf"/>
        <category label="JavaScript" term="javascript"/>
        <category label="TypeScript" term="typescript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[HalfStack Conference &#8211; Phoenix, January 2020]]></title>
        <id>https://www.sitepen.com/blog/halfstack-conference-phoenix-january-2020</id>
        <link href="https://www.sitepen.com/blog/halfstack-conference-phoenix-january-2020"/>
        <updated>2020-03-03T05:33:03.000Z</updated>
        <summary type="html"><![CDATA[<p>HalfStack is a series of tech conferences focused on half of the web development stack &#8211; specifically, the part you interface with. It lives up to its claims of being &#8220;an authentic, high value experience for attendees and sponsors focused on UI-centric JavaScript and web development.&#8221; Friday, January 17, 2020 Alamo Drafthouse, Chandler, Arizona The morning got off to a great start with comfortable seating and fine dining at the Alamo Drafthouse in Chandler. First up was Alex Blom talking about &#8220;Hacking loops and programmatic patterns into age of empires.&#8221; Despite having nothing to do with JavaScript or front-end development, this was a captivating and relevant talk.</p>
]]></summary>
        <author>
            <name>Mangala SSS Khalsa</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Conferences" term="conferences"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Exploring the Network Information API]]></title>
        <id>https://www.sitepen.com/blog/exploring-the-network-information-api</id>
        <link href="https://www.sitepen.com/blog/exploring-the-network-information-api"/>
        <updated>2019-11-18T07:31:13.000Z</updated>
        <summary type="html"><![CDATA[<p>In 2007, we were invited to speak at the Apple WWDC event. At the time we didn&#8217;t know why we were invited. We later learned that because there was initially no native SDK, developers were advised to use JavaScript, HTML, and CSS to create iPhone apps, and were encouraged to attend our session.</p>
]]></summary>
        <author>
            <name>Dylan Schiemann</name>
        </author>
        <category label="EnterpriseJS" term="enterprisejs"/>
        <category label="JavaScript" term="javascript"/>
        <category label="mobile" term="mobile"/>
        <category label="Pattern" term="pattern"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to Pick a Web Mapping Library for your App]]></title>
        <id>https://www.sitepen.com/blog/how-to-pick-a-web-mapping-library-for-your-app</id>
        <link href="https://www.sitepen.com/blog/how-to-pick-a-web-mapping-library-for-your-app"/>
        <updated>2019-11-07T07:04:01.000Z</updated>
        <summary type="html"><![CDATA[<p>With the boom of location-based technologies like mobile location services and the Geolocation API in the browser, we have seen the growth of mapping and location inside of applications. Alongside this we have seen numerous mapping libraries appear for the web, allowing developers to build map-based experiences into their apps. These libraries abstract away the complexity of things like geographic coordinate systems, ordering map tiles correctly, panning, zooming, and various other behaviors.</p>
]]></summary>
        <author>
            <name>James Milner</name>
        </author>
        <category label="EnterpriseJS" term="enterprisejs"/>
        <category label="JavaScript" term="javascript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[JSConf US 2019: Pushing JavaScript Beyond the Browser]]></title>
        <id>https://www.sitepen.com/blog/jsconf-us-2019-pushing-javascript-beyond-the-browser</id>
        <link href="https://www.sitepen.com/blog/jsconf-us-2019-pushing-javascript-beyond-the-browser"/>
        <updated>2019-09-30T09:21:13.000Z</updated>
        <summary type="html"><![CDATA[<p>As a first-time JSConf attendee, I happily embraced the welcoming culture and fun atmosphere &#8211; surfing, anyone? But I was even more impacted by the presentations centered around JavaScript expanding beyond the browser, using JavaScript to help others, and the focus on community. Of course I’m an avid JavaScript engineer and believer (why else would I be at JSConf), but I left feeling awed and inspired after seeing how progressive and impactful the JavaScript ecosystem can be. JavaScript Helps You Build Amazing Things The realm of what can be done with JavaScript is rapidly expanding and JSConf provided some exciting examples of what is on the horizon.</p>
]]></summary>
        <author>
            <name>Anthony Ciccarello</name>
        </author>
        <category label="JavaScript" term="javascript"/>
        <category label="Conferences" term="conferences"/>
        <category label="JSConf 2019" term="jsconf-2019"/>
        <category label="Open Source" term="open-source"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Next Generation Virtual Scrolling]]></title>
        <id>https://www.sitepen.com/blog/next-generation-virtual-scrolling</id>
        <link href="https://www.sitepen.com/blog/next-generation-virtual-scrolling"/>
        <updated>2019-09-25T05:55:51.000Z</updated>
        <summary type="html"><![CDATA[<p>Rendering large data sets in the browser while optimizing for performance and accessibility is a complex problem. The current approach to handling long lists of data is using an infinite scroll pattern to incrementally load and render data just before the data enters the view. This approach comes with trade-offs that we will look at in detail as well as new features and standards that are coming down the pipe that will improve virtual scrolling in the future.</p>
]]></summary>
        <author>
            <name>Dylan Schiemann</name>
        </author>
        <category label="Performance" term="performance"/>
        <category label="EnterpriseJS" term="enterprisejs"/>
        <category label="JavaScript" term="javascript"/>
        <category label="HTML5" term="html5"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Getting Started with Electron, Typescript, React and Webpack]]></title>
        <id>https://www.sitepen.com/blog/getting-started-with-electron-typescript-react-and-webpack</id>
        <link href="https://www.sitepen.com/blog/getting-started-with-electron-typescript-react-and-webpack"/>
        <updated>2019-09-17T05:55:46.000Z</updated>
        <summary type="html"><![CDATA[<p>If you need to build a desktop application today, Electron is an increasingly common choice. It is cross-platform and is built using the same web technologies that you probably already know. We&#8217;re long-time users of Electron at SitePen and have previously talked about Setting up Electron with Dojo.</p>
]]></summary>
        <author>
            <name>Justin Ellison</name>
        </author>
        <category label="Node.js" term="node-js-2"/>
        <category label="React" term="react"/>
        <category label="EnterpriseJS" term="enterprisejs"/>
        <category label="JavaScript" term="javascript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using Progressive Enhancement to Design for Accessibility]]></title>
        <id>https://www.sitepen.com/blog/using-progressive-enhancement-to-design-for-accessibility</id>
        <link href="https://www.sitepen.com/blog/using-progressive-enhancement-to-design-for-accessibility"/>
        <updated>2019-08-05T07:44:55.000Z</updated>
        <summary type="html"><![CDATA[<p>The web is for everyone. That includes web apps built on web architecture. If you haven&#8217;t heard the word &#8220;accessibility&#8221; mentioned in the last couple of years, you may have been living under a rock.</p>
]]></summary>
        <author>
            <name>Scott Jensen</name>
        </author>
        <category label="Accessibility" term="accessibility"/>
        <category label="UI Design" term="ui-design"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using WebAssembly with Web Workers]]></title>
        <id>https://www.sitepen.com/blog/using-webassembly-with-web-workers</id>
        <link href="https://www.sitepen.com/blog/using-webassembly-with-web-workers"/>
        <updated>2019-07-22T08:35:19.000Z</updated>
        <summary type="html"><![CDATA[<p>When building web apps, writing processing intensive code can be a challenge. One issue is getting predictable running times across browsers and JavaScript engines that optimise different code paths differently, as well as producing code that doesn&#8217;t interfere with user experience. Since 2010 we&#8217;ve had a standardised way to manage interactivity for long, non-DOM related tasks.</p>
]]></summary>
        <author>
            <name>James Milner</name>
        </author>
        <category label="EnterpriseJS" term="enterprisejs"/>
        <category label="JavaScript" term="javascript"/>
        <category label="Performance" term="performance"/>
        <category label="WebAssembly" term="webassembly"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Deploying a Dojo App with Docker]]></title>
        <id>https://www.sitepen.com/blog/deploying-a-dojo-app-with-docker</id>
        <link href="https://www.sitepen.com/blog/deploying-a-dojo-app-with-docker"/>
        <updated>2019-07-16T07:44:28.000Z</updated>
        <summary type="html"><![CDATA[<p>So you&#8217;ve built an amazing app using Dojo and now you are ready to go live. After a bit of research, you learn that traditional deployments are challenging! Luckily, the days of FTPing files are long gone, and we can rely on Docker for fast, reliable deployments. Using Docker will not only document your build process, but it will also give you a Docker image you can easily deploy to production or run locally.</p>
]]></summary>
        <author>
            <name>Rory Mulligan</name>
        </author>
        <category label="Performance" term="performance"/>
        <category label="Node.js" term="node-js-2"/>
        <category label="Dojo" term="dojo"/>
        <category label="Web Infrastructure" term="web-infrastructure"/>
        <category label="EnterpriseJS" term="enterprisejs"/>
        <category label="JavaScript" term="javascript"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Outside the Box &#8211; Outsourcing Your UX Design]]></title>
        <id>https://www.sitepen.com/blog/outside-the-box-outsourcing-your-ux-design</id>
        <link href="https://www.sitepen.com/blog/outside-the-box-outsourcing-your-ux-design"/>
        <updated>2019-06-27T05:49:20.000Z</updated>
        <summary type="html"><![CDATA[<p>Outsourcing is such a dirty word. Unbearable customer service, subpar manufacturing, and corporate downsizing all come to mind when you hear it. But outsourcing has gotten a bad rap.</p>
]]></summary>
        <author>
            <name>Scott Jensen</name>
        </author>
        <category label="UI Design" term="ui-design"/>
        <category label="Talent Gap" term="talent-gap"/>
        <category label="Leadership" term="leadership"/>
    </entry>
</feed>