<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~files/atom-premium.xsl"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedpress="https://feed.press/xmlns" xmlns:media="http://search.yahoo.com/mrss/" xmlns:podcast="https://podcastindex.org/namespace/1.0">
  <feedpress:locale>en</feedpress:locale>
  <link rel="hub" href="https://feedpress.superfeedr.com/"/>
  <logo>https://static.feedpress.com/logo/telerik-blogs-people-6185388110628.jpg</logo>
  <title type="text">Telerik Blogs | People</title>
  <subtitle type="text">The official blog of Progress Telerik - expert articles and tutorials for developers.</subtitle>
  <id>uuid:8773e822-51d4-4202-9c00-e67ef2cf3518;id=5188</id>
  <updated>2026-04-12T06:35:52Z</updated>
  <link rel="alternate" href="https://www.telerik.com/"/>
  <link rel="self" type="application/atom+xml" href="https://feeds.telerik.com/blogs/people"/>
  <entry>
    <id>urn:uuid:8adaf186-7275-4dfe-8fbd-0e63950051ac</id>
    <title type="text">Build Accessible Components with Angular Aria</title>
    <summary type="text">A simple way to add accessibility to your Angular app is with Angular Aria, which gives you production-ready, WCAG-compliant directives. Take a look.</summary>
    <published>2026-04-01T19:25:26Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Dany Paredes </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17311878/build-accessible-components-angular-aria"/>
    <content type="text"><![CDATA[<p><span class="featured">A simple way to add accessibility to your Angular app is with Angular Aria, which gives you production-ready, WCAG-compliant directives.</span></p><p>Building accessible components is one of those things we know we <em>should</em> do, but often skip because it feels overwhelming. We need to <a target="_blank" href="https://www.telerik.com/blogs/improving-navigation-accessibility-4-quick-tips">read about accessibility tips and tricks</a> and a lot of documentation.</p><p>You start with a simple dropdown menu, knowing you need to handle keyboard navigation, ARIA attributes, focus management and screen reader support. Before you know it, your &ldquo;simple&rdquo; component has 200 lines of accessibility code you&rsquo;re not even sure is correct. (Unless you&rsquo;re using the Progress Kendo UI for <a target="_blank" href="https://www.telerik.com/kendo-angular-ui">Angular library</a>, which has accessibility baked in for you. )</p><p>What if I told you there&rsquo;s a way to get the accessibility magic you need, regardless of component library, with full control over your styling with the magic of <a target="_blank" href="https://angular.dev/guide/aria/overview">Angular Aria</a>?</p><p>But what is Angular Aria? Let&rsquo;s make a small intro.</p><h2 id="what-is-angular-aria">What Is Angular Aria?</h2><p>Think of Angular Aria as a collection of accessibility superpowers for your components, but instead of manually implementing keyboard navigation, ARIA attributes and focus management, you import a directive, add it to your HTML and, boom, your component is accessible.</p><p>The Angular team built these directives following the <a target="_blank" href="https://www.w3.org/WAI/ARIA/apg/">W3C Accessibility Guidelines</a>, so you don&rsquo;t have to become an accessibility expert to build compliant components.</p><h2 id="hold-on-what-about-angular-material">Hold On, What About Angular Material?</h2><p>Great question! If you&rsquo;ve been using Angular for a while, you&rsquo;re probably thinking: <em>&ldquo;We already have <a target="_blank" href="https://material.angular.io/">Angular Material</a>. Why do we need another library?&rdquo;</em></p><p>Here are the key differences:</p><p>Angular Material gives you complete, prestyled components. They look great out of the box, but they come with Material Design opinions baked in. If you want a button that doesn&rsquo;t look like a Material button, you&rsquo;re going to fight the framework.</p><p>Angular Aria gives you headless directives&mdash;just the accessibility logic, zero styling. You get all the keyboard navigation, ARIA attributes and screen reader support, but you control every pixel of how it looks.</p><p>Think of it this way:</p><ul><li>Angular Material: It is plug and play, looks good, works immediately, but everyone has the same result. If you were building a physical doorway to your business, it would look like all other businesses, just with your business name on the sign.</li><li>Angular Aria: This tool is more like the ramp to your front door, enabling anyone to access the business entrance, while allowing you to choose the awning, the window display and the door color.</li></ul><p>So when should you use each one? We&rsquo;ll dive deeper into that later in the article, but here&rsquo;s the quick answer:</p><ul><li>Use <strong>Angular Material</strong> when you need to ship fast and Material Design works for you.</li><li>Use <strong>Angular Aria</strong> when you have custom design requirements and need full control.</li></ul><p>Remember, accessibility isn&rsquo;t optional anymore. It&rsquo;s a <a target="_blank" href="https://www.telerik.com/blogs/what-does-european-accessibility-act-mean-developers">legal requirement</a> in many countries, and, more importantly, it&rsquo;s the right thing to do.</p><p>But implementing accessibility correctly is <strong>hard</strong>. You need to know:</p><ul><li>Which ARIA attributes to use (and when)</li><li>How keyboard navigation should work for each pattern</li><li>How to manage focus properly</li><li>How screen readers interpret your markup</li></ul><p>Angular Aria handles this complexity for you. You focus on the HTML structure, CSS styling and business logic, and Angular Aria takes care of accessibility.</p><p>But, as always, the best way to learn is by building something. Let&rsquo;s do it!</p><h2 id="set-up-the-project">Set Up the Project</h2><p>First, create a new Angular application. In your terminal, run the following command (be sure to have Node.js installed).</p><pre class=" language-bash"><code class="prism  language-bash">npx @angular/cli@latest new angular-aria-demo
</code></pre><p>When CLI prompts stylesheet format, pick CSS.</p><pre class=" language-bash"><code class="prism  language-bash">  - **Which stylesheet <span class="token function">format</span> would you like to use?** &rarr; CSS
</code></pre><p>Now, navigate to your project and add Angular Aria:</p><pre class=" language-bash"><code class="prism  language-bash"><span class="token function">cd</span> angular-aria-demo
<span class="token function">npm</span> <span class="token function">install</span> @angular/aria
</code></pre><p>That&rsquo;s it. We now have a fresh Angular project with Angular Aria installed. Let&rsquo;s build something accessible!</p><h2 id="building-an-accessible-toolbar">Building an Accessible Toolbar</h2><p>Let&rsquo;s build a text formatting toolbar, the kind you see in rich text editors. This is a perfect example because it looks simple but has surprising accessibility complexity.</p><p>Using the CLI, generate a new component editor-toolbar:</p><pre class=" language-bash"><code class="prism  language-bash">ng generate c components/editor-toolbar
</code></pre><p>Perfect! Open the component with your editor, and import <code>Toolbar</code>, <code>ToolbarWidget</code> and <code>ToolbarWidgetGroup</code> directives provided by <code>@angular/aria/toolbar</code>.</p><pre class=" language-typescript"><code class="prism  language-typescript">  <span class="token keyword">import</span> <span class="token punctuation">{</span> Component <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@angular/core'</span><span class="token punctuation">;</span>
  <span class="token keyword">import</span> <span class="token punctuation">{</span> Toolbar<span class="token punctuation">,</span> ToolbarWidget<span class="token punctuation">,</span> ToolbarWidgetGroup <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@angular/aria/toolbar'</span><span class="token punctuation">;</span>
  
  @<span class="token function">Component</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
    selector<span class="token punctuation">:</span> <span class="token string">'app-editor-toolbar'</span><span class="token punctuation">,</span>
    templateUrl<span class="token punctuation">:</span> <span class="token string">'./editor-toolbar.component.html'</span><span class="token punctuation">,</span>
    styleUrl<span class="token punctuation">:</span> <span class="token string">'./editor-toolbar.component.css'</span><span class="token punctuation">,</span>
    imports<span class="token punctuation">:</span> <span class="token punctuation">[</span>Toolbar<span class="token punctuation">,</span> ToolbarWidget<span class="token punctuation">,</span> ToolbarWidgetGroup<span class="token punctuation">]</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span>
  <span class="token keyword">export</span> <span class="token keyword">class</span> <span class="token class-name">EditorToolbarComponent</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
</code></pre><p>Now it&rsquo;s time to build the HTML structure. We create a div container with the directive <code>[ngToolbar]</code>, which works as the main container. We also need <code>ToolbarWidget</code> to use with individual buttons and <code>ToolbarWidgetGroup</code> for groups of related buttons.</p><p>In the following HTML, we use every directive with divs and button elements. Copy it and paste into the <code>editor-toolbar.html</code>.</p><pre class=" language-html"><code class="prism  language-html">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">ngToolbar</span> <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Text Formatting Tools<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>group<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">ngToolbarWidget</span>
           <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>undo<span class="token punctuation">"</span></span>
           <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span>
           <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>undo<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
     Undo
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">ngToolbarWidget</span>
           <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>redo<span class="token punctuation">"</span></span>
           <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span>
           <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>redo<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
     Redo
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
 <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>

 <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>separator<span class="token punctuation">"</span></span> <span class="token attr-name">role</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>separator<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>

 <span class="token comment">&lt;!-- Text formatting group --&gt;</span>
 <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>group<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">ngToolbarWidget</span>
           <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>bold<span class="token punctuation">"</span></span>
           <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span>
           <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>bold<span class="token punctuation">"</span></span>
           <span class="token attr-name">#bold</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ngToolbarWidget<span class="token punctuation">"</span></span>
           <span class="token attr-name">[aria-pressed]</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>bold.selected()<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
     Bold
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">ngToolbarWidget</span>
           <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>italic<span class="token punctuation">"</span></span>
           <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span>
           <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>italic<span class="token punctuation">"</span></span>
           <span class="token attr-name">#italic</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ngToolbarWidget<span class="token punctuation">"</span></span>
           <span class="token attr-name">[aria-pressed]</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>italic.selected()<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
     Italic
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
 <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>

 <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>separator<span class="token punctuation">"</span></span> <span class="token attr-name">role</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>separator<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>

 <span class="token comment">&lt;!-- Alignment group (radio buttons) --&gt;</span>
 <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">ngToolbarWidgetGroup</span>
      <span class="token attr-name">role</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>radiogroup<span class="token punctuation">"</span></span>
      <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>group<span class="token punctuation">"</span></span>
      <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>Text alignment options<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">ngToolbarWidget</span>
           <span class="token attr-name">role</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>radio<span class="token punctuation">"</span></span>
           <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span>
           <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>align left<span class="token punctuation">"</span></span>
           <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>align left<span class="token punctuation">"</span></span>
           <span class="token attr-name">#leftAlign</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ngToolbarWidget<span class="token punctuation">"</span></span>
           <span class="token attr-name">[aria-checked]</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>leftAlign.selected()<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
     Left
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">ngToolbarWidget</span>
           <span class="token attr-name">role</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>radio<span class="token punctuation">"</span></span>
           <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span>
           <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>align center<span class="token punctuation">"</span></span>
           <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>align center<span class="token punctuation">"</span></span>
           <span class="token attr-name">#centerAlign</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ngToolbarWidget<span class="token punctuation">"</span></span>
           <span class="token attr-name">[aria-checked]</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>centerAlign.selected()<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
     Center
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">ngToolbarWidget</span>
           <span class="token attr-name">role</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>radio<span class="token punctuation">"</span></span>
           <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>button<span class="token punctuation">"</span></span>
           <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>align right<span class="token punctuation">"</span></span>
           <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>align right<span class="token punctuation">"</span></span>
           <span class="token attr-name">#rightAlign</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>ngToolbarWidget<span class="token punctuation">"</span></span>
           <span class="token attr-name">[aria-checked]</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>rightAlign.selected()<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
     Right
   <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span>
 <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
</code></pre><p>The final step is adding some CSS styles to make it look nice. Open the editor-toolbar.css and paste the following style:</p><pre class=" language-css"><code class="prism  language-css">  <span class="token selector"><span class="token attribute">[ngToolbar]</span> </span><span class="token punctuation">{</span>
 <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
 <span class="token property">gap</span><span class="token punctuation">:</span> <span class="token number">8</span>px<span class="token punctuation">;</span>
 <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">8</span>px<span class="token punctuation">;</span>
 <span class="token property">background</span><span class="token punctuation">:</span> <span class="token hexcode">#f5f5f5</span><span class="token punctuation">;</span>
 <span class="token property">border-radius</span><span class="token punctuation">:</span> <span class="token number">4</span>px<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.group</span> </span><span class="token punctuation">{</span>
 <span class="token property">display</span><span class="token punctuation">:</span> flex<span class="token punctuation">;</span>
 <span class="token property">gap</span><span class="token punctuation">:</span> <span class="token number">4</span>px<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector"><span class="token class">.separator</span> </span><span class="token punctuation">{</span>
 <span class="token property">width</span><span class="token punctuation">:</span> <span class="token number">1</span>px<span class="token punctuation">;</span>
 <span class="token property">background</span><span class="token punctuation">:</span> <span class="token hexcode">#ddd</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector">button </span><span class="token punctuation">{</span>
 <span class="token property">padding</span><span class="token punctuation">:</span> <span class="token number">8</span>px <span class="token number">12</span>px<span class="token punctuation">;</span>
 <span class="token property">border</span><span class="token punctuation">:</span> <span class="token number">1</span>px solid <span class="token hexcode">#ddd</span><span class="token punctuation">;</span>
 <span class="token property">background</span><span class="token punctuation">:</span> white<span class="token punctuation">;</span>
 <span class="token property">border-radius</span><span class="token punctuation">:</span> <span class="token number">4</span>px<span class="token punctuation">;</span>
 <span class="token property">cursor</span><span class="token punctuation">:</span> pointer<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector">button<span class="token attribute">[aria-pressed="true"]</span>,
button<span class="token attribute">[aria-checked="true"]</span> </span><span class="token punctuation">{</span>
 <span class="token property">background</span><span class="token punctuation">:</span> <span class="token hexcode">#007acc</span><span class="token punctuation">;</span>
 <span class="token property">color</span><span class="token punctuation">:</span> white<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre><p>Perfect, we just added HTML, CSS and Angular Aria directives. To test it, open the app.html and add <code>&lt;app-editor-toolbar&gt;&lt;/app-editor-toolbar&gt;</code>, save changes and run your app.</p><pre class=" language-bash"><code class="prism  language-bash">ng serve
Initial chunk files <span class="token operator">|</span> Names         <span class="token operator">|</span> Raw size
main.js             <span class="token operator">|</span> main          <span class="token operator">|</span> 10.50 kB <span class="token operator">|</span> 
styles.css          <span class="token operator">|</span> styles        <span class="token operator">|</span> 95 bytes <span class="token operator">|</span> 

                    <span class="token operator">|</span> Initial total <span class="token operator">|</span> 10.59 kB

Application bundle generation complete. <span class="token punctuation">[</span>0.641 seconds<span class="token punctuation">]</span> - 2026-01-25T10:16:33.843Z

Watch mode enabled. Watching <span class="token keyword">for</span> <span class="token function">file</span> changes<span class="token punctuation">..</span>.
NOTE: Raw <span class="token function">file</span> sizes <span class="token keyword">do</span> not reflect development server per-request transformations.
  ➜  Local:   http://localhost:4200/
  ➜  press h + enter to show <span class="token function">help</span>
</code></pre><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2026/2026-03/keyboard-navigating-buttons.gif?sfvrsn=b37b8cd8_8" alt="User navigates buttons with keyboard arrow keys" /></p><p>Try to use your toolbar with your keyboard. You&rsquo;ll find it works, and we didn&rsquo;t have to write any code for keyboard navigation logic (like: Arrow keys, Home, End), focus management, ARIA role attributes, screen reader announcements or selection state management. All of that complexity? Gone.</p><p>The <code>ngToolbar</code>, <code>ngToolbarWidget</code> and <code>ngToolbarWidgetGroup</code> directives handle all of that automatically.</p><p>We now have a fully accessible toolbar that works with keyboard navigation and screen readers, and we only wrote the HTML structure and CSS.</p><p>Angular Aria provides directives for the most common interactive patterns, we can get components for search and selection (like Autocomplete, Listbox and Select), navigation and actions (Menu, Menubar and Toolbar like we just built), and content organization (Accordion, Tabs, Tree and Grid). Every directive comes with complete documentation, working examples and API references. You can see the <a target="_blank" href="https://angular.dev/guide/aria/overview#whats-included">full list of available components</a> in the official Angular Aria documentation.</p><h2 id="but-im-a-fan-of-angular-material">But I&rsquo;m a Fan of Angular Material</h2><p>Yes, I understand Angular Material has a long relationship with Angular devs. You can continue using Angular Material when you:</p><ol><li><strong>Need to ship fast</strong> &ndash; You&rsquo;re building an MVP or internal tool and don&rsquo;t want to spend time on custom styling.</li><li><strong>Like Material Design</strong> &ndash; You&rsquo;re OK with the Google Material Design aesthetic.</li><li><strong>Have limited design resources</strong> &ndash; Your team doesn&rsquo;t have dedicated designers.</li></ol><p>Remember, <a target="_blank" href="https://material.angular.io/">Angular Material</a> is amazing, but it comes with opinions about how things should look.</p><p>If you try to heavily customize Material components, you&rsquo;ll spend more time fighting the framework than building features. I&rsquo;ve been there&mdash;overriding Material styles with <code>::ng-deep</code> and <code>!important</code> until the CSS becomes unmaintainable.</p><p>And don&rsquo;t even get me started on theming. Creating a custom theme for Angular Material is&hellip; let&rsquo;s just say &ldquo;special.&rdquo; It&rsquo;s doable, but it&rsquo;s tricky and requires deep knowledge of Sass and Material&rsquo;s theming system. (If you&rsquo;re curious about the complexity, I wrote about it in <a target="_blank" href="https://www.telerik.com/blogs/theme-ui-frameworks-angular-part-2-custom-theme-angular-material">Theme UI Frameworks in Angular: Part 2 - Custom Theme for Angular Material</a>.)</p><p>Angular Aria solves this by giving you <strong>zero styles</strong>. You start with a blank canvas and build exactly what you need.</p><p>Remember for simple cases, native elements are already accessible when you use <code>&lt;button&gt;</code> for buttons, <code>&lt;input type="radio"&gt;</code> for radio buttons or <code>&lt;select&gt;</code> for simple dropdowns. But Angular Aria gives you a third option: <strong>headless accessible components</strong> that you can style however you want, we can meet accessibility requirements, maintain full design control and avoid reinventing the wheel.</p><h2 id="recap">Recap</h2><p>We learned that accessibility doesn&rsquo;t have to be overwhelming. Angular Aria gives you production-ready, WCAG-compliant directives that handle the complex parts.</p><p>We provide the HTML structure and CSS and Angular Aria provides the accessibility without pain!</p><h3 id="but-what-about-kendo-ui">But What About Kendo UI?</h3><p>Maybe you want to ship faster (really fast) and have complex scenarios with datalist, charts, schedulers and complex UI patterns. If you read this article and are thinking: <em>&ldquo;This is great, but I still have to write all the HTML and CSS myself. Why not just use a complete component library?&rdquo;</em> you&rsquo;re asking the right question.</p><p>Here&rsquo;s when Progress <strong>Kendo UI for Angular</strong> makes more sense than Angular Aria or Angular Material:</p><p><strong>Use Kendo UI when you want:</strong></p><ol><li><strong>Everything out of the box</strong> &ndash; Prebuilt components with professional styling, themes and accessibility already done</li><li><strong>Advanced features included</strong> &ndash; Things like data grids with sorting/filtering, charts, schedulers and complex UI patterns</li><li><strong>Consistent design system</strong> &ndash; A cohesive look across all components without writing custom CSS</li><li><strong>Enterprise-grade support</strong> &ndash; Professional support, regular updates and guaranteed compatibility</li><li><strong>Speed PLUS customization</strong> &ndash; You need to ship fast <em>and</em> need options to customize (you&rsquo;ll have five fully built theme options plus the ability to tweak those or create your own theme)</li></ol><p>There&rsquo;s no &ldquo;wrong&rdquo; choice&mdash;just different tools for different jobs.</p><p>If you&rsquo;re building internal tools or you like the Kendo UI design system, Kendo UI saves you weeks of work, and, honestly? I can build complex stuff (data grids, schedulers, charts) in minutes, making Kendo UI the right answer for me.</p><p>Plus, you can use the Kendo UI for <a target="_blank" href="https://www.telerik.com/kendo-angular-ui/components/ai-tools/ai-assistant/getting-started">Angular AI Coding Assistant</a>, an MCP server that automatically scaffolds components for AI agents. Instead of manually writing Kendo UI components, your AI assistant can do it for you. </p><blockquote><p>Want to learn more? Check out my article: <a target="_blank" href="https://www.telerik.com/blogs/angular-kendo-ui-mcp-making-agents-work">
 Angular and Kendo UI MCP: Making Agents Work for You</a></p></blockquote><ul><li><a target="_blank" href="https://github.com/danywalls/angular-aria-example">Source code</a></li><li><a target="_blank" href="https://angular.dev/guide/aria/overview">Angular Aria Documentation</a></li></ul><img src="https://feeds.telerik.com/link/23073/17311878.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:00e9e3f9-cf6a-48a8-a01a-b7931edc1005</id>
    <title type="text">What Really Matters for Dev Students</title>
    <summary type="text">Get some practical advice for beginners based on a senior developer’s 30 years of experience. These fundamentals can help root you in a career ready for change.</summary>
    <published>2026-03-18T15:48:48Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Jefferson S. Motta </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17301579/what-really-matters-dev-students"/>
    <content type="text"><![CDATA[<p><span class="featured">Get some practical advice for beginners based on a senior developer&rsquo;s 30 years of experience. These fundamentals can help root you in a career ready for change.</span></p><p>In this post, I share my perspective from 30 years of building systems, from MRP II in 1994 to AI-powered ecommerce solutions today. I&rsquo;ve learned lessons that are worth their weight in gold. I see too many students focusing on things that don&rsquo;t generate the expected impact, so I&rsquo;ll be direct about what really matters.</p><h2 id="fundamentals-are-your-superpower">Fundamentals Are Your Superpower</h2><p>Frameworks come and go. I&rsquo;ve seen so many emerge and disappear that I&rsquo;ve lost count. But do you know what remains relevant? Understanding data structures, algorithms and the fundamental principles of programming.</p><p>When I started my programming career, it was with Clipper. Then VB6, JavaScript and finally C#. Each transition became easier because the fundamentals were solid. Today, I see people jumping straight into React or Angular without truly understanding JavaScript. When the framework changes (and it will change), those people get lost.</p><p>Before diving into the next trendy framework, make sure you understand data structures, algorithmic complexity, design patterns and how your language actually works. This will save you when you need to decode that impossible bug at 2 a.m.</p><h2 id="portfolio-over-certificates">Portfolio over Certificates</h2><p>In 1997, I started building <a target="_blank" href="http://Advocati.NET">Advocati.NET</a>, a complete management system for law firms with integrated CRM that evolved from VB6/Access to C#/ASP.NET/SQL Server. That project opened more doors for me than any certificate ever could.</p><p><strong>Build real things.</strong> It doesn&rsquo;t need to be revolutionary. A well-made CRUD with tests, CI/CD and clean code already puts you ahead of 80% of candidates. Even better: Solve a real problem, even if it&rsquo;s small.</p><p>My advice: Take a problem that you or someone close to you has. Build an end-to-end solution. Real deployment, real database, real users (even if it&rsquo;s just five people). This is worth infinitely more than 10 tutorials following the letter.</p><h2 id="specialization-with-flexibility">Specialization with Flexibility</h2><p>I&rsquo;m a .NET/C# specialist, but throughout my career I&rsquo;ve also worked with JavaScript, TypeScript, Angular, React, and now I&rsquo;m deep into AI. This flexibility allowed me to survive multiple waves of technological change.</p><p>Don&rsquo;t lock yourself into a single stack. But don&rsquo;t be superficial in everything either. Find your main axis and, from there, expand gradually.</p><p>Master one core area (backend, frontend, mobile) but maintain active curiosity. Learn enough about other areas to communicate well with your colleagues. This will make you nearly irreplaceable.</p><h2 id="areas-with-real-longevity">Areas with Real Longevity</h2><p>If you want long-term stability, some areas are safer bets:</p><p><strong>Backend and Infrastructure:</strong> There will always be a need for people who understand what happens &ldquo;under the hood.&rdquo; I&rsquo;ve worked with Windows Server since 2003, Azure, DevOps, CI/CD. These skills never became obsolete; they just evolved and became more complex.</p><p><strong>Security:</strong> The more digital the world becomes, the more critical security is. I took a digital security course in 2019 and still use those concepts daily.</p><p><strong>Data and AI:</strong> I developed AI solutions back in 2000 (yes, AI isn&rsquo;t new), now supercharged with generative AI. Today, with LLMs and the current boom, those who truly understand data and can integrate AI practically have a market for decades.</p><p><strong>DevOps/SRE:</strong> The bridge between dev and operations has never been so valuable. Experience with Azure DevOps, GitHub Actions and CI/CD makes you essential.</p><h2 id="the-myth-of-the-10x-developer">The Myth of the 10x Developer</h2><p>Forget this story if you&rsquo;ve heard it, of the 10x developer. In my experience, I&rsquo;ve never met a &ldquo;lone genius&rdquo; who delivered 10x more. I&rsquo;ve met many consistent developers who, over time, generated a massive impact by writing code that others could maintain, sharing knowledge, elevating the entire team&rsquo;s level and avoiding unnecessary technical debt.</p><p>Consistency and collaboration beat genius every day of the week.</p><h2 id="ai-changes-everything-but-not-how-you-think">AI Changes Everything (But Not How You Think)</h2><p>I&rsquo;m currently developing an automated platform for creating SaaS platforms, already thinking about APIs being consumed by other AIs. AI won&rsquo;t replace developers, but it will replace developers who don&rsquo;t know how to use AI.</p><p>Use tools like GitHub Copilot, ChatGPT and Claude to accelerate your work. But understand what they&rsquo;re doing. Review the code. Test it. <strong>AI is a multiplier, a simple tool, not a substitute for understanding.</strong></p><h2 id="conclusion">Conclusion</h2><ul><li>Learn solid fundamentals. </li><li>Build real projects. </li><li>Choose a specialization but maintain flexibility. </li><li>Invest in areas with longevity. </li><li>Develop soft skills. </li><li>Be consistent, not &ldquo;10x.&rdquo; </li><li>And use AI as a tool, not a crutch.</li></ul><p>I&rsquo;ve been on this journey for 30 years, and I&rsquo;m still excited. If you choose this path for the right reasons, a love for solving problems, constant curiosity and the desire to build things, you&rsquo;ll have an incredible career. Obviously, good compensation matters, but it shouldn&rsquo;t be your main motivation.</p><p>And you? What fundamentals have saved you in your career so far?</p><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">How to Identify Technologies Worth Exploring</h4></div><div class="col-8"><p class="u-fs16 u-mb0"><a target="_blank" href="https://www.telerik.com https://www.telerik.com/blogs/how-to-identify-technologies-worth-exploring">Read Jefferson&rsquo;s perspective</a> on one of the biggest challenges we face as technology professionals today: separating what really matters from the constant noise that bombards us every day.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17301579.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:5b2a3c79-efa5-4bc4-b24c-1cd5b9ea13e5</id>
    <title type="text">Accessibility (A11y) in .NET MAUI: What It Is and How to Implement It</title>
    <summary type="text">It’s time to add accessibility into the early stages of your .NET MAUI development cycle. The POUR principles can help.</summary>
    <published>2026-03-16T18:26:50Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Leomaris Reyes </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17300342/accessibility-net-maui-what-how-to-implement"/>
    <content type="text"><![CDATA[<p><span class="featured">It&rsquo;s time to add accessibility into the early stages of your .NET MAUI development cycle. The POUR principles can help.</span></p><p>Developing applications that can be used by everyone is a goal that any app should keep in mind. When I say &ldquo;for everyone,&rdquo; I mean that our applications should be able to communicate a clear and understandable purpose, so that people with or without disabilities can use them without issues. In other words, it&rsquo;s not just about &ldquo;making it work,&rdquo; nor about limiting it to a single way of use (such as only being understandable if you can read the buttons).</p><p>You&rsquo;ve probably heard the term <strong>A11y,</strong> and maybe you&rsquo;ve stopped to think&hellip; What does it mean?  A11y refers to the <strong>accessibility</strong> of our applications. While it&rsquo;s much more common to hear this term in the web space, mobile applications should also take it into account to offer a better product.</p><p>In this article, you&rsquo;ll learn more about accessibility, some guidelines you can follow to apply it correctly in <strong>.NET MAUI</strong>, the aspects you should start paying attention to and why <strong>A11y is not an extra</strong>, but a fundamental part of the quality of a well-built application.</p><h2 id="let’s-talk-more-about-a11y">Let&rsquo;s Talk More About A11y</h2><p><strong>A11y</strong> is an abbreviated form of the word <strong>accessibility</strong>, and its goal is to allow people with or without visual, auditory, motor or cognitive disabilities to use your apps. A11Y is a type of abbreviation very common in technology, and it is known as a <strong>numeronym.</strong></p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2026/2026-03/01_accessibilitysample.png?sfvrsn=2429b72_2" alt="A c c e s s i b i l i t y : Diagram showing why ‘Accessibility’ is abbreviated as A11y, with 11 letters between A and Y." /></p><p>It works as follows:</p><ul><li><strong>A:</strong> is the first letter of the word.</li><li><strong>11:</strong> is the number of characters that come after the first letter and before the last one. In Accessibility, specifically in &ldquo;ccessibilit,&rdquo; there are 11 letters.</li><li><strong>Y:</strong> is the last letter of the word.</li></ul><p>That&rsquo;s why it is abbreviated as: <strong>A11y.</strong> This method makes it much more convenient to write long terms in a faster way and helps standardize lengthy terminology.</p><h2 id="how-can-we-apply-a11y-in-our-apps">How Can We Apply A11y in Our Apps?</h2><p>To implement this in our applications, there are accessibility guidelines such as <strong>WCAG,</strong> which instruct us on how to adapt the tools that mobile devices already provide so they can work together with our apps.</p><p>The <strong><a target="_blank" href="https://www.w3.org/TR/WCAG22/">Web Content Accessibility Guidelines (WCAG)</a></strong> are a set of international guidelines created by the <strong>World Wide Web Consortium (W3C).</strong> Although web is part of their name, I always recommend applying these practices to all types of applications, including mobile. Our users will thank us for it.</p><p>In fact, the official documentation states the following:</p><blockquote><p>&ldquo;These guidelines address accessibility of web content on any kind of device (including desktops, laptops, kiosks, and mobile devices).&rdquo;</p></blockquote><p>The WCAG are built on <strong>four fundamental principles,</strong> known as <strong>POUR.</strong> WCAG defines what an application must comply with to be accessible, while POUR helps us understand how to think about accessibility from a development perspective.</p><p>These four criteria that make up <strong>POUR</strong> are:</p><ul><li><strong>P</strong>erceivable</li><li><strong>O</strong>perable</li><li><strong>U</strong>nderstandable</li><li><strong>R</strong>obust</li></ul><p>Let&rsquo;s take a closer look at <strong>POUR</strong>&mdash;what each principle means and some examples of how we can translate them into our <strong>.NET MAUI</strong> applications:</p><h2 id="perceivable">Perceivable</h2><p>This principle indicates that all the information in the app (including text and UI components) must be <strong>perceivable by the user</strong>, regardless of how they interact with the device. In other words, our app should not be based solely on visual information.</p><p>This is especially important for users who:</p><ul><li>Use screen readers such as <strong>TalkBack</strong> or <strong>VoiceOver</strong></li><li>Have low vision or use larger text sizes</li></ul><p>In <strong>.NET MAUI</strong>, we have <strong>SemanticProperties</strong>, which help us a lot with this aspect.</p><p> Semantic properties are the Microsoft-recommended approach in .NET MAUI to provide accessibility values in applications. This allows us to add a description to our visual elements so that they can be read by the screen reader.</p><p>Additionally, I recommend exploring <strong><a target="_blank" href="https://www.telerik.com/blogs/exploring-semanticorderview-net-maui-community-toolkit">SemanticOrderView</a></strong>. While the individual reading of each visual element is important, being able to provide the user with a <strong>reading order</strong> so that this reading is coherent greatly enhances a good user experience. For this, we can use <strong>SemanticOrderView</strong> from the <strong>.NET MAUI Community Toolkit</strong>.</p><p>Let&rsquo;s explore some examples of implementing the Percievable principle in .NET MAUI:</p><h3 id="alternative-text-for-images-and-icons">Alternative Text for Images and Icons</h3><p>Images and icons are very common in mobile apps, but for a screen reader, an image without a description is <strong>100% invisible</strong>. That&rsquo;s why it&rsquo;s recommended to tell the screen reader that there is something there and <strong>what it should read</strong>.</p><p>In the following example, you can see the <strong>warning.png</strong> image used in the UI. When navigating the app with VoiceOver or TalkBack, this image will be announced as &ldquo;Warning icon.&rdquo; For this reason, I recommend being as specific as possible when defining its description.</p><pre class=" language-xml"><code class="prism  language-xml">&lt;Image Source="warning.png"
 SemanticProperties.Description="Warning icon" /&gt;
</code></pre><h3 id="what-about-decorative-images">What About Decorative Images?</h3><p>Not all images provide information. In these cases, we can <strong>remove them from the accessibility tree</strong> so the screen reader ignores them (meaning it won&rsquo;t read them):</p><pre class=" language-xml"><code class="prism  language-xml">&lt;Image Source="divider.png"
 AutomationProperties.IsInAccessibleTree="False" /&gt;
</code></pre><p>This helps keep the experience cleaner and prevents the screen reader from reading unnecessary elements.</p><h3 id="headings">Headings</h3><p>Screen readers don&rsquo;t just &ldquo;read in order&rdquo; and stop there; they also allow users to <strong>navigate by sections</strong>. For this reason, it&rsquo;s important to mark titles or main sections as <strong>semantic headings</strong>.</p><pre class=" language-xml"><code class="prism  language-xml">&lt;Label Text="Payment Settings" 
 FontSize="24" 
 SemanticProperties.HeadingLevel="Level1" /&gt;
</code></pre><p>This way, the screen reader recognizes this element as a heading and makes navigation within the screen much easier.</p><h3 id="supporting-scalable-text">Supporting Scalable Text</h3><p>In addition to screen readers, there is also a significant number of users with low vision. You may have noticed that some people use very large text on their phones; that&rsquo;s probably why.</p><p>As developers, we can contribute to making our app more accessible by allowing it to adapt to the text size users feel most comfortable with.</p><p>For this, in .NET MAUI we have <strong>FontAutoScalingEnabled</strong>, a property that allows the text in our app to automatically scale according to the system preferences.</p><pre class=" language-xml"><code class="prism  language-xml">&lt;Label Text="Payment Settings" 
 FontSize="24" 
 FontAutoScalingEnabled="True" /&gt;
</code></pre><p>With this, if the user increases the text size from the device settings, the Label will scale accordingly, improving readability and aligning with the <strong>Perceivable</strong> principle.</p><h2 id="operable">Operable</h2><p>The Operable principle states that users must be able to interact with the app without difficulty, regardless of the way they use the device.</p><p>In other words, not all users interact in the same way. Some use screen readers, others use a keyboard or assisted navigation. For this reason, the app should not rely solely on complex gestures or interactions that do not provide a clear alternative.</p><p>In mobile applications, this principle basically translates into:</p><ul><li>Easy-to-tap controls</li><li>Clear and predictable navigation</li><li>Avoiding interactions that require extreme precision</li></ul><p>In .NET MAUI, many of these best practices can be applied directly using the components we already work with. Let&rsquo;s see NET MAUI some Operable examples we can apply:</p><h3 id="appropriate-size-for-interactive-elements">Appropriate Size for Interactive Elements</h3><p>A very common problem is having <strong>icons or buttons that are too small</strong>, which limits interaction and can make the app difficult&mdash;or even impossible&mdash;to use for some users.</p><p>For this reason, it is recommended to respect minimum sizes for interactive elements:</p><ul><li><p><strong>iOS:</strong> minimum <strong>44 &times; 44 pt</strong><br />This recommendation comes from Apple&rsquo;s Human Interface Guidelines, where this minimum size is established for interactive elements such as buttons or tappable icons.</p></li><li><p><strong>Android</strong>: minimum <strong>48 &times; 48 dp</strong><br />On Android, this recommendation comes from the Android Accessibility Guidelines and Material Design.</p></li></ul><p>In .NET MAUI, we can apply this easily, for example:</p><pre class=" language-xml"><code class="prism  language-xml">&lt;Button Text="Continue" 
 HeightRequest="48" 
 Padding="16,12" /&gt;
</code></pre><p>Or for icon ImageButton:</p><pre class=" language-xml"><code class="prism  language-xml">&lt;ImageButton Source="close.png" 
 WidthRequest="48" 
 HeightRequest="48" 
 Padding="12" 
 SemanticProperties.Description="Close" /&gt;
</code></pre><h2 id="understandable">Understandable</h2><p>This principle states that the information and interactions within our app must be <strong>easy to understand</strong>.</p><p>Why is this important?</p><ul><li>Not all users have the same technical level.</li><li>Some may have cognitive difficulties.</li><li>Others are simply using the app for the first time.</li></ul><p>In mobile applications, this principle mainly translates into:</p><ul><li>Clear and direct text</li><li>Consistent navigation</li><li>Predictable actions</li><li>Error messages that explain what happened and what to do next</li></ul><p>Some examples of Understandable in .NET MAUI:</p><h3 id="clear-language-in-text-and-labels">Clear Language in Text and Labels</h3><p>Avoid ambiguous or overly technical texts (I&rsquo;ve literally seen &ldquo;state error&rdquo; in apps &hellip; that should not happen), especially in buttons and important messages.</p><p>For example, for a save button, use text that clearly describes the action:</p><pre class=" language-xml"><code class="prism  language-xml">&lt;Button Text="Save changes" /&gt;
</code></pre><p>Once the save action is executed, if an error occurs, <strong>don&rsquo;t leave the user guessing or hanging</strong>. Tell them exactly what happened.</p><p>❌ Saving changes failed</p><p>✅ The name field cannot contain special characters</p><p>The idea is for the user to understand what happened and what the next step is, without having to interpret technical messages.</p><h2 id="robust">Robust</h2><p>This principle states that the app must be <strong>robust enough</strong> to work correctly across different environments or devices. In other words, the app should continue to work when:</p><ul><li>It runs on different versions of the operating system</li><li>It is used with screen readers such as TalkBack or VoiceOver</li><li>It is used across different platforms</li><li>It adapts to different screen sizes (small, medium and large) without affecting usability or content clarity</li></ul><p>An example of the Robust principle in <strong>.NET MAUI</strong> is the use of <strong>OnPlatform</strong>.</p><h3 id="onplatform">OnPlatform</h3><p>Although .NET MAUI abstracts many platform differences&mdash;and personally, I try to use OnPlatform as little as possible to keep maintenance easier across Android and iOS, always looking for visual elements that give me the same result&mdash;in some cases, Android and iOS behave differently, and using it becomes necessary.</p><p>If you run into that situation, you can use OnPlatform to keep the behavior on both platforms exactly how you want it:</p><pre class=" language-xml"><code class="prism  language-xml">&lt;Button Text="Continue" 
 HeightRequest="{OnPlatform iOS=44, Android=48}" 
 Padding="{OnPlatform iOS='16,12', Android='16,14'}" /&gt;
</code></pre><p>This way, you respect each platform&rsquo;s recommendations while keeping an accessible and consistent experience, aligned with the <strong>Robust</strong> principle.</p><h2 id="conclusion">Conclusion</h2><p>And that&rsquo;s it!  In this article, we talked about <strong>A11y</strong> and why accessibility should be part of how we build mobile apps with <strong>.NET MAUI,</strong> not something added at the end. By understanding the <strong>POUR principles</strong> we saw how accessibility can be applied through small, intentional UI decisions.</p><p>From making content perceivable and interactions operable, to keeping things understandable and keeping our apps robust across platforms, each choice helps create a better experience for more users.</p><p>Remember: users may not know what A11Y is, but they definitely feel it when an app is accessible. </p><p>See you in the next article! &zwj;♀️✨</p><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">The Next Development Discipline Is ADD</h4></div><div class="col-8"><p class="u-fs16 u-mb0"><a target="_blank" href="https://www.telerik.com/blogs/next-development-discipline-add">Accessibility-Driven Development turns WCAG into a discipline.</a> With the EU Accessibility Act as the deadline, ADD is the next discipline to drive quality.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17300342.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:94cb70e4-14fa-4635-bca2-62629be17385</id>
    <title type="text">How to Identify Technologies Worth Exploring</title>
    <summary type="text">One senior developer shares his perspective on one of the biggest challenges facing technology professionals today: how to know what tech trends really matter.</summary>
    <published>2026-02-26T22:01:03Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Jefferson S. Motta </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17284609/how-to-identify-technologies-worth-exploring"/>
    <content type="text"><![CDATA[<p><span class="featured">In this post, I share my perspective on one of the biggest challenges we face as technology professionals today: separating what really matters from the constant noise that bombards us every day.</span></p><p>You&rsquo;ve probably felt that anxiety of seeing new technologies blowing up on X/Twitter or LinkedIn and thinking, &ldquo;Do I need to learn this now? Will I fall behind if I don&rsquo;t?&rdquo; This feeling of tech FOMO (Fear of Missing Out) is real and can be paralyzing.</p><p>I&rsquo;ve seen countless technologies born with revolutionary promises and die within a few months. Professionals invest hundreds of hours in frameworks that never gain market adoption. And people ignore genuine trends due to excessive cynicism, falling behind.</p><p>The truth is there&rsquo;s no magic formula. But there are signs, patterns and strategies that can help us make more consistent decisions.</p><h2 id="signs-of-real-traction-vs.-hype">Signs of Real Traction vs. Hype</h2><p>Let&rsquo;s start with the most important thing: how do you differentiate between superficial social media buzz and genuine market adoption of technology?</p><h2 id="the-social-media-theater">The Social Media Theater</h2><p>X/Twitter and LinkedIn have become stages for tech performance. Influencers gain followers by talking about the &ldquo;<strong>next big thing</strong>.&rdquo; Marketing companies pay for sponsored posts disguised as genuine opinions. Developers seek visibility by betting on technologies that seem innovative.</p><p>Note that these platforms have value. Often, that&rsquo;s where we first hear about technologies that become important. The problem is that&rsquo;s also where we hear about hundreds of others that never go beyond buzz.</p><p>Think about how many times you&rsquo;ve seen enthusiastic posts about some technology that promised to &ldquo;<strong>change everything</strong>&rdquo; and, six months later, nobody was talking about it anymore.</p><p>We have a somewhat recent case with the metaverse: major initiatives, companies selling spaces, billions in investments, and when generative AI arrived, all that metaverse hype went down the drain. Nowadays, nobody even talks about it anymore. That&rsquo;s the nature of social media; the attention cycle is short, and the next hype is always just one post away.</p><p>That&rsquo;s why I developed the habit of not reacting immediately to what I see on social media. I used to panic when I noticed I was missing the train of modernity. Today, I&rsquo;m more cautious; I take notes, observe, but don&rsquo;t invest significant time until I see more concrete signs.</p><p>I remember the days of Visual Basic and the early days of C#, where I noticed an interesting pattern in Microsoft products. It was usually from version 6.0 that a tool reached maturity or disappeared.</p><p>Visual Basic 6.0, for example, was the peak and the end of the line for that VB model. C# followed a similar path; version 6.0 brought the stability the language needed. Then came a transition period with .NET Framework (up to version 7.3), followed by a &ldquo;<strong>rebirth</strong>&rdquo; in .NET Core starting with C# 8.0, and today we&rsquo;re at C# 14 running on .NET 10.</p><h2 id="indicators-of-genuine-adoption">Indicators of Genuine Adoption</h2><p>I use two indicators about technology usage by observing the market:</p><h3 id="company-hiring">Company Hiring</h3><p>Companies don&rsquo;t hire for technologies they don&rsquo;t intend to use. When you start seeing job postings on platforms like LinkedIn, Indeed or Glassdoor asking for experience in a particular technology, it means there&rsquo;s real demand.</p><p>But be careful. It&rsquo;s not enough to see a few postings. What matters is observing the trend. Is technology appearing in more job postings over time? Is it being requested by companies from different sectors and sizes? Is it appearing in senior positions or just in startup experiments?</p><h3 id="the-2-year-filter">The 2-Year Filter</h3><p>This is probably the most straightforward and most powerful strategy: wait at least two years before diving deep into any new technology.</p><h4 id="why-2-years">Why 2 Years?</h4><p>It&rsquo;s not a magic number, but there&rsquo;s logic behind it. The first year of any new technology is the honeymoon period. There will be enthusiasm, hype and excited early adopters. The real problems haven&rsquo;t appeared yet because nobody has had enough time to find them.</p><p>In the second year, reality starts to show. The first production projects reveal limitations. Companies that adopted early begin sharing their experiences, including the pain points. Competitors have time to react and offer alternatives.</p><p>If technology is still growing and being adopted after two years, it has passed trial by fire. It survived the initial hype cycle, proved to have real value and developed a sustainable community. It&rsquo;s a much safer bet.</p><h4 id="exceptions-to-the-rule">Exceptions to the Rule</h4><p>Of course, no rule is absolute. There are situations where it makes sense to adopt technology earlier:</p><ul><li><p>When you work in a cutting-edge field and being at the forefront is part of your competitive advantage, it may make sense to take more risks. AI startups, for example, frequently need to adopt emerging technologies before they mature.</p></li><li><p>When technology solves a critical problem you have right now, and there are no mature alternatives, sometimes there&rsquo;s no choice but to accept the risk.</p></li><li><p>When you have resources to invest in learning, even if technology goes nowhere, like personal projects or hackathons, the cost of being wrong is low.</p></li></ul><p>But for most professional decisions, especially those involving production projects or long-term career development, the two-year filter remains an excellent option.</p><h2 id="how-to-follow-without-diving-in">How to Follow Without Diving In</h2><p>Waiting two years doesn&rsquo;t mean completely ignoring technology during that period. It means following from a distance, being aware of what&rsquo;s happening, without investing significant time in deep learning.</p><p>In practice, this can mean reading introductory articles to understand the basic concepts, following the leading developers and the official account on X/Twitter, watching one or two introductory talks, adding some repositories to your favorites to keep track of, and participating in superficial discussions when the topic comes up.</p><p>This lighter following approach lets me stay informed as technology matures without wasting hundreds of hours if it doesn&rsquo;t take off.</p><h2 id="the-complexity-bias-trap">The Complexity Bias Trap</h2><p>There&rsquo;s a trap around our necks. Sometimes, we choose complex technologies because they seem more sophisticated or because they challenge us intellectually. But unnecessary complexity is a cost, not a benefit.</p><p>The right question isn&rsquo;t &ldquo;Is this technology impressive?&rdquo; but &ldquo;Is this technology appropriate for my problem?&rdquo; Often, the simplest solution is the best.</p><p>Kubernetes is incredible, but do you need it for your application? Microservices are elegant, but does your project justify the complexity? The most advanced technology isn&rsquo;t always the most suitable.</p><h2 id="conclusion">Conclusion</h2><p>The best strategy for identifying technologies worth pursuing is to combine cautious observation, analysis of concrete adoption signals and patience to let time filter what&rsquo;s truly relevant.</p><p>What we can always rely on is maintaining a growth mindset and learning from new technologies; even if they disappear, we&rsquo;ll still carry a bit of their way of thinking into the next phase of life&rsquo;s game.</p><p>And you? How many times have you seen technologies emerge, disappear or continue to this day?</p><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">What Every Developer Should Learn as Soon as Possible in Their Personal Life</h4></div><div class="col-8"><p class="u-fs16 u-mb0"><a target="_blank" href="https://www.telerik.com/blogs/what-every-developer-should-learn-asap-personal-life">One developer shares life lessons</a> gained throughout his career and shares the questions that can help you move ahead.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17284609.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:127ad977-47fc-47fa-9a8a-05971103b76f</id>
    <title type="text">When the Career Ladder Kills Your Passion</title>
    <summary type="text">Climbing the ladder can look like progress, yet quietly drain the spark that brought you into design. Here's how empathy helps you turn passion into purpose.</summary>
    <published>2026-02-19T20:30:45Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Teon Beijl </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17279638/when-career-ladder-kills-your-passion"/>
    <content type="text"><![CDATA[<p><span class="featured">Climbing the ladder can look like progress, yet quietly drain the spark that brought you into design. Here's how empathy helps you turn passion into purpose.</span></p><p>I read a post on Reddit the other day from an enterprise UX designer. They&rsquo;d just landed a new gig with more money and a lead title that felt like a promotion. On paper, it sounded like progress. But the reality hit fast. Just patch-and-fix work. Migrating Excel sheets into out-of-the-box tools and calling it innovation.</p><p>What they wrote stayed with me:</p><blockquote><p>&ldquo;My design soul feels like it&rsquo;s dying. No passion, no creative spark. I feel like I&rsquo;m drifting further and further from what drew me into UI/UX in the first place.&rdquo;</p></blockquote><p>That feeling is more common than people admit, and it often hits right after you climb the ladder.</p><h2 id="the-climb-that-feels-like-progress">The Climb That Feels Like Progress</h2><p>Most designers climb the career ladder for understandable reasons. You get promoted into a lead position or move from startups into enterprise UX. You gain a bigger title, more stability, better pay and benefits.</p><p>With that comes the promise of impact and influence.</p><p>The early days seem fine. You&rsquo;re suddenly exposed to large programs and complex systems. You deal with new domains and teams spread across regions.&nbsp;You sit in strategy meetings. You meet senior leaders. The climb gives you a sense of elevation. It feels like the right choice. It feels like progress.</p><p>You tell yourself you&rsquo;re finally doing meaningful work. You&rsquo;ve earned a seat at the table.</p><p>But there&rsquo;s a quiet trade-off most people don&rsquo;t notice. Only when you&rsquo;re far enough up that you start feeling down.</p><h2 id="the-valley-of-despair">The Valley of Despair</h2><p>At first it&rsquo;s the small things: more meetings, more alignment sessions and more approvals.</p><p>Your solution is defined by licensing agreements rather than user needs. Requests that are really just vendor configurations. Your influence shrinks even as your title grows. You feel the ceiling closing in.</p><p>The spark that pulled you into design&mdash;the curiosity, creativity and craft&mdash;starts to fade.</p><p>You still care. You still want to do great work. But the environment around you wants the result, not the process.</p><p>And then the questions arrive:</p><ul><li><em>Is this really how design works?</em></li><li><em>Is this what I want to do?</em></li><li><em>Where&rsquo;s my passion?</em></li></ul><p>It&rsquo;s not a sign that something is wrong with you. It&rsquo;s a sign that something&rsquo;s happening to you.</p><p>And it has everything to do with scale.</p><h2 id="the-mechanics-of-scale">The Mechanics of Scale</h2><p>Enterprises operate very differently from individuals driven by craft.</p><p>At scale, companies optimize for predictability, repeatability and risk reduction.</p><ul><li><strong>Unity over uniqueness.</strong></li><li><strong>Stability over innovation.</strong></li><li><strong>Delivery over craft.</strong></li></ul><p>Not because leaders hate your creativity. Not because designers aren&rsquo;t valued or design isn&rsquo;t wanted.</p><p>But because reducing variance makes it easier for thousands of people to move in the same way. Your passion&mdash;your desire to shape and craft&mdash;doesn&rsquo;t fit easily into that machine.</p><p>The mechanics of scale lack the sensitivity for meaning. It feels like you&rsquo;ve lost your passion or miscalculated your career. It&rsquo;s easy to see this as a personal failure.</p><p>But the truth is you didn&rsquo;t change. The environment did. And the way out begins with seeing it differently.</p><h2 id="back-to-your-roots-empathy">Back to Your Roots: Empathy</h2><p>When designers feel lost, we often forget the tool that built our discipline: empathy.</p><p>Empathy is what lets you step out of your own head and see the world through someone else&rsquo;s eyes. It&rsquo;s how you reinterpret your reality, how you can recalibrate your perspective.</p><h3 id="empathy-for-the-user">Empathy for the User</h3><p>Start with someone else&rsquo;s frustrations&mdash;your users&rsquo;.</p><p>Their frustrations and needs give you back a sense of clarity about why your work matters. Their perspective lets you see who you&rsquo;re really doing this for.</p><p>That Excel sheet, migrated into a cloud-based dashboard, might not change your life. But it can change theirs.</p><p>Users remind you that you still make an impact, even when it feels like you can&rsquo;t fully practice your craft.</p><h3 id="empathy-for-the-business">Empathy for the Business</h3><p>Turning your empathy toward the business is less comfortable.</p><p>Understanding the business means acknowledging its constraints, priorities and pressures. It helps you see why innovation is slow, what the stakes are and what your boss is dealing with.</p><p>Empathy for the business doesn&rsquo;t mean you capitulate. It lets you understand.</p><p>Understanding how the business works doesn&rsquo;t fix everything, but it does reduce resentment. And resentment&rsquo;s what holds you back.</p><p>When you see the system clearly, you stop interpreting constraints as personal attacks. You stop assuming incompetence. You recognize the environment around you.</p><p>And once you grasp that environment, you can design within it.</p><h3 id="empathy-for-yourself">Empathy for Yourself</h3><p>This is the hardest one.</p><p>Your own perspective is the one you can&rsquo;t step away from. Your emotions are the ones you can&rsquo;t ignore.</p><ul><li><em>Why does this feel frustrating?</em></li><li><em></em><em style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;">What exactly is painful here?</em></li><li><em style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"></em><em style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;">Where am I feeling loss?</em></li></ul><p>Self-empathy is more constructive than self-criticism. It makes you aware of your inner state.</p><p>And once you can see why you&rsquo;re truly frustrated, you discover something greater than passion: <strong>purpose.</strong></p><h2 id="from-passion-to-purpose">From Passion to Purpose</h2><p>When you feel stuck, it&rsquo;s tempting to think that &ldquo;finding your passion&rdquo; will fix everything. But passion alone won&rsquo;t get you out.</p><p>The word <em>pathos</em>, the root in words like &ldquo;empathy,&rdquo; is about feeling and suffering&mdash;about what happens to you. It&rsquo;s emotion.</p><p>And emotion comes from <em>emovere</em>: <em>ex</em> (out) + <em>movere</em> (move).</p><p>Emotion moves outward. It reacts. It signals. But emotion alone doesn&rsquo;t move you forward. Purpose does.</p><p>Purpose comes from <em>proponere</em>&mdash;to put something forward. To place something ahead of you. To guide your next step.</p><p>Passion is what you feel in the moment.&nbsp;Purpose is what you do with that feeling.</p><p>And this is where empathy becomes a bridge. Empathy helps you look at the same reality and read it differently. It lets you recalibrate your perspective instead of staying locked in frustration. It shifts you from <em>&ldquo;how I feel&rdquo;</em> to <em>&ldquo;how I move.&rdquo;</em></p><p>Once you understand the people you impact, the business you operate in and the reason you feel stuck, you have the first pieces of the puzzle that uncover your purpose.</p><p>Purpose isn&rsquo;t a statement. It&rsquo;s what moves you forward.</p><p>And once you see it, you can redesign your job, your role and your path. Even within constraints, you can bring that purpose forward.</p><h2 id="forward-not-up">Forward, Not Up</h2><p>Early in my career, I saw the path the same way everyone else did: a ladder.</p><p>Later, when I was leading others on their path, I learned to nuance the direction. Not everybody thrives on an upward trajectory. Some are better off moving sideways.&nbsp;So I tailored progress and growth to the individual&mdash;vertical and lateral progressions.</p><p>But here&rsquo;s the truth I learned far too late: Up, down, left or right don&rsquo;t automatically mean forward.</p><p>I redesigned my career multiple times. Carved out new roles inside the same company. For years, it worked. Until it didn&rsquo;t.&nbsp;My reality was defined by the mechanics of scale. I found myself stuck in the valley of despair.</p><p>So I left. No new job lined up. No master plan. Just space.</p><p>And in that space, I finally had enough room to look inward. To understand what I needed to do. To renew my perspective.</p><p>I rediscovered where I could move on purpose. I&rsquo;m still defining that purpose. It&rsquo;s still taking shape.</p><h2 id="closure">Closure</h2><p>My career&rsquo;s no longer about moving up. It&rsquo;s about moving forward.</p><p>Not how I feel about what I do, but how I move with what I have to do.</p><p>That&rsquo;s what progress is about: not just finding passion, but moving on purpose.</p><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">Dealing with Impostor Syndrome as a Web Designer or Dev</h4></div><div class="col-8"><p class="u-fs16 u-mb0">Ever get the feeling that you&rsquo;re not good enough to be a designer or developer? This is something called <a target="_blank" href="https://www.telerik.com/blogs/dealing-impostor-syndrome-web-designer-dev">impostor syndrome</a> and it happens to most creative professionals at some point (and, sometimes, many points) over their career. In this post, we&rsquo;ll talk about some ways to beat it.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17279638.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:b883169c-c58a-43f6-b3ac-abfcb7a07243</id>
    <title type="text">What Every Developer Should Learn as Soon as Possible in Their Personal Life</title>
    <summary type="text">One developer shares life lessons gained throughout his career and shares the questions that can help you move ahead.</summary>
    <published>2025-12-11T18:12:45Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Jefferson S. Motta </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17230783/what-every-developer-should-learn-asap-personal-life"/>
    <content type="text"><![CDATA[<p><span class="featured">One developer shares life lessons gained throughout his career and shares the questions that can help you move ahead.</span></p><p>At 17, I picked up my first book on Neuro-Linguistic Programming (NLP). Not because a mentor recommended it or out of philosophical curiosity, but because I wanted to understand how I worked and what I could become. I found the world meaningless and thought my problems were too big for me to handle. The book introduced me to an idea that seemed too obvious to be true: If you have a problem, you can solve it. Life doesn&rsquo;t hand you burdens you can&rsquo;t carry.</p><p>It took me years to understand what that really meant. And even more years to realize that this lesson wasn&rsquo;t just about fixing code bugs.</p><p>What I&rsquo;m sharing here comes from my personal experience, mistakes included. It might not apply to you, but if even one of these reflections makes you pause and think, it&rsquo;s worth it.</p><h2 id="know-thyself-before-life-forces-you-to">Know Thyself (Before Life Forces You To)</h2><p>&ldquo;Know thyself&rdquo;: Socrates said this millennia ago, but nobody teaches you how to do it in school. And for developers, this self-knowledge isn&rsquo;t a philosophical luxury. It&rsquo;s a survival tool.</p><p>Today, I know what sets me off in a code review. I know how I react when someone questions my architecture. I understand why I prefer working on complex features alone before presenting them to the team. But it took me a long time to get here.</p><p>The problem is that we&rsquo;re several different <em>selves</em>: The developer who defends their technical choices tooth and nail, the team member who needs to compromise in discussions, the professional who accepts projects they don&rsquo;t like to pay the bills, the friend, the son, the father. Each of these selves has its own behavior patterns. And you only discover these patterns by going through experiences, preferably by seeking them out instead of just waiting for them to come.</p><p>Early in my career, conflict situations left me stunned: How can people not see the clarity of my idea, the way I see it? Defending a different technical idea seemed like arrogance. But over time, I learned something counterintuitive: I started to enjoy conflicts. Because it&rsquo;s in friction that you discover what your ideas are really made of. It&rsquo;s when people lose their cool that they show who they are, and so do you.</p><p>But this only makes sense when you know yourself. When you know what your path is.</p><p>And this is work only you can do. There&rsquo;s no YouTube tutorial, no framework. It must come from within.</p><h2 id="some-questions-that-helped-me-and-might-help-you">Some Questions That Helped Me (And Might Help You)</h2><p>Is what I do/work aligned with what I feel?</p><p>Not in the romantic <strong>&ldquo;do what you love&rdquo;</strong> sense, but in the honest sense: Does this move me or anesthetize me?</p><p>Do my opportunities make me grow?</p><p>Or am I just repeating what I already know how to do because it&rsquo;s comfortable?</p><p>What do I have to learn where I am today?</p><p>If the answer is &ldquo;<strong>nothing</strong>,&rdquo; you should have already left.</p><p>An important aside: There&rsquo;s a dangerous belief that &ldquo;doing what you like&rdquo; is a privilege for billionaires. That you need to suffer first, make money later and only then can you afford the luxury of liking what you do. That&rsquo;s a lie.</p><p>The point here is that successful people did do many things they didn&rsquo;t like, yes. But that&rsquo;s not why they succeeded; it&rsquo;s despite it. And curiously, neuroscience shows that doing things you don&rsquo;t like (like washing dishes) strengthens your ability to deal with adversity. Children who have household responsibilities develop greater resilience and entrepreneurial tendencies.</p><p>The point isn&rsquo;t to avoid discomfort. It&rsquo;s knowing why you&rsquo;re doing what you don&rsquo;t like, whether it&rsquo;s a means to a clear end or just an escape from the decision to know yourself.</p><h2 id="solitude-isn’t-the-enemy-it’s-the-laboratory">Solitude Isn&rsquo;t the Enemy (It&rsquo;s the Laboratory)</h2><p>Developers have a strange relationship with solitude. Our profession pushes us toward it, hours in front of the screen, headphones on, immersed in problems that only exist in our heads. And at the same time, they tell us we must be &ldquo;collaborative,&rdquo; &ldquo;work as a team&rdquo; and &ldquo;do pair programming&rdquo; (which, personally, I think is excellent).</p><p>The truth I learned is that any person&rsquo;s life, no matter how social they are, is fundamentally solitary. Nobody&rsquo;s going to be responsible for your commitments, your architecture choices or your career. You must count on yourself most of the time.</p><p>This doesn&rsquo;t mean you don&rsquo;t need friends or a team. It means you need to learn to live with yourself first, and that&rsquo;s a challenge.</p><p>And for developers, this skill is even more valuable. Because developing technically is more about thinking than acting. When you&rsquo;re programming, solving a complex bug or architecting a solution, solitude isn&rsquo;t isolation; it&rsquo;s focus. You don&rsquo;t need constant interaction to deliver. In fact, interruption is often the enemy.</p><p>But, and this is crucial, you can&rsquo;t think everything through alone. A healthy dose of team interaction is necessary. The trick is knowing when to be alone and when to seek others out.</p><p>Things I did to master my relationship with solitude: Going to the movies alone, to restaurants, to concerts. It sounds silly, but it&rsquo;s not. It&rsquo;s about learning to appreciate your own company. It&rsquo;s about creating inner life.</p><p>Artur da T&aacute;vola, a Brazilian thinker, said: &ldquo;Music is inner life, and whoever has inner life will never suffer from loneliness&rdquo; (free translation).</p><p>Quality moments alone, without electronics, without notifications, just you, good music or a good book, make a difference. It&rsquo;s in this silence that you process the day&rsquo;s conflicts, understand why that meeting irritated you, and notice patterns in your behavior.</p><p>Solitude isn&rsquo;t punishment. It&rsquo;s the laboratory where you get to know yourself.</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/.net-maui-aiprompt/quote-jefferson.png?sfvrsn=ca2386d9_2" alt="Solitude isn’t punishment. It’s the laboratory where you get to know yourself." sf-size="100" /></p><h2 id="early-success-the-invisible-trap">Early Success: The Invisible Trap</h2><p>At 21, two years after entering the IT field, I started my own company. Money came fast. A lot of money. It seemed like I had cracked the code of life.</p><p>That success stagnated me.</p><p>Early success is a dangerous drug. It addicts your brain. It fills you with false confidence because you don&rsquo;t yet understand that success has context, timing and luck. You think it was all competence.</p><p>The problem isn&rsquo;t success itself; it&rsquo;s not realizing that the premises that got you there won&rsquo;t be present at the next level. You level up, but want to play with the same strategies.</p><p>I wasn&rsquo;t prepared for the next level of growth. I didn&rsquo;t know how to scale people, processes and complexity. And when a serious accident caused me to stagnate for nearly a decade, I realized I had built castles in the sand.</p><p>It was during this forced pause that I did the best work of my career. I focused on developing a legal system with features nobody else had: a complete change in history, field by field, and thousands of features meticulously thought out in the most minor details. Advocati was considered the best legal software in Brazil in 2007.</p><p>But it took me until 2011 to return strongly to the market.</p><p>Those years taught me something brutal: Enjoy your success, but don&rsquo;t be blinded by it. Don&rsquo;t become arrogant. Lower your expectations that everything will always work out. This gives you a more realistic view.</p><p>I&rsquo;m not saying dream small. Dream big, but take solid, consistent steps. Our lives are increasingly fluid, and constantly changing goals and objectives get you nowhere. Having a fixed target and mapping out the right strategy to reach it, without illusions, is the safest path.</p><p>And there&rsquo;s something else: You&rsquo;ll repeat your mistakes until you learn the lesson. Your life is teaching you something. If you don&rsquo;t understand or don&rsquo;t even realize there&rsquo;s a reason behind your challenge, you&rsquo;ll keep repeating the same cycle.</p><p>Life isn&rsquo;t a game where you pass levels. It&rsquo;s more like debugging as you run the code, see where it breaks, adjust and then rerun it. The problem only disappears when you understand its root cause.</p><h2 id="what-to-do-with-all-this">What to Do With All This?</h2><p>Knowing yourself isn&rsquo;t a destination. It&rsquo;s a daily journey. It&rsquo;s noticing when you&rsquo;re reacting on autopilot. It&rsquo;s questioning why that comment on PR irritated you so much. It&rsquo;s having the courage to be alone with your thoughts. It&rsquo;s celebrating success without thinking you&rsquo;ve become invincible.</p><p>When the next conflict comes, the subsequent failure, the next success, you&rsquo;ll have something most developers never build: clarity about who you are when nobody&rsquo;s watching.</p><p>What I&rsquo;ve shared here comes from decades of learning. Your journey will be different. But if you start getting to know yourself now, maybe you won&rsquo;t have to wait for an accident to learn what took me decades to understand.</p><h2 id="what’s-next-for-me">What&rsquo;s Next for Me?</h2><p>Having learned my lesson, I&rsquo;m always looking for new ways to challenge myself.</p><p>Today I&rsquo;m working on an exciting AI project that&rsquo;s pushing the boundaries of modern development, an intelligent SaaS platform creator powered by natural language prompts. This innovative tool leverages .NET 10 for a robust backend, Microsoft SQL Server for enterprise-grade data management, and React with Next.js on the frontend, all brought together with the rich UI components of the Progress KendoReact library.</p><p>The vision is simple yet powerful: Describe your SaaS platform requirements through prompts and watch as AI transforms your ideas into a fully functional, production-ready application, complete with professional interfaces powered by AI and scalable architecture.</p><p>To validate the project, we&rsquo;re developing and refining it alongside five real-world systems built with this new product.</p><p>And I look forward to learning about myself in the development of this project. </p><p><strong>What&rsquo;s next for you?</strong></p><img src="https://feeds.telerik.com/link/23073/17230783.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:4be62d7c-fd95-4c8a-8ea3-e79ab0ee59df</id>
    <title type="text">The Next Development Discipline Is ADD</title>
    <summary type="text">Accessibility-Driven Development turns WCAG into a discipline. With the EU Accessibility Act as the deadline, ADD is the next discipline to drive quality.</summary>
    <published>2025-11-10T16:04:25Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Teon Beijl </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17206639/next-development-discipline-add"/>
    <content type="text"><![CDATA[<p><span class="featured">Accessibility-Driven Development turns WCAG into a discipline. With the EU Accessibility Act as the deadline, ADD is the next discipline to drive quality.</span></p><p>Maybe you know the acronyms: TDD, BDD or DDD. If not, go on Reddit and you will find enough debates to learn it keeps our industry busy.</p><p>Each acronym shifted how we think and how we build software. Now, with new accessibility laws setting a hard deadline, it&rsquo;s time to add one more: ADD. Accessibility-Driven Development.</p><h2 id="compliance-as-a-driver-of-quality">Compliance as a Driver of Quality</h2><p>For years, accessibility was treated as optional or &ldquo;nice to have.&rdquo; A box you ticked if you had time. But history shows us that regulations and compliance raise quality and drive standardization.</p><p>Think about hardware safety regulations or industry protocols. At first, they seemed like a burden. But once enforced, they became the baseline that allowed whole industries to build better. Today, shipping is faster than ever. Compliance is the safeguard that helps prevent quality from being skipped.</p><h2 id="a-time-change-in-accessibility">A Time Change in Accessibility</h2><p>If you&rsquo;ve worked in UX or frontend development, you&rsquo;ve probably heard of the Web Content Accessibility Guidelines (WCAG). They&rsquo;ve been around for decades, laying out the rules: make software perceivable, operable and understandable.</p><p>WCAG has been the global guideline for accessibility. But for years, adoption was inconsistent. Companies did what they wanted, or what they could afford.</p><p>That changes now. The European Accessibility Act (EAA) is in force as of June 28, 2025. It harmonizes accessibility requirements across the EU and sets real deadlines for compliance. This is the moment accessibility shifts from voluntary guidance to enforceable law. A time change for the industry.</p><p>In the U.S., the Americans with Disabilities Act (ADA) has fueled a rise in lawsuits over inaccessible websites and apps. Similarly, Section 508 of the Rehabilitation Act requires federal agencies and contractors to conform to WCAG. Between lawsuits and procurement contracts, WCAG has become the standard in the U.S. too.</p><p>Different routes, same outcome: WCAG tells us that we need better software for everyone.</p><h2 id="the-disciplines-we-already-know">The Disciplines We Already Know</h2><p>Disciplines reshape the way we develop software. They&rsquo;re mindsets that force us to shift perspective and raise the quality of the software we ship.</p><h3 id="tdd-test-driven-development">TDD: Test-Driven Development</h3><p>With TDD, we write failing tests before we write code. It flips the order. Instead of coding first and testing later, we define the boundaries up front.</p><p><em>The discipline: build resilience by considering how software might fail.</em></p><h3 id="bdd-behavior-driven-development">BDD: Behavior-Driven Development</h3><p>BDD takes this further. Instead of only testing functions, we write scenarios in plain language: Given, When, Then. It&rsquo;s not only developers who can understand, but also stakeholders, product owners, testers.</p><p><em>The discipline: align software with real user expectations.</em></p><h3 id="ddd-domain-driven-design">DDD: Domain-Driven Design</h3><p>DDD steps back another layer. It tells us: don&rsquo;t just model features, model the domain itself. Speak the same language as the business. Reflect its truth in your system.</p><p><em>The discipline: design software that mirrors business reality.</em></p><p>Each of these disciplines changed how we think. They aren&rsquo;t just tools; they&rsquo;re shifts in mindset.</p><h3 id="add-accessibility-driven-development">ADD: Accessibility-Driven Development</h3><p>Now it&rsquo;s time for the next discipline: Accessibility-Driven Development.</p><p>ADD means designing and testing for the edge user first&mdash;the one with constraints. The one who doesn&rsquo;t use your product the way you do. If it works for them, it will work for everyone.</p><p>Think of it like TDD. In TDD, you write a failing test first. In ADD, you define the hardest case first.</p><p>Keyboard-only navigation becomes your failing test. A screen reader flow becomes your scenario. High-contrast mode becomes your business constraint. You design and build until those pass.</p><p>ADD shifts the mindset. Accessibility isn&rsquo;t something you sprinkle in at the end. It is a discipline that shapes decisions during building.</p><p><em>The discipline: build software that is accessible to many, not to some.</em></p><h2 id="why-add-matters-now">Why ADD Matters Now</h2><p>Why now? Without the <a href="https://www.telerik.com/blogs/what-does-european-accessibility-act-mean-developers" target="_blank">European Accessibility Act</a>, many teams would keep treating accessibility as optional. But with compliance dates set, ignoring accessibility is no longer a choice.</p><p>ADD helps you shift from reactive to proactive. Instead of scrambling with audits and lawsuits, you build accessibility into the process. Compliance becomes a habit, not a fire drill.</p><p>Here&rsquo;s the point: designing for edge cases improves the experience for everyone. It&rsquo;s called the <em>curb cut effect.</em> Those sidewalk ramps built for wheelchairs are also used by parents with strollers, travelers with luggage and kids on scooters.</p><p>You&rsquo;re not wasting resources on a minority. You&rsquo;re building better software. Accessibility isn&rsquo;t overhead. It&rsquo;s an advantage.</p><p>By designing for the most constrained environments, you raise the quality of the entire system.</p><h2 id="closing">Closing</h2><p>Accessibility is not a gesture. It&rsquo;s a discipline.</p><p>A new standard to comply with in software. And compliance has always been a driver of quality. Industry protocols in manufacturing. Safety standards in hardware. Now, accessibility in software.</p><p>You don&rsquo;t have to choose between TDD, BDD and DDD. They&rsquo;re not a menu. They&rsquo;re a collection of development disciplines that shape how we build.</p><p>The one you need to add next is ADD: Accessibility-Driven Development.</p><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">The Hidden Costs of Inaccessible Apps for Enterprises and How to Avoid Them</h4></div><div class="col-8"><p class="u-fs16 u-mb0"><a target="_blank" href="https://www.telerik.com/blogs/hidden-costs-inaccessible-apps-enterprises-how-avoid">Learn the hidden costs of inaccessible</a> enterprise applications and see some strategies for building accessible enterprise solutions.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17206639.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:2b7b4fe8-e841-4586-9a87-04bfbf9b1a8d</id>
    <title type="text">Dealing with Impostor Syndrome as a Web Designer or Dev</title>
    <summary type="text">Ever get the feeling that you’re not good enough to be a designer or developer? This is something called impostor syndrome and it happens to most creative professionals at some point (and, sometimes, many points) over their career. Let’s talk about some ways to beat it.</summary>
    <published>2025-10-29T11:51:21Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Suzanne Scacca </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17198997/dealing-impostor-syndrome-web-designer-dev"/>
    <content type="text"><![CDATA[<p><span class="featured">Ever get the feeling that you&rsquo;re not good enough to be a designer or developer? This is something called impostor syndrome and it happens to most creative professionals at some point (and, sometimes, many points) over their career. In this post, we&rsquo;ll talk about some ways to beat it.</span></p><p>Whether you just landed your first job as a designer/developer or you&rsquo;ve been working for years, impostor syndrome can hit at any time. All it takes is for just one seed of doubt to be planted before you start wondering, &ldquo;Am I even capable of doing this job? No one thinks I&rsquo;m any good anyway. Maybe I should quit, save them the trouble.&rdquo;</p><p>The problem with impostor syndrome is that it&rsquo;s more than just negative self-talk. If it goes on for long enough, it can cause significant damage to your mental health, relationships and career.</p><p>So, rather than feed into this vicious cycle of tearing yourself down, let&rsquo;s discuss some strategies that can help you get past impostor syndrome.</p><h2 id="what-is-impostor-syndrome">What Is Impostor Syndrome?</h2><p>According to <a target="_blank" href="https://www.mcleanhospital.org/essential/impostor-syndrome">McLean Hospital</a>:</p><blockquote><p>&ldquo;When someone has impostor syndrome, they experience repeated feelings or thoughts that they are incompetent or not good enough, despite evidence to the contrary. These beliefs often have roots in someone&rsquo;s personal history and tend to play out in work, academic, and other high-pressure settings. Unaddressed, they can keep people from enjoying their successes and living life to its full potential.&rdquo;</p></blockquote><p>What do these feelings of insecurity and self-doubt sound like? Here are some examples:</p><ul><li>&ldquo;I&rsquo;m not good enough.&rdquo;</li><li>&ldquo;I don&rsquo;t belong here. Everyone is smarter than me.&rdquo;</li><li>&ldquo;Everything I build is awful.&rdquo;</li><li>&ldquo;I guess I charge &hellip; $12 an hour?&rdquo; (Because you can&rsquo;t imagine anyone paying you a fair wage for your work.)</li><li>&ldquo;I&rsquo;m a complete disaster.&rdquo; (After making a small mistake that no one noticed.)</li><li>&ldquo;I can&rsquo;t ask for help because then they&rsquo;ll realize I don&rsquo;t know anything.&rdquo;</li><li>&ldquo;Any day now they&rsquo;ll figure out I&rsquo;m a fraud.&rdquo;</li><li>&ldquo;[Coworker] always does a better job. They should just give them all the important jobs.&rdquo;</li><li>&ldquo;It didn&rsquo;t have anything to do with me. It was all because of &hellip;&rdquo; (When someone gives you a compliment.)</li><li>&ldquo;Here&rsquo;s the onboarding mockup I created. It&rsquo;s not very good. I&rsquo;m sure you won&rsquo;t like it.&rdquo; (When presenting your work to a client.)</li></ul><p>Impostor syndrome doesn&rsquo;t just manifest itself in the words you speak about yourself or work. It can also create anxiety and depression, lead to insomnia and negatively impact your work performance. In addition, it can burn you out.</p><p>According to the <a target="_blank" href="https://www.apa.org/monitor/2021/06/cover-impostor-phenomenon">American Psychological Association</a> (APA), it can also make people not want to work with you. Not because you&rsquo;re not good at what you do. But because your attitude is draining and they feel like it&rsquo;s impossible to connect with you.</p><p>It&rsquo;s almost as if impostor syndrome becomes a self-fulfilling prophecy. While managers, coworkers and clients may not have had a problem with the quality of your work before, they will once it and your attitude degrade over time.</p><h2 id="how-to-keep-impostor-syndrome-from-getting-in-your-way">How to Keep Impostor Syndrome from Getting in Your Way</h2><p>Starting to feel the side effects of impostor syndrome at work? Here are some things you can do to get it out of your way (and out of your head):</p><h3 id="focus-on-what’s-true-not-on-what-you-feel">1. Focus on What&rsquo;s True, Not on What You Feel</h3><p>Let&rsquo;s take one of the example sentiments from above:</p><blockquote><p>&ldquo;Everything I build is awful.&rdquo;</p></blockquote><p>Let&rsquo;s say this thought keeps crossing your mind every time you turn something into your supervisor or client.</p><p>The first thing to do is to recognize that this is a thought and nothing more. Unless you have a client shouting at you that you are indeed awful every time they see your work, this is your own criticism you&rsquo;re dealing with.</p><p>Next, focus on what&rsquo;s factual:</p><ul><li>What are the five last projects or tasks you completed?</li><li>What was the feedback you received on them from others?</li><li>In the end, was your employer or client satisfied with the end result?</li></ul><p>You can&rsquo;t argue with facts. So, the next time you start with the negative self-talk, call to mind what you&rsquo;ve been working on and how it was received. Actually look at the paper trail from the project to work with facts and don&rsquo;t just recall memories that may be tainted by your feelings.</p><p>Also make note of major wins and write them down somewhere. Positive client testimonials. Referrals from a client you worked closely with. Management congratulating you in front of the team. A bonus at the end of the year. As they stack up, it&rsquo;ll be hard to call yourself an impostor.</p><h3 id="talk-to-someone-you-respect">2. Talk to Someone You Respect</h3><p>If you&rsquo;re seriously doubting the quality of your work, bring it to someone you admire and respect in your field. And avoid sharing it with someone whose opinion you could easily discard, like a loved one. (&ldquo;Oh, they just said that so I wouldn&rsquo;t feel bad.&rdquo;)</p><p>There&rsquo;s no need to share your opinions or criticisms about the work with your peer. Instead, just bring it to them with the hope of getting unbiased feedback, and see what they say.</p><p>To start, if they pay you any compliments, graciously accept them. Remind yourself that they have no reason to lie to you or sugarcoat the truth. They are someone you respect and whose opinion you trust. They get nothing out of lying to you.</p><p>If they give you feedback, remember that feedback does not equal failure. We all get feedback, even when we&rsquo;re experts at the top of our careers. Thank them for their feedback, make note of the input you received and then spend time reviewing it.</p><p>Put aside your negative self-talk and evaluate the feedback against reality. Is it fair? If so, what can you do to address it and improve?</p><p>This is what feedback is for. It helps us better understand our strengths and weaknesses, and to put a plan in place so we can move forward better than before. Not to wallow in perceived criticism.</p><p>This is the difference between an impostor and an expert. The impostor won&rsquo;t know what to do with the feedback or how to grow from it. The expert will. They&rsquo;ll also have the motivation to do so, too.</p><h3 id="ask-your-manager-or-peers-for-support">3. Ask Your Manager or Peers for Support</h3><p>Let&rsquo;s say your feelings of impostor syndrome have come from something that your manager, clients or peers have said to you. This again comes down to whether you&rsquo;ll allow that feedback to fester or to put it to good use.</p><p>For example, let&rsquo;s say that your manager hasn&rsquo;t been pleased with your creation of color palettes. If they haven&rsquo;t given you feedback on how to create them, reach out for support and guidance. Or you can turn to your coworkers for assistance.</p><p>Find out what exactly their expectations or preferences are. Ask about their personal process for crafting color palettes. See if there are specific tools they recommend you use.</p><p>If you&rsquo;re feeling inadequate, don&rsquo;t give up. See if you can get someone to guide you toward a new process or practice.</p><p>On the other hand, let&rsquo;s say your feelings of impostor syndrome have come from something that your manager has said or done, but it wasn&rsquo;t a direct criticism.</p><p>For example, they reassigned one of your tasks to a peer. Do you know for sure why they did it? If you don&rsquo;t, follow up with them and see if they&rsquo;ll give you a reason and some feedback. By actively seeking feedback, you may just discover it was a matter of them better allocating resources versus it being a reflection of the quality of your work.</p><p>Seeking out the truth can always help when impostor syndrome is getting in the way. It&rsquo;ll either let you know that your feelings of self-doubt are unfounded or that you do have some areas where you can improve. You lose nothing by asking for guidance and help, and everything to gain.</p><h3 id="let-go-of-perfectionism">4. Let Go of Perfectionism</h3><p>It&rsquo;s not realistic to seek perfection. Or to wait to turn something in until it&rsquo;s perfect.</p><p>I&rsquo;m not saying that your work should be full of errors or half done. However, if you&rsquo;re waiting to reach that so-called perfect version of a website, app, logo or whatever it is you&rsquo;re building, and then freak out after hitting &ldquo;Send&rdquo; because you realized the font size was slightly off, that&rsquo;s a problem.</p><p>We all make mistakes and there are flaws in a lot of the work we produce for the web. We&rsquo;re human. It&rsquo;s what happens. So long as you&rsquo;re paying attention to your clients&rsquo; needs and preferences, adhering to best practices and web standards, and doing your level best each time, that&rsquo;s all that matters.</p><p>Once you accept this, you&rsquo;ll realize it&rsquo;s not right to put yourself down or abuse yourself for every perceived mistake.</p><p>To reiterate what I mentioned before: If it really bothers you to discover a mistake after turning in your work, make note of it. Is there something you can do next time to avoid it?</p><p>For instance, let&rsquo;s say the font in your contact form doesn&rsquo;t match the font used throughout the Contact page. There&rsquo;s an easy way to address this particular problem in the future: Revise your process. Instead of manually applying font settings as you add new components, employ a global standard and design system that controls the fonts used throughout.</p><p>Let go of this idea of perfection and embrace a mindset of growth and improvement. Find something you don&rsquo;t like about your process or approach to design or development? Fix it. Don&rsquo;t let it become something that contributes to the harmful impostor syndrome growing within you.</p><h3 id="fake-it-until-you-make-it">5. Fake It Until You Make It</h3><p>For this point, I&rsquo;m not encouraging you to sell yourself with lies about your background or what you&rsquo;re capable of. Impostor syndrome relates to feelings of inadequacy when you are already more than adequate, not when you set yourself up for a job you were never a good fit for.</p><p>What I mean by &ldquo;fake it until you make it&rdquo; is faking confidence and satisfaction with your work.</p><p>For example, let&rsquo;s say it&rsquo;s time to present the fintech mobile app you created to the client. Don&rsquo;t present it to them with doubts and negative talk. Instead, take the lead, get excited about the app and show them how amazing it is.</p><p>I used to work in customer service and one of the things they used to teach us was to smile every time we picked up the phone. I know, it sounds silly. It&rsquo;s not like the customer can even see you smile. But there&rsquo;s research that suggests that forcing a smile on your face can actually impact the way you feel and how you carry yourself.</p><p>The same thing can happen when you fake confidence and happiness with your work. By forcing yourself to push the impostor thoughts and statements aside, you get into the habit of reflecting positively on what you do. And once you see that supported by how others react to your work, eventually you&rsquo;ll realize you were never an impostor.</p><p>Another thing to do is catch yourself whenever you use negative words to describe yourself or your work, like &ldquo;I can&rsquo;t,&rdquo; &ldquo;I hate&rdquo; or &ldquo;I won&rsquo;t.&rdquo; Rephrase them using positive words. Even just reframing the situation and your thoughts can have a positive effect on your mindset.</p><p>This can have long-reaching effects on your career, too.</p><p>For instance, once you gain confidence in the everyday tasks you do, you can take things to the next level. With this confidence, you&rsquo;ll be able to take more risks and accept more challenges. And if you&rsquo;re hit with another wave of impostor syndrome, don&rsquo;t sweat it. Even if it doesn&rsquo;t feel right, your mind will eventually catch up with what everyone else already knows and believes about your capabilities.</p><h2 id="wrapping-up">Wrapping Up</h2><p>You are not an impostor. Those feelings and thoughts you&rsquo;re having? Most creatives get them at some point in their career.</p><p>In the beginning, those doubts may come from being a newbie when everyone else around you seems to have it all figured out. It&rsquo;s natural to wonder if you&rsquo;re good enough and how long it&rsquo;ll last as it seems too good to be true.</p><p>What&rsquo;s more, working as a creative is a lot different from, say, an accountant who works with hard facts and numbers. You&rsquo;re coming up with something completely new. While you&rsquo;re building something for a client or employer to use, it all comes from within <em>you</em>. And it can be hard to separate yourself from the outcomes or feedback associated with your work.</p><p>Impostor syndrome is going to happen. What matters is what you do with it.</p><p>I really enjoyed this quote that Dr. Ami Rokach of York University gave to the APA as it shows how impostor syndrome can be turned into a positive:</p><blockquote><p>&ldquo;Impostor phenomenon is a spectrum, not binary. Just as high achievement can fuel impostor phenomenon in self-doubting people, impostor feelings can fuel high achievement, which would enhance one&rsquo;s beliefs in his or her abilities and achievement.&rdquo;</p></blockquote><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">Stop Building Generic Software</h4></div><div class="col-8"><p class="u-fs16 u-mb0"><a target="_blank" href="https://www.telerik.com/blogs/stop-building-generic-software">Stop trying to build</a> what already exists. Start building what sets you apart.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17198997.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:f802903c-59f7-4930-aea9-9cd9081f5188</id>
    <title type="text">Setting Up Web Development Environment for Windows</title>
    <summary type="text">Follow these tips to help you set up (or optimize) your development space on Windows.</summary>
    <published>2025-10-02T14:04:54Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>David Adeneye Abiodun </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17175959/setting-up-web-development-environment-windows"/>
    <content type="text"><![CDATA[<p><span class="featured">Follow these tips to help you set up (or optimize) your development space on Windows.</span></p><p>Web development on Windows has come a long way. With tools like Windows Subsystem for Linux (WSL 2), Windows Terminal and modern runtime managers, you can now set up a fast, reliable and unix-friendly workflow without leaving Windows.</p><p>In this guide, we&rsquo;ll walk through everything you need to set up a modern web development environment. From installing WSL 2 and mapping your Linux file system to customizing your shell with Zsh and managing runtimes with Node Version Manager (NVM) and launching your first frontend project with Vite, we&rsquo;re covering the full-stack of modern tooling for web development. </p><p>Whether you&rsquo;re a new developer getting started or an experienced one setting up a fresh machine, this guide covers everything you need to set up a modern web development project.</p><p>&nbsp;</p><h3 id="prerequisites">Prerequisites</h3><ul><li><strong>Operating System</strong>: Windows 10 (version 2004 or higher) or Windows 11</li><li><a target="_blank" href="https://github.com/"><strong>GitHub Account</strong></a>: Required for version control and syncing with repositories</li></ul><h2 id="setting-up-the-windows-development-environment-the-foundation">Setting Up the Windows Development Environment [The Foundation]</h2><p>In this section, we will guide you through the installation and configuration of essential tools that establish the foundation of a modern development environment workflow on Windows.</p><h3 id="setting-up-and-configuring-windows-subsystem-for-linux-wsl">Setting Up and Configuring Windows Subsystem for Linux (WSL)</h3><p>One of the first and most important steps in setting up your Windows dev environment is installing <a target="_blank" href="https://learn.microsoft.com/en-us/windows/wsl/about">Windows Subsystem for Linux (WSL)</a>. WSL lets you run a Linux environment directly on Windows&mdash;no virtual machine or dual-booting required.</p><p>I recommend using Ubuntu as your primary Linux distribution, but you&rsquo;re free to try others. Most systems can run multiple Linux distributions concurrently without issues.</p><h3 id="installing-and-configuring-wsl2">Installing and Configuring WSL2</h3><p>WSL 2 is the latest version of the subsystem, offering a real Linux kernel and full system call compatibility. Previously, installation required several manual steps, but it is now easier than ever to install with a single command in PowerShell.</p><h3 id="to-install-wsl-2">To Install WSL 2</h3><p>Open <strong>PowerShell</strong> as <strong>Administrator</strong> and run the following command:</p><pre><code>wsl --install

</code></pre><p>This command will do the following:</p><ul><li>Enable required WSL and VM platform components</li><li>Download and install the latest Linux kernel</li><li>Set WSL 2 as the default version</li><li>Install Ubuntu as the default distribution (you may need to restart your system)</li></ul><p>Once installation is complete, launch Ubuntu from the Start menu. It will take a few moments to initialize. Then, you will be prompted to create a UNIX username and password, which are separate from your Windows credentials.</p><p>It is also recommended that you regularly update and upgrade your packages. To do that, run the following command:</p><pre><code>sudo apt update &amp;&amp; sudo apt upgrade -y
</code></pre><h3 id="mapping-your-linux-drive">Mapping Your Linux Drive</h3><p>By default, Windows File Explorer shows your devices and drives. To streamline access, we&rsquo;ll map the Ubuntu virtual drive as a network location.</p><p>Open <code class="inline-code">\\wsl$\</code> location from the file explorer. This will display all your installed WSL distributions, then follow the instructions below:</p><ol><li>Right-click on the Ubuntu folder, and select &ldquo;Map network drive&rdquo;:</li><li>Choose the drive letter (e.g., <code class="inline-code">Z:</code>).</li><li>Check Reconnect at sign-in.</li><li>Click Finish</li></ol><p>Below is the step-by-step demo image:</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-09/mapping-linux-drive.gif?sfvrsn=1490aa79_2" alt="Mapping your Linux Drive in Window" /></p><blockquote><p>Your Linux home directory is now accessible from Windows as a network drive. From within the Linux terminal, you can access Windows files under <code class="inline-code">/mnt/</code> (e.g., <code class="inline-code">/mnt/c/Users/your_username</code>).</p></blockquote><p>This configuration enables easy file transfers between Windows and Linux via drag-and-drop or copy-and-paste.</p><h3 id="restarting-wsl">Restarting WSL</h3><p>If WSL runs into issues or stops working, you can restart it with:</p><pre><code>wsl.exe --shutdown
wsl.exe
</code></pre><p>That should bring everything back to normal.</p><h3 id="important-considerations-when-using-wsl">Important Considerations When Using WSL</h3><p>If you&rsquo;re building web projects using WSL, there are a few critical things to keep in mind to improve performance and cross-platform compatibility:</p><ul><li><strong>File system performance:</strong> For best performance, store your project files within the Linux file system (e.g., <code class="inline-code">/home/username/</code>). Avoid working directly from mounted Windows paths (<code class="inline-code">/mnt/c/&hellip;</code>) as this can slow down tools like Node.js, npm and webpack.</li><li><strong>Line ending consistency:</strong> Linux uses <code class="inline-code">LF</code>, while Windows uses <code class="inline-code">CRLF</code>. To prevent broken scripts or weird Git diffs, add a .gitattributes file to your project to enforce consistent line endings.</li><li><strong>Path format differences:</strong> Path syntax differs between systems&mdash;Windows uses paths like <code class="inline-code">C:\Users\...</code>, while Linux uses <code class="inline-code">/home/username</code>. Be mindful of this when setting environment variables, running scripts or configuring Docker.</li><li><strong>Permissions and privileges:</strong> Some operations in WSL&mdash;such as installing packages, accessing system directories or opening privileged ports&mdash;may require elevated privileges. Use <code class="inline-code">sudo</code> where necessary, just like in a traditional Linux setup.</li></ul><h3 id="setting-up-windows-terminal">Setting Up Windows Terminal</h3><p>You can launch the Linux terminal by either opening Ubuntu from the Start menu or running <code class="inline-code">wsl</code> from PowerShell or Command Prompt. </p><p>For a more feature-rich experience with features such as tabs, split panes, theming and key bindings, consider using Windows Terminal. It&rsquo;s modern, fast and works seamlessly with WSL. While alternatives like Cmder, ConEmu and Hyper exist, in my experience, Windows Terminal provides the most reliable and developer-friendly setup for daily use.</p><h3 id="installing-and-customizing-windows-terminal">Installing and Customizing Windows Terminal</h3><p>If you&rsquo;re using Windows 11, it&rsquo;s built in. If you&rsquo;re using Windows 10, install it via <a target="_blank" href="https://apps.microsoft.com/detail/9n0dx20hk701?hl=en-GB&amp;gl=NG">Microsoft Store</a> or PowerShell:</p><pre><code>winget install --id=Microsoft.WindowsTerminal -e
</code></pre><p>I recommend customizing your terminal settings, such as setting the default profile and starting directory, to streamline your workflow. This means that every time you launch Windows Terminal, it opens directly into your WSL environment inside your Linux user&rsquo;s home directory.</p><p>Follow these instructions to set up your <strong>Default Profile</strong>:</p><ol><li>Open Windows Terminal.</li><li>Click the <strong>down arrow</strong> <code class="inline-code">v</code> next to the tab button and choose <strong>Settings</strong>.</li><li>Under <strong>Startup section</strong>, set <strong>Default profile</strong> to <strong>Ubuntu</strong>.</li></ol><p>Below is the step-by-step demo image of the instruction above:</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-09/default-profile-in-window-terminal.gif?sfvrsn=acc7dcd2_2" alt="Setting Default Profile in Windows Terminal" /></p><p>Follow these instructions to set up <strong>Starting Directory</strong>:</p><ol><li>In Settings, go to <strong>Profiles</strong> &gt; <strong>Ubuntu</strong>.</li><li>Under the <strong>General</strong> tab, find <strong>Starting directory</strong>.</li><li>Enter the following: <code class="inline-code">\\wsl$\Ubuntu\home\your_username</code>. Make sure to replace <code class="inline-code">your_username</code> with your actual Ubuntu username.</li></ol><p>You can leave the <code class="inline-code">use parent process directory</code> box unchecked.</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-09/starting-directory-in-window-terminal.png?sfvrsn=88d1b1_2" alt="Setting Starting Directory in Windows Terminal" /></p><blockquote><p>You can also explore deeper customization via the JSON config file or by visiting Windows Terminal Themes for community themes.</p></blockquote><h2 id="setting-up-git-and-github">Setting Up Git and GitHub</h2><p>Git is essential for version control in development, while GitHub provides a platform to host, manage and collaborate on your code repositories.</p><h3 id="installing-and-configuring-git">Installing and Configuring Git</h3><p>Git usually comes preinstalled on most Linux distributions via WSL. But to verify you have it (or the most up-to-date version), run the following command:</p><pre><code>sudo apt update &amp;&amp; sudo apt install git
</code></pre><p>Next, set your global Git identity:</p><pre><code>git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"
</code></pre><p>You can confirm the settings with:</p><pre><code>git config --list
</code></pre><h3 id="generating-ssh-keys-for-github">Generating SSH Keys for GitHub</h3><p>Using SSH with GitHub allows you to authenticate securely without entering your username and password each time. To generate SSH keys for GitHub, follow these steps:</p><h4 id="generate-a-new-ssh-key">1. Generate a New SSH Key</h4><p>Execute the following command (replace the placeholder with your GitHub email address):</p><pre><code>ssh-keygen -t ed278490 -C "youremail@example.com"
</code></pre><blockquote><ul><li><code class="inline-code">-t ed25519</code> uses the modern and secure Ed25519 algorithm.</li><li><code class="inline-code">-C</code> adds a label for your key (usually your email).</li></ul></blockquote><p>When prompted:</p><ul><li>Press Enter to accept the default file location (<code class="inline-code">~/.ssh/id_ed25519</code>).</li><li>Choose a passphrase if you&rsquo;d like to add security (optional but recommended).</li></ul><h4 id="start-the-ssh-agent">2. Start the SSH Agent</h4><p>Make sure the SSH agent is running:</p><pre><code>eval "$(ssh-agent -s)"

</code></pre><h4 id="add-your-key-to-the-ssh-agent">3. Add Your Key to the SSH Agent</h4><pre><code>ssh-add ~/.ssh/id_ed25519
</code></pre><blockquote><p>If you used a custom name or location for the key, update the path accordingly.</p></blockquote><h4 id="add-the-public-key-to-your-github-account">4. Add the Public Key to your Github Account</h4><p>First, copy your public key to the clipboard:</p><pre><code>cat ~/.ssh/id_ed25519.pub
</code></pre><p>Then:</p><ol><li>Log in to GitHub.</li><li>Go to <a target="_blank" href="https://github.com/settings/keys">https://github.com/settings/keys</a>.</li><li>Click &ldquo;New SSH key.&rdquo;</li><li>Paste the key, give it a descriptive title (e.g., &ldquo;WSL Dev Machine&rdquo;) and save.</li><li>Test Your SSH Connection. Run the following command to verify that everything is working:</li></ol><pre><code>ssh -T git@github.com
</code></pre><p>If setup is successful, you&rsquo;ll see:</p><pre><code>Hi your-username! You've successfully authenticated, but GitHub does not provide shell access.
</code></pre><h2 id="amplifying-your-shell-with-zsh-and-oh-my-zsh">Amplifying Your Shell with Zsh and Oh My Zsh</h2><p>Zsh is a powerful, user-friendly alternative to Bash. When combined with Oh My Zsh, it delivers a highly customizable, feature-rich shell experience with themes, plugins and smart defaults.</p><h3 id="installing-zsh">Installing ZSH</h3><pre><code>sudo apt install zsh
</code></pre><p>Then, set Zsh as your default shell:</p><pre><code>chsh -s $(which zsh)
</code></pre><blockquote><p>You may need to restart your terminal or log out and back in for the change to take effect.</p></blockquote><h3 id="installing-oh-my-zsh">Installing Oh My Zsh</h3><p><a target="_blank" href="https://ohmyz.sh">Oh My Zsh</a> is a popular framework that makes managing your Zsh configuration easier, with support for themes, plugins, aliases and more.</p><p>First, install <code class="inline-code">curl</code>:</p><pre><code>sudo apt install curl
</code></pre><p>Then install Oh My Zsh using the official install script:</p><pre><code>sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
</code></pre><p>Once installed, your terminal will automatically switch to Zsh and load the new config. You can start customizing it via your <code class="inline-code">~/.zshrc</code> file.</p><h2 id="adding-themes-and-plugins-optional-but-fun">Adding Themes and Plugins (Optional but Fun)</h2><p>This section is optional, but if you&rsquo;re like me and enjoy a customized terminal, here&rsquo;s where things get exciting.</p><h3 id="install-powerlevel10k-theme">Install Powerlevel10k Theme</h3><p><a target="_blank" href="https://github.com/romkatv/powerlevel10k">Powerlevel10k</a> is a fast, responsive and visually rich Zsh theme with Git integration, segment prompts, icons and more.</p><p>Clone the theme into your Oh My Zsh custom themes directory:</p><pre><code>git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
</code></pre><p>Then open your <code class="inline-code">~/.zshrc</code> file and update the theme setting:</p><pre><code>ZSH_THEME="powerlevel10k/powerlevel10k"
</code></pre><h3 id="install-useful-plugins">Install Useful Plugins</h3><ul><li><strong>zsh-autosuggestion</strong>: This plugin provides real-time command suggestions as you type:</li></ul><pre><code>git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
</code></pre><ul><li><strong>zsh-syntax-highlighting</strong>: This plugin adds syntax highlighting to commands in your terminal:</li></ul><pre><code>git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
 ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
</code></pre><h3 id="enable-the-plugins">Enable the Plugins</h3><p>Edit your <code class="inline-code">~/.zshrc</code> file and add the plugins to the list:</p><pre><code>plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
</code></pre><p>Then apply the changes:</p><pre><code>source ~/.zshrc
</code></pre><h3 id="configure-powerlevel10k">Configure PowerLevel10K</h3><p>To customize the look and feel of your terminal, run:</p><pre><code>p10k configure
</code></pre><p>This launches an interactive wizard where you can choose your preferred prompt style, icons, layout and more.</p><blockquote><p>You can always rerun the configuration later with the same command.</p></blockquote><p>Want more? Check out the <a target="_blank" href="https://github.com/unixorn/awesome-zsh-plugins">Awesome Zsh Plugins</a> repo for a curated list of themes, plugins and other Zsh goodies.</p><h2 id="installing-node.js">Installing Node.js</h2><p>Node.js is essential for modern JavaScript development. It brings server-side capabilities to JavaScript, allowing you to build servers, APIs, backend services and tools using the same language that powers the browser.</p><h3 id="installing-nvm-node-version-manager">Installing NVM (Node Version Manager)</h3><p>When working on multiple projects, you&rsquo;ll often need to switch between different versions of Node.js. Node Version Manager (NVM) makes this easy by allowing you to install, manage and switch between Node.js versions directly from the command line.</p><p>To install NVM, run the following command in your terminal:</p><pre><code>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
</code></pre><p>After installation, activate NVM with:</p><pre><code>export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] &amp;&amp; \. "$NVM_DIR/nvm.sh"
</code></pre><blockquote><p>Add the two lines above to your ~/.zshrc or ~/.bashrc so NVM loads automatically whenever a new shell session starts.</p></blockquote><h3 id="installing-node.js-via-nvm">Installing Node.js via NVM</h3><p>Run the following command to install the latest LTS (Long-Term Support) version of Node.js:</p><pre><code>nvm install --lts
</code></pre><p>Set it as the default version:</p><pre><code>nvm alias default node
</code></pre><p>Verify that Node and npm are available:</p><pre><code>node --version
npm --version
</code></pre><blockquote><p>LTS versions are stable, well-supported and recommended for most development and production workflows.</p></blockquote><h3 id="installing-and-using-pnpm-optional">Installing and Using pnpm (Optional)</h3><p>If you care about performance and disk space efficiency, consider using <code class="inline-code">pnpm</code>. It&rsquo;s a modern alternative to <code class="inline-code">npm</code> and <code class="inline-code">yarn</code> that installs packages faster by using a content-addressable storage mechanism.</p><p>Run the following command to initialize a new project:</p><pre><code> pnpm init
</code></pre><p>Use the following command to install dependencies:</p><pre><code>pnpm install package-name
</code></pre><p>To install a package globally:</p><pre><code>pnpm install package-name

</code></pre><h2 id="using-package-managers-on-windows-chocolatey--scoop">Using Package Managers on Windows: Chocolatey &amp; Scoop</h2><p>Package managers streamline software installation, updates and maintenance&mdash;much like <code class="inline-code">apt</code> on Linux or <code class="inline-code">brew</code> on macOS. On Windows, the two most popular options are Chocolatey and Scoop.</p><h3 id="chocolatey">Chocolatey</h3><p>Chocolatey is a powerful, full-featured package manager for Windows. It supports system-wide installations and thousands of packages, including CLI tools, applications and services.</p><h4 id="installing-chocolatey">Installing Chocolatey</h4><ol><li>Open <strong>PowerShell</strong> as <strong>Administrator</strong></li><li>Run the following:</li></ol><pre><code>Set-ExecutionPolicy Bypass -Scope Process -Force;
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
</code></pre><h4 id="using-chocolatey">Using Chocolatey</h4><ul><li>Install a package:</li></ul><pre><code>choco install &lt;package-name&gt; -y
</code></pre><ul><li>Upgrade all installed packages:</li></ul><pre><code>choco upgrade all -y
</code></pre><h3 id="scoop">Scoop</h3><p>Scoop is a simpler, developer-friendly package manager that installs tools into your user profile&mdash;no admin rights needed. Ideal for CLI tools and programming languages.</p><h4 id="installing-scoop">Installing Scoop</h4><ul><li>Open <strong>PowerShell (non-admin)</strong>.</li><li>Allow script execution:</li></ul><pre><code>Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
</code></pre><ul><li>Install Scoop:</li></ul><pre><code>iwr -useb get.scoop.sh | iex
</code></pre><h4 id="using-scoop">Using Scoop</h4><ul><li>Install a Package:</li></ul><pre><code>scoop install &lt;package-name&gt;
</code></pre><ul><li>Update all installed packages:</li></ul><pre><code>scoop update *
</code></pre><blockquote><p><strong>Recommendation</strong>: Both Chocolatey and Scoop are excellent. Use Chocolatey for system-wide installations (apps, services) and Scoop for developer tools and CLI utilities. You can even use them side by side without conflict.</p></blockquote><p>At this point, you can start your web development project with any web programming stack of your choice. Refer to the <strong>Further Resources</strong> section for reference.</p><h2 id="setting-up-your-first-web-project-with-vite">Setting Up Your First Web Project with Vite</h2><p>In the previous section, we covered some of the core tools you need to kick off any web development project on Windows. In this section, we&rsquo;ll walk through how to quickly scaffold a modern frontend project using Vite.</p><h3 id="setting-up-vite">Setting Up Vite</h3><p>Vite is a modern frontend build tool created by Evan You, designed to power the next generation of web applications. It offers features like instant server start, optimized builds, lightning-fast Hot Module Replacement (HMR) and out-of-the-box support for TypeScript, JSX, CSS and popular frameworks like React, Vue and more. With Vite, you can skip tedious manual setup and jump straight into building modern JavaScript applications.</p><p>To scaffold a new Vite project, run the following command:</p><pre><code>npm create vite@latest  my-first-project
</code></pre><p>This command will walk you through the project setup interactively.</p><p>Then Vite will prompt you select a framework:</p><pre><code>&gt; npx
&gt; "create-vite" my-first-project

│
◆  Select a framework:
│  ● Vanilla
│  ○ Vue
│  ○ React
│  ○ Preact
│  ○ Lit
│  ○ Svelte
│  ○ Solid
│  ○ Qwik
│  ○ Angular
│  ○ Marko
│  ○ Others
└
</code></pre><p>Vite can be used to bootstrap a range of frontend frameworks and libraries, so select <code class="inline-code">Vanilla</code> since we are scaffolding a plain vanilla web project.</p><p>Vite will ask you to choose a language, either JavaScript or TypeScript. You can choose whichever one you prefer for your project.</p><p>Use your arrow keys to make your selection. Here, <code class="inline-code">JavaScript</code> is selected:</p><pre><code>◆  Select a variant:
│  ○ TypeScript
│  ○ TypeScript + SWC
│  ● JavaScript
│  ○ JavaScript + SWC
│  ○ React Router v7 ↗
│  ○ TanStack Router ↗
│  ○ RedwoodSDK ↗
</code></pre><p>You can see other options with SWC. SWC (Speedy Web Compiler) is a JavaScript/TypeScript compiler used in Vite for transforming JavaScript and TypeScript code. It&rsquo;s a fast, low-level JavaScript and TypeScript compiler built with Rust, designed to deliver faster build times and better performance.</p><p>After setting up the framework, you will see an output that the project has been scaffolded in your project folder. Vite will then instruct you to install dependencies using npm (or the package manager you&rsquo;re using):</p><pre><code>◇  Scaffolding project in /Users/mac/my-first-project...
│
└  Done. Now run:
cd my-first-project
npm install
npm run dev

</code></pre><p>Navigate to your project folder as directed:</p><pre><code>$ cd my-first-project
</code></pre><p>Then install the dependencies for this project:</p><pre><code>$ npm install
</code></pre><p>Next, start the development server to verify everything is working. Use the following command to run the development server:</p><pre><code>$ npm run dev
</code></pre><p>This command will then run your project in development mode. It will prompt the following outputs:</p><pre><code>VITE v6.3.5  ready in 1227 ms
➜  Local:   http://localhost:5173/
➜  Network: use --host to expose
➜  press h + enter to show help
</code></pre><p>Next, click on the link (<code class="inline-code">http://localhost:5173/</code>) to open the project in your browser:</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-09/starting-vanilla-js-directory-in-window-terminal.png?sfvrsn=578c8778_2" alt="Scaffolding a JavaScript Vanilla project in Window" /></p><p>You can decide to use any code editor of your choice at this stage, but Visual Studio Code is my preferred code editor.</p><h2 id="setting-up-visual-studio-code">Setting Up Visual Studio Code</h2><p>Visual Studio Code (VS Code) has become one of the most popular code editors for web development, thanks to its simplicity, speed and rich plugin ecosystem that supports virtually any type of web project.</p><h3 id="installing-visual-studio-code">Installing Visual Studio Code</h3><p>You can download <a target="_blank" href="https://code.visualstudio.com/">VS Code from the official website</a>.</p><h3 id="configuring-vs-code-for-wsl">Configuring VS Code for WSL</h3><p>We will install and configure a <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack">Remote Development Extension Pack</a>. It&rsquo;s an extension that allows you to open any folder in a container, on a remote machine or WSL&mdash;while enjoying the full power of VS Code.</p><p>How to install the Remote Developer Extension:</p><ol><li>Open VS Code.</li><li>Go to the Extension view (<code class="inline-code">ctrl</code> + <code class="inline-code">shift</code> + <code class="inline-code">X</code>).</li><li>Search for <strong>Remote Development</strong>.</li><li>Click <strong>Install</strong>.</li></ol><p>Open WSL project in VS Code. This extension allows you to launch VS Code right from your WSL terminal by using just the <code class="inline-code">code</code> command. In your WSL terminal, navigate to your project directory and run the following command to open the entire directory of your project inside VS Code.</p><pre><code>cd my-first-project
code .
</code></pre><h3 id="top-vs-code-essential-extensions-for-web-development">Top VS Code Essential Extensions for Web Development</h3><p>There are numerous extensions in VS Code for web development. Here are my top five:</p><ul><li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=c0der-himel.vscode-wev-dev-extension-pack">Web Dev</a>: A bundle of popular tools for frontend development&mdash;includes <strong>Live Server</strong>, <strong>ESLint</strong>, <strong>JavaScript (ES6) Code Snippets</strong> and more. Instead of installing each tool individually, you can install this pack to streamline your setup.</li><li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode">Prettier</a>: Prettier is an opinionated code formatter for enforcing consistent style.</li><li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens">GitLens</a>: Supercharges Git integration inside VS Code. See line-by-line commit history, authorship and make Git workflows easier and more visual.</li><li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=dzhavat.bracket-pair-toggler">Bracket Pair Colorizer</a>: This extension enhances code readability by colorising matching brackets, making it easier to navigate and understand nested structures.</li><li><a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker">Code Spell Checker</a>: Helps catch typos in variable names, comments and documentation. Especially useful for maintaining code quality in larger codebases.</li></ul><p>You can explore more extensions on the official Visual Studio Marketplace and tailor your setup based on your project&rsquo;s needs.</p><h2 id="window-productivity-apps-and-browser-extensions-for-web-development">Windows Productivity Apps and Browser Extensions for Web Development</h2><p>In this section, I&rsquo;ll highlight a few productivity tools for Windows, along with some of my favorite browser extensions that help streamline and enhance my web development workflow.</p><h3 id="chrome-browser-extensions">Chrome Browser Extensions</h3><p>Google Chrome is my go-to browser for development, and these are some of the essential extensions I use to boost productivity:</p><ul><li><a target="_blank" href="https://react.dev/learn/react-developer-tools">React Developer Tools</a>: A must-have if you&rsquo;re working with React. It lets you inspect and debug React components, analyze state and props, and identify performance issues.</li><li><a target="_blank" href="https://chromewebstore.google.com/detail/web-developer/bfbameneiokkgbdmiekhjnmfkcnldhhm">Web Developer</a>: A powerful toolkit that allows you to disable images, scripts and styles; resize the viewport; and validate HTML and CSS. Perfect for testing and debugging.</li><li><a target="_blank" href="https://chromewebstore.google.com/detail/json-viewer-pro/eifflpmocdbdmepbjaopkkhbfmdgijcc">JSON Viewer Pro</a>: Automatically formats and highlights JSON data in the browser, making it easier to read and debug.</li><li><a target="_blank" href="https://chromewebstore.google.com/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk">Lighthouse</a>: Built by Google, this tool audits your web pages for performance, accessibility, SEO and best practices.</li><li><a target="_blank" href="https://chromewebstore.google.com/detail/css-peeper/mbnbehikldjhnfehhnaidhjhoofhpehk">CSS Peeper</a>: Lets you quickly inspect CSS styles on any website without digging through developer tools. Great for UI exploration or reverse-engineering layouts.</li></ul><p>You can check for an extension suitable for you at the <a target="_blank" href="https://chromewebstore.google.com/"></a><a target="_blank" href="https://chromewebstore.google.com/">Chrome Web Store</a>. Also, you can get the equivalent of the above-listed <a target="_blank" href="https://addons.mozilla.org/en-US/firefox/extensions/">extensions for Firefox here</a>.</p><h3 id="productivity-tools-for-windows">Productivity Tools for Windows</h3><p>Here are some of my favorite free productivity apps that I use regularly in my dev workflow:</p><ul><li><a target="_blank" href="https://learn.microsoft.com/en-us/windows/powertoys/?WT.mc_id=twitter-0000-docsmsft">Microsoft PowerToys</a>: A collection of utilities that help power users tweak and optimize their Windows experience (e.g., FancyZones, file renamer, quick window resizing).</li><li><a target="_blank" href="https://www.notion.com/">Notion</a>: A project management and note-taking software.</li><li><a target="_blank" href="https://www.figma.com/">Figma</a>: A cloud-based UI/UX design tool that makes real-time collaboration with designers seamless.</li><li><a target="_blank" href="https://slack.com/intl/en-gb/">Slack</a>: A wide used team communication and collaboration platform. Ideal for both work and open-source/community development teams.</li></ul><p>Using <strong>Chocolatey</strong>, you can download all these apps at once with the following command in PowerShell as an administrator:</p><pre><code>choco install powertoys notion figma slack -y
</code></pre><p>Chocolatey automates the setup process, so you don&rsquo;t have to download and install each tool manually.</p><h2 id="additional-development-environment-setup-optional">Additional Development Environment Setup [Optional]</h2><p>I added this section for developers who are either beginners, not frontend-focused or don&rsquo;t primarily work with JavaScript. It provides a quick walkthrough for setting up Docker with WSL and configuring a Python development environment inside WSL.</p><h3 id="docker">Docker</h3><p>According to the official documentation, Docker is an open platform for developing, shipping and running applications. It allows you to decouple your application from the underlying infrastructure, making it easier to build, test and deploy software quickly.</p><h4 id="installing-docker">Installing Docker</h4><p>Docker Desktop enables you to run containers natively on Windows using WSL 2. You can install Docker Desktop using one of two methods:</p><p><strong>Option 1 &ndash; Install via Chocolatey:</strong></p><pre><code>choco install docker-desktop
</code></pre><p><strong>Option 2 &ndash; Install from the official site:</strong> <a target="_blank" href="https://www.docker.com/products/docker-desktop">https://www.docker.com/products/docker-desktop</a></p><p>After downloading, run the installer and ensure to check the box labeled &ldquo;Use WSL 2 instead of Hyper-V&rdquo; during setup. Once the installation is complete, restart your computer.</p><h4 id="verifying-docker-installation">Verifying Docker Installation</h4><p>To verify that Docker is installed correctly, open your terminal and run:</p><pre><code>docker --version
</code></pre><p>Then run a test container to confirm everything is working:</p><pre><code>docker run hello-world
</code></pre><p>You should see a success message indicating Docker is functioning correctly.</p><blockquote><p>You&rsquo;re now fully set up with Docker on Windows via WSL&mdash;native, fast and container-ready.</p></blockquote><p>You can refer to <a target="_blank" href="https://docs.docker.com/">Docker&rsquo;s official documentation</a> to learn more about how to use Docker effectively on Windows.</p><h2 id="wrapping-up">Wrapping Up</h2><p>Congrats! That was a long read. But by now, you&rsquo;re not just ready to code, you&rsquo;re fully equipped for real-world web development on Windows. You&rsquo;ve installed and configured WSL 2, customized your terminal with Zsh and Oh My Zsh, set up Git and secure GitHub workflows with SSH, installed Node.js via NVM and even scaffolded your first frontend project with Vite. All on Windows&mdash;without needing to leave your OS or spin up a VM.</p><p>If JavaScript is your main stack, this setup gives you everything you need to build and run modern frontend and backend applications using tools like React, Vue, Angular, Next.js, Express.js or Nest.js. And if you&rsquo;re building with other stacks such as ASP.NET with Blazor, Python with Django, or Ruby on Rails, this environment setup still offers a solid foundation for web development on Windows. Just refer to the specific documentation for your chosen stack to complete your setup.</p><p>You have the tools and the setup, so now it&rsquo;s time to create magic.</p><p>Happy coding!</p><h3 id="further-resources">Further Resources</h3><ul><li><a target="_blank" href="https://www.telerik.com/blogs/blazor-basics-getting-started-blazor-development-visual-studio-2022">Blazor Basics: Getting Started with Blazor Development in Visual Studio 2022</a></li><li><a target="_blank" href="https://www.telerik.com/blogs/react-basics-getting-started-react-visual-studio-code">React Basics: Getting Started with React and Visual Studio Code</a></li><li><a target="_blank" href="https://www.telerik.com/blogs/vue-basics-getting-started-vuejs-visual-studio-code">Vue Basics: Getting Started with Vue.js and Visual Studio Code</a></li><li><a target="_blank" href="https://www.telerik.com/blogs/angular-basics-setting-angular-development-environment">Angular Basics: Setting Up Angular Development Environment</a></li><li><a target="_blank" href="https://docs.djangoproject.com/en/5.2/howto/windows/">How to Install Python &amp; Django on Windows</a></li><li><a target="_blank" href="https://www.telerik.com/blogs/learning-nestjs-part-1-getting-started">Learning NestJS Part 1: Getting Started</a></li></ul><img src="https://feeds.telerik.com/link/23073/17175959.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:f3cec785-fd2d-44e2-a12d-4ed49ad74a3f</id>
    <title type="text">Design, Code, Comply: Accessibility in Workforce Learning</title>
    <summary type="text">See how Resolute helped one client build a more functional, accessible and scalable web experience by instituting accessibility best practices and leveraging Progress tools.</summary>
    <published>2025-09-17T15:34:40Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Leman Pehlivanova </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17162050/design-code-comply-accessibility-workforce-learning"/>
    <content type="text"><![CDATA[<p><span class="featured">See how Resolute helped one client build a more functional, accessible and scalable web experience by instituting accessibility best practices and leveraging Progress tools.</span></p><p>In a world where most of our lives play out online, web accessibility shouldn&rsquo;t be treated as an afterthought. Designing with inclusivity in mind is no longer optional; it&rsquo;s essential. Just like a chair needs four sturdy legs to be safe for everyone, digital experiences need to be built with all users in mind.</p><p>But when the platform in question is educational, the stakes are even higher. These platforms serve a diverse range of learners&mdash;some with visual, auditory, motor or cognitive impairments, and face stricter accessibility requirements than general websites.</p><p>That&rsquo;s why <a target="_blank" href="https://www.resolutesoftware.com/">Resolute</a> was proud to partner with a U.S.-based company providing online training tools for frontline employees. The platform had recently been acquired by a leading provider of online compliance and workforce training, further raising the bar for performance, accessibility and scalability. The goal: build a more functional, accessible and scalable web experience.</p><h2 id="when-design-slows-you-down">When Design Slows You Down</h2><p>The project started with a familiar pain point: fragmentation. The client&rsquo;s design ecosystem was spread across multiple sources:</p><ul><li>An internal Figma library shaped by years of brand tweaks</li><li>A partially customized theme inside <a target="_blank" href="https://www.telerik.com/themebuilder">Progress ThemeBuilder</a></li><li>A live site with Progress Kendo UI components that didn&rsquo;t always align with the designs</li></ul><p>This led to confusion, delays and inconsistencies, especially around accessibility. Developers struggled to map designs to actual components. Theming was brittle. And certain UI patterns weren&rsquo;t usable for people relying on keyboard navigation or assistive technologies.</p><p>Resolute was brought in to clean it up, streamline the workflow and help the client move toward a more compliant and scalable solution.</p><h2 id="fixing-the-foundation-themebuilder-in-action">Fixing the Foundation: ThemeBuilder in Action</h2><p>Our UX/UI team began by auditing the client&rsquo;s existing design system. They worked closely with their internal team to unify the visual language and migrate it into Progress ThemeBuilder, which served as the central source of truth for styling and theming moving forward.</p><p>ThemeBuilder wasn&rsquo;t just a convenience; it helped enforce consistency in <a href="https://www.telerik.com/blogs/design-tokens-fundamental-building-blocks-design-systems" target="_blank">design tokens</a> like colors, borders and spacing, while also helping to align with accessibility best practices.</p><p><strong>The UX/UI team&rsquo;s work included:</strong></p><ul><li>Consolidating redundant button and form variations</li><li>Fixing visual issues with contrast, spacing and typography</li><li>Helping the design team understand how to use ThemeBuilder effectively to support long-term accessibility</li></ul><h2 id="from-visuals-to-code-accessibility-in-the-build">From Visuals to Code: Accessibility in the Build</h2><p>Once the design foundation was solid, our frontend team began implementing the new UI in code. Over several months, the platform&rsquo;s frontend was rebuilt with accessibility as a core requirement, focusing not just on how it looked, but how it worked for every user.</p><p>This wasn&rsquo;t just about good UX; it was also about meeting real compliance needs. Since the platform serves a broad user base in the U.S., including educational and government-affiliated organizations, several legal standards apply, including:</p><ul><li><strong>ADA (Americans with Disabilities Act)</strong>: Particularly Title III, which applies to educational institutions and commercial websites</li><li><strong>Section 508 of the Rehabilitation Act</strong>: For platforms receiving federal funding or working with government entities</li></ul><p>To meet these requirements, we aligned the build with <strong>WCAG 2.1 Level AA</strong> guidelines developed by the <a target="_blank" href="https://www.w3.org/TR/WCAG21/">W3C</a> (World Wide Web Consortium), currently the most widely used benchmark for web accessibility in the U.S.</p><p><strong>What that looked like in code:</strong></p><ul><li>Every interactive element was accessible via <strong>keyboard navigation</strong> (tab, arrows, etc.).</li><li>Clear, visible <strong>focus states</strong> were implemented for all buttons, links and forms.</li><li>We structured the app using <strong>semantic HTML</strong> and applied <strong>ARIA roles</strong> for assistive tech (e.g., <code class="inline-code">&lt;button&gt;</code>, <code class="inline-code">&lt;nav&gt;</code>, <code class="inline-code">&lt;form&gt;</code>). Yet, we applied ARIA roles only when necessary for custom components or non-semantic elements, avoiding over-reliance on ARIA. It&rsquo;s crucial to use ARIA only when native HTML elements can&rsquo;t provide the required functionality.</li><li>For use cases beyond the default configurations of Kendo UI or ThemeBuilder, we wrote <strong>custom HTML overrides</strong>.</li><li>Duplicate labels or screen reader confusion were avoided using attributes like <code class="inline-code">aria-hidden="true"</code> where needed.</li></ul><p>Testing was both automated and manual. Tools like <a target="_blank" href="https://chromewebstore.google.com/detail/axe-devtools-web-accessib/lhdoppojpmngadmnindnejefpokejbdd">axe DevTools</a>, <a target="_blank" href="https://wave.webaim.org/">WAVE</a> and ChromeVox helped flag contrast issues, label duplication and navigation traps. But human testing mattered just as much. Therefore, a touchscreen laptop was used to simulate real user scenarios, check responsiveness and validate how elements behaved across screen sizes and input types.</p><h2 id="when-customization-adds-complexity">When Customization Adds Complexity</h2><p>Telerik ThemeBuilder and Kendo UI offer strong accessibility features, but when components are heavily customized, unexpected issues can appear. Resolute helped the client troubleshoot several edge cases:</p><ul><li>Buttons built without the base component didn&rsquo;t render properly</li><li>Some forms displayed labels twice to screen readers (e.g., &ldquo;Username Username&rdquo;)</li><li>Blazor components lacked alt-text bindings, requiring a workaround</li></ul><p>None of these problems were dealbreakers, but they showed how expertise matters. Without frontend developers who understand both the framework and accessibility requirements, these issues could have gone unnoticed.</p><h2 id="accessibility--structure--semantics--seo">Accessibility = Structure + Semantics + SEO</h2><p>There&rsquo;s another benefit to building with accessibility in mind: better search engine optimization (SEO). Many of the same practices that support users with disabilities, like using <a target="_blank" href="https://www.telerik.com/blogs/why-semantic-html-matters-introductory-guide-new-developers">semantic HTML</a>, a well-structured HTML DOM (Document Object Model) and meaningful headings, also help search engines understand and rank your content.</p><p>The frontend implementation in this case included:</p><ul><li>One <code class="inline-code">&lt;h1&gt;</code> per page, with clean heading hierarchies for structure like <code class="inline-code">&lt;h2&gt;</code> for sections and <code class="inline-code">&lt;h3&gt;</code> inside components</li><li>Alt-text for all meaningful images</li><li>Descriptive link text and accessible navigation</li></ul><p>The result? A platform that&rsquo;s easier to use, more discoverable and legally compliant.</p><h2 id="knowledge-transfer-matters">Knowledge Transfer Matters</h2><p>Resolute&rsquo;s role expanded beyond design and development work. We trained the client&rsquo;s internal team to maintain and build on the system with accessibility in mind. That included:</p><ul><li>Documenting all accessibility decisions and techniques used</li><li>Providing reusable design patterns in ThemeBuilder</li><li>Running training sessions on WCAG basics and development workflow tips</li></ul><p>Accessibility isn&rsquo;t something you do once. It&rsquo;s a practice. So, we made sure the team could carry that forward.</p><h2 id="final-thoughts">Final Thoughts</h2><p>Accessibility is a shared responsibility&mdash;across design, development and leadership. Our client understood that, and, with the right tools and support, made serious progress toward a platform that works for everyone.</p><p>Progress ThemeBuilder helped streamline and standardize the design-to-code process. Resolute helped connect the dots by aligning compliance, usability and long-term scalability.</p><p>Learn more about how Resolute can help address usability issues, starting with the <a target="_blank" href="https://www.resolutesoftware.com/services/ux-assessment/">UX Assessment</a>.</p><img src="https://feeds.telerik.com/link/23073/17162050.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:497677e1-b51e-403f-b8e5-aa21b2eb5ff5</id>
    <title type="text">You’re Invited! Join Progress &amp; Microsoft for a Free VS Code Dev Days Event!</title>
    <summary type="text">We hope you can join us in person or virtually as Progress and Microsoft host VS Code Dev Days events—free of charge!</summary>
    <published>2025-09-12T16:50:24Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Sara Faatz </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17142693/join-progress-microsoft-free-vs-code-dev-days-event"/>
    <content type="text"><![CDATA[<p><span class="featured">We hope you can join us in person or virtually as Progress and Microsoft host VS Code Dev Days events&mdash;free of charge!</span></p><p>It is no secret that AI has turned the world upside down and inside out. And what better way to make sense of it all than by attending an information-filled VS Code Dev Days event?!</p><p>This year, we are joining forces with Microsoft and Growth Acceleration Partners to cohost six global VS Code Dev Days events, and you&rsquo;re invited to attend! There is no cost to attend.</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-09/vs-code-dev-days.jpg?sfvrsn=c6617a70_2" alt="VS Code Dev Days - Join our series of in-person community events" /></p><p>Events Produced by Progress, Growth Acceleration Partners &amp; Microsoft:</p><table><thead><tr><th style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">City</th><th style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">Date</th><th style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">Time</th></tr></thead><tbody><tr><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a target="_blank" href="https://www.eventbrite.com/e/1641243115339">Chicago, IL - USA</a></td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">September 24, 2025</td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">6 p.m. &ndash; 9 p.m.</td></tr><tr><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a target="_blank" href="https://www.eventbrite.com/e/1641249364029">Raleigh, NC - USA</a></td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">September 30, 2025</td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">3 p.m. &ndash; 6 p.m.</td></tr><tr><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a target="_blank" href="https://www.eventbrite.com/e/1641244900679">Sofia, Bulgaria</a></td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">September 30, 2025</td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">6 p.m. &ndash; 9 p.m.</td></tr><tr><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a target="_blank" href="https://www.eventbrite.com/e/1641261470239?aff=oddtdtcreator">Boston/Burlington, MA - USA</a></td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">October 7, 2025</td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">9 a.m. - Noon</td></tr><tr><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a target="_blank" href="https://www.eventbrite.com/e/1641252453269">San Jose, Costa Rica</a></td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">October 10, 2025</td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">3 p.m. &ndash; 6 p.m.</td></tr><tr><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a target="_blank" href="https://www.eventbrite.com/e/1641247167459">Tulsa, OK - USA</a></td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">October 13, 2025</td><td style="width:33.3333%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">6 p.m. &ndash; 9 p.m.</td></tr></tbody></table><br /><p>At each event, you will be treated to two talks (&ldquo;Essential Techniques for GitHub Copilot in VS Code&rdquo; and &ldquo;Intro to Telerik AI Coding Assistants &amp; Progress Agentic RAG&rdquo;) and an interactive (&ldquo;Lab: Exploring VS Code and GitHub Copilot&rdquo;). Sessions will be led by Microsoft employees as well as Progress and Growth Acceleration Partners folks.</p><p>If you can&rsquo;t make one of the events we&rsquo;re hosting, do not fear&mdash;there are more than 60 VS Code Dev Days events taking place all around the world! They are all free and anyone can join&mdash;whether as seasoned professionals or newcomers to AI-assisted workflows.</p><p>Visit <a target="_blank" href="https://aka.ms/VSCode/DevDays">aka.ms/VSCode/DevDays</a> to find an event near you!</p><p>And if none of the in-person events work for you, Microsoft has scheduled <strong>special virtual editions</strong> featuring sessions packed with demos and practical tips&mdash;register today!</p><table><thead><tr><th data-role="resizable" style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><strong>Event</strong></th><th style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;" data-role="resizable"><strong>Language</strong></th><th style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><strong>Date</strong></th><th style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><strong>Time (UTC)</strong></th></tr></thead><tbody><tr><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a href="https://aka.ms/vscodedevdays/brasil">VS Code Dev Days: Brasil</a></td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">Portugu&ecirc;s</td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">September 23</td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">15:00</td></tr><tr><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a href="https://www.telerik.com(https://aka.ms/vscodedevdays/apac)">VS Code Dev Days: APAC</a></td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">English</td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">September 23</td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">12:30</td></tr><tr><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a href="https://aka.ms/vscodedevdays/latam">VS Code Dev Days: LATAM</a></td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">Espa&ntilde;ol</td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">September 24</td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">18:00</td></tr><tr><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;"><a href="https://aka.ms/vscode/devdays/ww-r">VS Code Dev Days: Worldwide</a></td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">English</td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">September 25</td><td style="width:25%;border-width:1px;border-style:dotted;border-color:#bdbdba;padding:5px;margin:5px;">16:00</td></tr></tbody></table><br /><p>VS Code Dev Days is an opportunity to learn the latest in developer productivity and AI-assisted coding while also interacting with your peers. We hope to see you at a local event this fall!</p><p>Happy coding! </p><img src="https://feeds.telerik.com/link/23073/17142693.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:b734414c-cb5b-4cb4-be34-c25bdc9c166f</id>
    <title type="text">Innovation Starts with Standards</title>
    <summary type="text">Don’t change the base. Lift it. Innovation happens when contribution becomes the edge.</summary>
    <published>2025-09-11T12:20:46Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Teon Beijl </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17141836/innovation-starts-standards"/>
    <content type="text"><![CDATA[<p><span class="featured">Don&rsquo;t change the base. Lift it. Innovation happens when contribution becomes the edge.</span></p><p>You try to stand out. They should use your product, not your competitor&rsquo;s.</p><p>So what do you do? You look for a competitive edge. You differentiate. You change how people work. But at what cost?</p><h2 id="the-illusion-of-differentiation">The Illusion of Differentiation</h2><p>Change is inevitable. But when we change to stand out, we sacrifice the one thing we have in common: standards. This hurts innovation.</p><p>There&rsquo;s an illusion that if you differentiate, you automatically improve, and therefore innovate.</p><p>But what happens when you change the basics? You demolish foundations industries are built on. You disrupt the mental models people rely on. You reset muscle memory, increase human error and force users to rebuild momentum.</p><p><strong>Is that innovation&mdash;or disruption dressed as progress?</strong></p><h2 id="the-hardware-software-gap">The Hardware-Software Gap</h2><p>If you look at hardware, you see that standards are everywhere. You can&rsquo;t push a product to market without compliance to standards. All the gates, checks, audits and certifications protect the firm foundation the industry depends on.</p><p>If you want change the standards, you have to contribute. That doesn&rsquo;t mean there&rsquo;s no innovation. On the contrary. Companies focus all their resources on improving what&rsquo;s built on top of those foundations&mdash;the systems and tools that can be integrated and replaced. Lower risk of change. More opportunity for improvement.</p><p>So, why do we stop at domain standards when we build software? Why do we have the liberty to invent our own models, semantics and extensions?</p><p>If users work with software built on the same standards, the same foundation, they stay productive. You improve the workflow. <em>Make it the same but better, not different.</em></p><p>This liberty to experiment and evolve creates momentum: no big, irreversible transitions. I&rsquo;ve seen what happens when products rely on the difference instead of the default.</p><p><strong>Adoption never catches up with potential.</strong></p><h2 id="a-call-to-contribute">A Call to Contribute</h2><p>Start standardizing industries. Help standardize software.</p><p>How? Be more transparent. Build in public. Contribute and implement standards. Share your systems and your semantics, and document your ideas.</p><p>Protect your IP&mdash;but promote the idea. The idea of changing the industry together.</p><p>Don&rsquo;t fiddle with the foundations. Get everyone on the same page. Use the same protocols. Stick to shared formats. Make systems easy to exchange.</p><p>People who build in public&mdash;and with the public&mdash;earn trust and raise the bar for everyone.</p><p><strong>That kind of contribution grows the pie, not just your slice.</strong></p><h2 id="closing">Closing</h2><p>Imagine a world where we work together, get more done with less and use resources wisely.</p><p>Collaborations and contributions that achieve more than ever before. Where you and your competition both contribute, and the industry rises.</p><p><strong>Don&rsquo;t change the base. Lift it.</strong></p><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">You Can&rsquo;t Design the Experience</h4></div><div class="col-8"><p class="u-fs16 u-mb0"><a target="_blank" href="https://www.telerik.com/blogs/you-cant-design-experience">UX isn&rsquo;t something you design</a>&mdash;it&rsquo;s what happens. Learn why great UX means shaping the environment, not dictating the experience.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17141836.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:cf1f032d-a197-4d94-9135-2f41d9c5d656</id>
    <title type="text">12 Inspiring Web Designer &amp; Developer Resumes</title>
    <summary type="text">Whether you’re seeking a new full-time job or some part-time gigs, you’ll need to get your resume in order. See some interesting and inspiring examples from designers and developers around the world.</summary>
    <published>2025-09-05T14:36:02Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Suzanne Scacca </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17136700/12-inspiring-web-designer-developer-resumes"/>
    <content type="text"><![CDATA[<p><span class="featured">Whether you&rsquo;re seeking a new full-time job or some part-time gigs, you&rsquo;ll need to get your resume in order. See some interesting and inspiring examples from designers and developers around the world.</span></p><p>It might seem counterintuitive as a designer or developer to bother with a resume. After all, your work speaks for itself. Isn&rsquo;t that all that employers need to see?</p><p>Sure, they might love the work they see in your portfolio, but is that enough? For some, it&rsquo;s not. The problem with relying solely on a portfolio is it doesn&rsquo;t give prospective employers extra details about your background, skills or personality that also factor into hiring decisions. They want to know where you acquired your skills from and what else makes you a standout candidate.</p><p>In today&rsquo;s job market, you also have to think about AI. Many people&mdash;<em>highly qualified people</em>&mdash;have been talking about how their resumes don&rsquo;t get responses because they&rsquo;re not optimized for AI. In other words, their resumes don&rsquo;t even reach hiring managers because AI hasn&rsquo;t found certain keywords or phrases it was programmed to find.</p><p>So, your resume really needs to hit all the marks. It should aesthetically look good <em>and</em> lay out your history in a way that makes you look like the best candidate for the job.</p><p>Let&rsquo;s have a look at some web designer and developer resumes and what makes them so effective.</p><h2 id="inspiring-resume-examples-for-web-designers--developers">12 Inspiring Resume Examples for Web Designers &amp; Developers</h2><p>There are different ways to present your resume. If you&rsquo;re applying to jobs on job boards or directly to employers, you&rsquo;ll need a PDF resume in addition to <a target="_blank" href="https://www.telerik.com/blogs/tips-creating-super-effective-portfolio-website">your portfolio website</a>. You may also want to create a resume page or add relevant resume details to the About page on your site.</p><p>Let&rsquo;s have a look at what different web designers and developers have done with their resumes and what makes them stand out from the crowd:</p><h3 id="gracie-wilson">1. Gracie Wilson</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/gracie-wilson-resume.png?sfvrsn=4c0f4edc_2" title="Gracie Wilson resume" alt="The PDF resume of Gracie Wilson. This PDF resume contains her signature blue-green color along with her headshot and cursive-style logo. The resume is laid out similar to traditional resumes with a left sidebar containing supplemental info about education and skills and a large content section advertising her experience." /></p><p>You&rsquo;ll find a link to graphic designer <a target="_blank" href="https://www.graciewilson.com/">Gracie Wilson</a>&rsquo;s PDF resume on the homepage of her website. This resume is not only beautifully branded (without being over the top), but it has a clean, easy-to-follow layout.</p><p>Her headshot and logo sit in the top-left corner and are followed by her contact info, education history, skills and software programs she uses. The bulk of the resume shows off her work history.</p><p>You can see that she&rsquo;s used similar styling and formatting practices that we use on webpages, like larger and bolded headings/titles and short paragraphs or bulletpoint lists. This will help employers scan through and gather info from her resume.</p><h3 id="lars-olson">2. Lars Olson</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/lars-olson-resume.png?sfvrsn=86b56635_2" title="Lars Olson resume" alt="The PDF resume of Lars Olson. Using a traditional resume format, Olson’s work history takes up about ⅔ of the page and is laid out in reverse chronological order on the left side. Along the right sidebar, there are sections for: Hello!, Skills & Software, Education, and Related Experience." /></p><p><a target="_blank" href="https://www.lars-olson.com/">Lars Olson</a> is a UI/UX designer with a special interest in game design.</p><p>If you look at his website, you&rsquo;ll get a good visual idea for where his interests and talents lie. His resume, on the other hand, lays down the facts. This is a good example of how to let your website visually demonstrate what you do while the resume answers all those questions that your design can&rsquo;t.</p><p>In terms of the resume we&rsquo;re looking at, this is another great example of how to design and layout a PDF resume in a clean and intuitive format. There&rsquo;s a clear separation between Olson&rsquo;s work history (which is the most important part) and the other details, which include his summary statement, skills and software, education and related experience.</p><h3 id="annastina-cleary">3. Annastina Cleary</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/annastina-cleary-resume.png?sfvrsn=2315ce80_2" title="image title" alt="Alt text" /></p><p>Annastina Cleary is an associate art director and graphic designer. Her portfolio website is simple and to the point. You&rsquo;ll find a brief bio on the homepage, which then links to two portfolio pages for Video and Branding as well as to <a href="http://annastinacleary.com/resume.html" target="_blank">Cleary&rsquo;s Resume page</a>.</p><p>This online resume is light on details, yet it is still quite effective. Laid out in a vertical format, visitors find information regarding Cleary&rsquo;s skills, software knowledge, employment experience, select client list and educational history. Are more details needed? Probably not. Cleary&rsquo;s lengthy work history shows that she is currently employed by Simon &amp; Schuster Publishing.</p><h3 id="olaolu-olawuyi">4. Olaolu Olawuyi</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/olaolu-olawuyi-resume.png?sfvrsn=1270f217_2" title="Olaolu Olawuyi resume" alt="The online resume page of Olaolu Olawuyi. The page is designed with a purple color scheme, light purple for the background and a darker, brighter purple for heading text. This single-page resume details Core Technologies, Other Skills, as well as Experience." /></p><p>One of the problems with the PDF resume format is that it&rsquo;s usually constrained to a single page. Sometimes you have more experience to include&mdash;or you just want to let all that information breathe a bit!</p><p>If you&rsquo;re looking to bridge the gap between the professionalism of a PDF resume and the flexibility of an online resume, frontend engineer <a target="_blank" href="https://olaolu.dev/resume/">Olaolu Olawuyi&rsquo;s Resume page</a> is a good one to look at. It includes all the crucial details that employers look for, including technology competency, skills and work experience.</p><p>If you don&rsquo;t want to go through the trouble of creating a beautiful online resume <em>and</em> a separate PDF resume, do as Olawuyi does. Make the page downloadable.</p><h3 id="victor-marin">5. Victor Marin</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/victor-marin-resume.png?sfvrsn=4102facd_2" title="Victor Marin resume" alt="Victor Marin’s online resume is an interactive world. Your mouse or cursor controls the Victor Marin avatar as he walks or scoots you past different buildings that display details about his education and experience." /></p><p><a target="_blank" href="https://victor-marin.dev/">Victor Marin</a> is a software engineer who has created an interactive resume website. Using your mouse, you get to guide the digitized Marin avatar through his resume, eventually picking up speed by hopping on a scooter.</p><p>As you travel through his world, you&rsquo;ll pass by different buildings. One of them shows you where he went to school and what degrees he earned. You&rsquo;ll also encounter buildings that house his various work experiences. When you&rsquo;ve finished seeing all there is to see, you can circle back to &ldquo;Contact&rdquo; and pass through one of two doors to contact him on GitHub or LinkedIn.</p><h3 id="thomas-grangeon">6. Thomas Grangeon</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/thomas-grangeon-resume.png?sfvrsn=3069e1f5_2" title="Thomas Grangeon resume" alt="Midway down the About page on Thomas Grangeon’s site, you will find resume information. There are two sections — Work Experience and Education" /></p><p>You won&rsquo;t find a full resume on designer and art director <a target="_blank" href="https://www.thomasgrangeon.com/about.html">Thomas Grangeon&rsquo;s website</a>. Instead, when you visit the About page, you&rsquo;ll encounter this section that details Grangeon&rsquo;s Work Experience and Education. (There&rsquo;s more information about his education up top, too.)</p><p>This is a good option if you have a separate PDF you use when applying directly on employer sites or job boards, but still want to share some details with visitors. This section blends nicely with the rest of the About info, which includes a short bio, services summary and testimonials.</p><h3 id="brittany-chiang">7. Brittany Chiang</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/brittany-chiang-resume.png?sfvrsn=4a19b885_2" title="Brittany Chiang resume" alt="In this screenshot of the resume page for Brittany Chiang, we see the Experience section. The user is hovering over the entry for “Senior Frontend Engineer, Accessibility” at Klaviyo. This highlights the job while the others fade into the dark color scheme." /></p><p>This is a one-page website for front end engineer <a target="_blank" href="https://brittanychiang.com/">Brittany Chiang</a>. There are just three sections on the page&mdash;About, Experience and Projects. It&rsquo;s the Experience section specifically that caught my eye.</p><p>At first glance, this looks like a pretty standard work history section. However, there are some really interesting details here. For starters, Chiang has included relevant skills and technologies under each job. Secondly, each position lights up as you hover over it (seen in the screenshot above). Lastly, a link is provided to each company, which is helpful if the prospective employer doesn&rsquo;t know who they are.</p><h3 id="maddie-harris">8. Maddie Harris</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/maddie-harris-resume.png?sfvrsn=1a59812f_2" title="Maddie Harris resume" alt="A look at the Skills section on the Maddie Harris website. The section is divided into 3 columns and 3 rows. There are anywhere from 4 to 7 skills listed under each category, like UX Design, Graphic Design, and Programming." /></p><p>One-page resumes don&rsquo;t always offer up the amount of space needed to showcase your skills. Sure, you might be able to list off the primary technologies you use or disciplines you work in. But many designers and developers have a vast toolset and skill set that they work from. <a target="_blank" href="https://maddieharris.org/">Maddie Harris</a> has found an effective way to highlight those skills.</p><p>Just a little over halfway down the homepage, visitors will find this well-organized Skills section. It&rsquo;s broken up into:</p><ul><li>UX design</li><li>Graphic design</li><li>Programming</li><li>Soft skills</li><li>Hard skills</li><li>Essentials</li><li>Interior design</li><li>Visualization</li></ul><p>It&rsquo;s great that Harris included sections for <a target="_blank" href="https://www.telerik.com/blogs/7-must-have-soft-skills-developers-2023">soft skills</a>, hard skills and essentials. These are the kinds of things that may get discussed during an interview, but there isn&rsquo;t always room to show them off ahead of time.</p><h3 id="seán-halpin">9. Se&aacute;n Halpin</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/sean-halpin-resume.png?sfvrsn=9620862d_2" title="Sean Halpin resume" alt="On the About page of Sean Halpin’s website is a timeline. There are 5 lines/capsules that show the jobs he’s worked. Design/Dev at Cubic from 2007-2010. Design/Dev at Dotfusion from 2010-14. Design Consultant at Freelance from 2012 to present. Senior Product Designer at Help Scout from 2015-23. Senior Product Designer at GiveDirectly from 2022 to present." /></p><p>The work experience section is an important one for job applicants. Not only does it show potential employers what kinds of jobs you&rsquo;ve worked, but how long you&rsquo;ve been working in the field as well. Not only that, it gives them a chance to see the evolution of your career and roles.</p><p>On the <a target="_blank" href="https://www.seanhalpin.xyz/about">About page of Se&aacute;n Halpin&rsquo;s site</a>, there is a data visualization just below the intro. This is a unique and very appropriate way to show off one&rsquo;s work history in design and development. Not only do employers get to visualize all the years of employment, but they get a sense for how Halpin is able to think outside the box as a designer.</p><h3 id="adham-dannaway">10. Adham Dannaway</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/adham-dannaway-resume.png?sfvrsn=82eb7528_2" title="Adham Dannaway resume" alt="On the About page for Adham Dannaway is a bar chart listing “My skills”. Here we see: Tea drinking (95%), Design systems (90%), Figma (95%), Gardening (75%), and Calisthenics (40%)." /></p><p>Here&rsquo;s another example of how to incorporate data visualizations into your resume or to present resume info on your About page. This example comes from the <a target="_blank" href="https://www.adhamdannaway.com/about">About page for designer/developer Adham Dannaway</a>.</p><p>While a bar graph like this one might not work for a lengthy list of skills like the one Maddie Harris has, it works perfectly well for Dannaway. Not only does he emphasize his professional strengths, he adds some humor while doing it by adding skills like tea drinking (95%), gardening (75%) and calisthenics (40%). It gives potential employers or clients a taste of what his personality is like.</p><h3 id="champion-creativekristina-champion">11. Champion Creative/Kristina Champion</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/champion-creative-resume.png?sfvrsn=f7c8cb4b_2" title="Champion Creative resume" alt="The About page for Champion Creative lists five values: Compassion, Community, Humility, Health, and Gratitude." /></p><p>On this <a target="_blank" href="https://kristinachampion.com/about">About page for Champion Creative</a>, hiring managers will find:</p><ul><li>Info about Kristina Champion</li><li>Values</li><li>Hobbies</li><li>Career (projects)</li><li>Clients</li></ul><p>The section I like the most is Values. Although resumes rarely touch on this, a prospective employee&rsquo;s or freelancer&rsquo;s <a target="_blank" href="https://www.telerik.com/blogs/what-your-values-principles-why-matter">professional values</a> can tell you a lot about them.</p><p>Oftentimes, hiring managers will ask questions that draw these kinds of conclusions during the interview. That said, providing them upfront before you reach the interview stage could help push you to the head of the line if your values align.</p><h3 id="anthony-wiktor">12. Anthony Wiktor</h3><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/anthony-wiktor-resume.png?sfvrsn=76123acb_2" title="Anthony Wiktor resume" alt="A close-up look at the PDF resume for Anthony Wiktor. In the bottom-left corner is a list of awards. Along the left column are numbers showing how many times he’s won each award. In the right column are logos for the awards, like The Webby Awards and MarCom Awards." /></p><p>What kinds of details can you add to a resume that make you stand out from other applicants? <a target="_blank" href="https://www.anthonydesigner.com/about/">Anthony Wiktor</a>, for instance, includes an Awards section on his PDF resume (see screenshot above). He also has a truncated Awards section on his website.</p><p>If you read Wiktor&rsquo;s bio, you&rsquo;ll see how relevant these awards are not only to his career as a Creative Director, but also to the &ldquo;competitive spirit&rdquo; he touts. For employers looking for someone who demonstrates certain traits (like competitiveness and drive, for example), providing proof on your resume is a must. This may be in the form of awards, but it can also come in the form of success statistics and metrics.</p><h2 id="wrapping-up">Wrapping Up</h2><p>When filling your resume with information, anticipate what employers are searching for and make sure the text of your resume website or linked resume is optimized for it. Then design it in a way that will capture their attention immediately and impress them as they read through it.</p><p>Short on time or prefer to keep it simple? Create a one-page PDF resume that&rsquo;s well organized and easy to follow. Want to create something unique? Create a custom resume page or incorporate key resume details into your About page. Then give it an eye-catching design, make it interactive or put your own unique spin on it.</p><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">What Are Your Values and Principles? And Why Do They Matter?</h4></div><div class="col-8"><p class="u-fs16 u-mb0">What sorts of values do you live by? What&rsquo;s more, how can you use these personal values to improve the quality of your work as well as your satisfaction with your job? Let&rsquo;s dig into this topic and see what having a <a target="_blank" href="https://www.telerik.com/blogs/what-your-values-principles-why-matter">clearly defined set of values and principles</a> can do for you.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17136700.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:e343e2e4-19fb-4e9f-8583-cb567b9ffc6b</id>
    <title type="text">Angular Basics: Setting Up Angular Development Environment</title>
    <summary type="text">Just getting started as an Angular developer? Or ready to optimize your setup? Read these tips for getting your Angular environment ready.</summary>
    <published>2025-08-20T15:15:21Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>David Adeneye Abiodun </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17123079/angular-basics-setting-angular-development-environment"/>
    <content type="text"><![CDATA[<p><span class="featured">Just getting started as an Angular developer? Or ready to optimize your setup? Read these tips for getting your Angular environment ready.</span></p><p>Getting started with Angular can feel like a lot at first, but once you&rsquo;ve set up your environment, the pieces start coming together. Whether you&rsquo;re diving into Angular for the first time or you&rsquo;re an experienced developer spinning up a new project, setting up your development environment is what sets the tone for everything that follows.</p><p>In this guide, we&rsquo;ll walk through how to install the Angular CLI, scaffold a new Angular project, run it locally and dissect the Angular Project File structure.</p><h2 id="setting-up-your-first-angular-application">Setting Up Your First Angular Application</h2><p>Angular provides a powerful command-line tool called the Angular CLI, which streamlines the entire development workflow. With it, you can scaffold new Angular apps, serve and test them locally, build for production and manage various parts of your project, right from the terminal.</p><p>Before installing Angular CLI, verify that you have <a target="_blank" href="https://nodejs.org/en">Node.js</a> and npm installed on your system. If you don&rsquo;t, head over to the official Node.js download page and install an active LTS (Long-Term Support) version. Angular requires an active or maintenance LTS version of Node.js, so be sure to check your current version with:</p><pre><code>node -v
</code></pre><h3 id="installing-angular-cli">Installing Angular CLI</h3><p>To install the Angular CLI globally on your machine, run:</p><pre><code>npm install -g @angular/cli
</code></pre><h3 id="creating-a-new-angular-project">Creating a New Angular Project</h3><p>Once the CLI is installed, navigate to the directory where you want to create your project, then run this command:</p><pre><code>ng new my-angular-app
</code></pre><p>You will be prompted to answer a few setup questions, such as whether you want to include Angular routing and which stylesheet format you prefer. After you provide your answers, the Angular CLI will create your project and install the necessary dependencies. This process may take a few minutes, depending on your internet connection speed.</p><p>Next, navigate into your project folder:</p><pre><code>cd my-angular-app
</code></pre><h3 id="running-the-development-server">Running the Development Server</h3><p>Angular CLI comes with a built-in development server that watches your files and reloads the app as you make changes. To start the server, run the following command:</p><pre><code>ng serve -o
</code></pre><p>The <code class="inline-code">ng serve</code> command compiles your application and starts a local dev server at <a target="_blank" href="http://localhost:4200">http://localhost:4200</a>. The <code class="inline-code">-o</code> flag automatically opens the app in your default browser.</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/angular-project-set-up.png?sfvrsn=657702e3_2" title="Angular Demo Project" alt="Angular Demo Project" /></p><h2 id="angular-project-files-structure">Angular Project Files Structure</h2><p>In the previous section, we used the <code class="inline-code">ng new</code> command to generate an Angular project. This command creates a <strong>workspace folder</strong> and initializes a new application inside it. A workspace may include files for multiple projects, applications or libraries.</p><p>By default, <code class="inline-code">ng new</code> sets up an initial skeleton application at the root level of the workspace. Angular names the application after the workspace and places its source files in the src/ subfolder.</p><h3 id="workspace-configuration-files">Workspace Configuration Files</h3><p>The root of the workspace contains global configuration files, along with settings for the initial application and subfolders for its source and test files. All projects within the workspace share a central configuration file named: <code class="inline-code">angular.json</code>.</p><p>This file defines both global and project-specific settings for build, serve, test and development tools provided by the Angular CLI. It tells the CLI how to build and manage your application or library.</p><p>If you&rsquo;re working with Angular 15, 16 or newer (including Angular 20), this file plays a key role in customizing CLI behavior to suit your project&rsquo;s specific needs.</p><p>Open the <code class="inline-code">angular.json</code> file in the root folder of your project. Let&rsquo;s analyze the configuration:</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-08/angular-json-file-structure.jpeg?sfvrsn=c67b004a_2" title="Angular.json file" alt="angular.json file workspace configuration" /></p><blockquote><p><strong>Note:</strong> As of the time of writing, Angular 20 is the latest version. While the core structure of angular.json remains consistent across recent versions, you may notice some variations depending on your version. However, I will explain some key concepts that are consistent across previous versions.</p></blockquote><h2 id="understanding-angular.json">Understanding Angular.json</h2><p>Let&rsquo;s break down some of the key parts of the <code class="inline-code">angular.json</code> file.</p><h3 id="top-level-structure">Top-Level Structure</h3><p>The properties at the top level of the file configure the workplace.</p><pre class=" language-json"><code class="prism  language-json"><span class="token punctuation">{</span>
  <span class="token string">"$schema"</span><span class="token punctuation">:</span> <span class="token string">"./node_modules/@angular/cli/lib/config/schema.json"</span><span class="token punctuation">,</span>
  <span class="token string">"version"</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span>
  <span class="token string">"newProjectRoot"</span><span class="token punctuation">:</span> <span class="token string">"projects"</span><span class="token punctuation">,</span>
  <span class="token string">"projects"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
     <span class="token string">"my-angular-app"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
      <span class="token operator">...</span>
     <span class="token punctuation">}</span>
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre><ul><li><p><code class="inline-code">$schema</code>: A reference to the schema used to validate the file and provide IntelliSense support in editors.</p></li><li><p><code class="inline-code">version</code>: Specifies the schema version for the configuration file. It&rsquo;s typically set to <code class="inline-code">1</code>.</p></li><li><p><code class="inline-code">newProjectRoot</code>: Specifies the folder where new projects (apps or libraries) will be created using Angular CLI commands (e.g., <code class="inline-code">ng generate application</code>).</p></li><li><p><code class="inline-code">projects</code>: Contains all applications and libraries within the workspace. Each entry in this section represents a separate project and includes its own configuration block.</p></li></ul><h3 id="project-configuration-block">Project Configuration Block</h3><p>Each entry inside the <code class="inline-code">projects</code> section includes configuration for a specific project. Here&rsquo;s an example:</p><pre class=" language-json"><code class="prism  language-json"><span class="token string">"projects"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
   <span class="token string">"my-angular-app"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
     <span class="token string">"projectType"</span><span class="token punctuation">:</span> <span class="token string">"application"</span><span class="token punctuation">,</span>
     <span class="token string">"schematics"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
     <span class="token string">"root"</span><span class="token punctuation">:</span> <span class="token string">""</span><span class="token punctuation">,</span>
     <span class="token string">"sourceRoot"</span><span class="token punctuation">:</span> <span class="token string">"src"</span><span class="token punctuation">,</span>
     <span class="token string">"prefix"</span><span class="token punctuation">:</span> <span class="token string">"app"</span><span class="token punctuation">,</span>
     <span class="token string">"architect"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
       <span class="token operator">...</span>
      <span class="token punctuation">}</span>
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre><ul><li><p><code class="inline-code">projectType</code>: Can be &ldquo;application&rdquo; or &ldquo;library&rdquo;. An application is intended to run in the browser, while a library is meant to be imported into other Angular projects.</p></li><li><p><code class="inline-code">schematics</code>: A set of <code class="inline-code">schematics</code> defines the default options for the ng generate sub-commands in a project. Angular schematics are templates or instructions used to modify a project by generating new files or updating existing ones. They allow you to customize how components, services, modules and other elements are created within your project.</p></li><li><p><code class="inline-code">root</code>: Specifies the root folder of the project, relative to the workspace directory. For the initial application, this is typically set to an empty string (""), placing it at the top level of the workspace.</p></li><li><p><code class="inline-code">sourceRoot</code>: Points to the root directory of this project&rsquo;s source files (usually &ldquo;src&rdquo;). It helps the Angular CLI locate your app&rsquo;s source code (like components, services, main.ts, etc.) during build, serve and test commands.</p></li><li><p><code class="inline-code">prefix</code>: Used in auto-generated component selectors (e.g., <code class="inline-code">&lt;app-header&gt;</code>).</p></li><li><p><code class="inline-code">architect</code>: (Called <code class="inline-code">targets</code> in older versions.) Configures build-related tasks such as building, serving, testing and linting.</p></li></ul><p>For a comprehensive understanding of the <code class="inline-code">angular.json</code> file structure, consult the <a target="_blank" href="https://angular.dev/reference/configs/workspace-config">official Angular documentation</a>.</p><h2 id="application-source-files-src">Application Source Files src</h2><p>The <code class="inline-code">src</code> directory is the main development folder in an Angular project. It contains all the essential files required to run your application&mdash;this is where your application&rsquo;s logic, components, services, routes and assets are defined.</p><ul><li><code class="inline-code">app/</code>: This is where your components, routes, services and features go. With Angular 20, standalone components and APIs are now the default:</li></ul><pre><code>app/
  app.component.ts       # Root component (standalone by default in Angular 20)
  app.component.html     # Root component template
  app.component.css      # Root component styles
  app.routes.ts          # Application routes using standalone routing
  app.config.ts          # Optional configuration (e.g., providers)
  app.component.spec.ts  # Defines a unit test for AppComponent
</code></pre><p>In Angular 20, projects start clean, there&rsquo;s no <code class="inline-code">app.module.ts</code> by default unless you opt into modules. Instead, <code class="inline-code">main.ts</code> acts as your new app entry point, using <code class="inline-code">bootstrapApplication()</code> to launch. It&rsquo;s a leaner, module-light approach out of the box.</p><ul><li><code class="inline-code">main.ts</code>: This is the main entry point for your application. In Angular 20, it&rsquo;s the new entry point for bootstrapping your Angular app:</li></ul><pre class=" language-ts"><code class="prism  language-ts"><span class="token function">bootstrapApplication</span><span class="token punctuation">(</span>AppComponent<span class="token punctuation">,</span> <span class="token punctuation">{</span>
  providers<span class="token punctuation">:</span> <span class="token punctuation">[</span>
    <span class="token function">provideRouter</span><span class="token punctuation">(</span>routes<span class="token punctuation">)</span><span class="token punctuation">,</span>
    <span class="token function">provideHttpClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
    <span class="token function">provideAnimations</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  <span class="token punctuation">]</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre><p>This replaces the old module-based <code class="inline-code">platformBrowserDynamic().bootstrapModule(AppModule)</code> pattern.</p><ul><li><p><code class="inline-code">index.html</code>: This is the main HTML page that is served when someone visits your site. The CLI automatically adds all JavaScript and CSS files when building your app, so you typically don&rsquo;t need to add any <code class="inline-code">&lt;script&gt;</code> or <code class="inline-code">&lt;link&gt;</code> tags here manually.</p></li><li><p><code class="inline-code">style.css</code>: Global styles for your app. You can switch to SCSS, Less or another preprocessor during project setup.</p></li></ul><p>For a deeper understanding of the Angular workspace and how to manage multi-project workspaces, check out the official Angular documentation: Angular CLI Workspaces.</p><h2 id="wrapping-up">Wrapping Up</h2><p>Angular has come a long way, and Angular 20 takes another big step toward simplifying project setup and boosting developer productivity. With the right environment setup and a clear understanding of the modern project structure, you&rsquo;ll spend less time wrestling with configurations and more time developing.</p><p>In this guide, we explored Angular CLI, how to set it up and used it to generate a new Angular app. We also walked through the workspace configuration and file structure. While the structure hasn&rsquo;t changed drastically from previous versions, Angular 20 fully embraces standalone components, simplified bootstrapping and tree-shakable provider APIs for a cleaner and more modern development experience.</p><p>But don&rsquo;t stop here, dive deeper into the <a target="_blank" href="https://angular.io/docs">Angular&rsquo;s official documentation</a> or read through the <a target="_blank" href="https://www.telerik.com/blogs/tag/angular-basics">Angular Basics</a> series if you&rsquo;re new to Angular.</p><p>Good luck, and enjoy building with Angular!</p><img src="https://feeds.telerik.com/link/23073/17123079.gif" height="1" width="1"/>]]></content>
  </entry>
  <entry>
    <id>urn:uuid:532249ef-8781-499f-9cf7-a76459e6ccc9</id>
    <title type="text">Changelogs: Why You Should Have One &amp; Tips for Maintaining It</title>
    <summary type="text">As you iterate on digital systems, it may get difficult to keep track of what changed and why, which is where a changelog becomes helpful.</summary>
    <published>2025-08-01T13:07:04Z</published>
    <updated>2026-04-12T06:35:52Z</updated>
    <author>
      <name>Suzanne Scacca </name>
    </author>
    <link rel="alternate" href="https://feeds.telerik.com/link/23073/17109710/changelogs-why-have-one-tips-maintaining"/>
    <content type="text"><![CDATA[<p><span class="featured">As you iterate on digital systems, it may get difficult to keep track of what changed and why, which is where a changelog becomes helpful.</span></p><p>A changelog is a digital record. In it, we chronologically document the changes that have been made to software or a system. In web design, we can create changelogs for websites and applications, the documentation that supports them, and even design systems.</p><p>In this post, we&rsquo;ll explain the benefits of changelogs along with tips for creating and maintaining a changelog for your digital product or system.</p><h2 id="why-you-need-a-changelog">Why You Need a Changelog</h2><p>There are many reasons to keep a changelog for each of the digital systems your team manages:</p><h3 id="better-communication">Better Communication</h3><p>Changelogs are an effective way to communicate changes related to your software&mdash;and to a variety of users, too.</p><p>While it&rsquo;s crucial that everyone on your development team be aware of what&rsquo;s changed and when it happened, many of your end users may want to reference this log, too. Changelogs are also a good way to keep other teams abreast of what&rsquo;s changed.</p><p>For example, if users start reporting the same error, your support team can turn to the changelog to see if something changed before the issue arose. It can also be a helpful resource for marketing and sales teams who may need to adjust their strategies or messaging if a feature has been removed or new ones added.</p><h3 id="transparency-and-accountability">Transparency and Accountability</h3><p>Think about how many applications we use on a daily basis and how little we know about what&rsquo;s going on with them behind the scenes. While we&rsquo;re often made aware of big releases with fancy new features or revamped UIs, not every software developer is as forthcoming when it comes to smaller or sensitive tweaks that actually keep the app in good shape&mdash;and us safe while using it.</p><p>Publishing a changelog so that anyone can see it will differentiate your product from others. It&rsquo;ll also show users how well-cared-for the software is, even if you only fine-tune it once a month or so.</p><h3 id="accurate-historical-record">Accurate Historical Record</h3><p>Release notes and changelogs can sometimes be confused for one another. Release notes tend to focus on the evolution of the software from version to version. It tells a much grander and flattering tale.</p><p>A changelog, on the other hand, tends to be brief and focused on technical updates. It shows users what&rsquo;s changed over time, no matter how big or small. It also documents bugs, breakdowns, performance issues and other significant technical issues.</p><p>By keeping track of what happened, your team can learn a lot about what your product needs to be well-maintained and may be able to help them mitigate issues in the future.</p><h2 id="tips-for-building-and-maintaining-a-changelog">Tips for Building and Maintaining a Changelog</h2><p>If you&rsquo;re looking to build a changelog for the first time or wondering how to improve an existing one, here are some tips to help you get the most from it:</p><h3 id="create-a-structure-for-it">1. Create a Structure for It</h3><p>Changelogs can become quite long over time. To retain their helpfulness, establish a set structure for each version.</p><p>For example, your structure might consistent of the following:</p><ul><li><strong>Version Number</strong> &ndash; e.g., &ldquo;V3.1.5&rdquo;</li><li><strong>Release Date</strong> &ndash; e.g., &ldquo;2025-06-19&rdquo;</li><li><strong>Improvement Type</strong> &ndash; &ldquo;ADDED&rdquo;</li><li><strong>Description</strong> &ndash; &ldquo;subscription settings page to user accounts&rdquo;</li></ul><p>Keep the structure concise and uniform. You can even use a table to keep everything organized, if you prefer.</p><p>Here&rsquo;s how the <a target="_blank" href="https://nordhealth.design/changelog/">Nord Design System</a> has structured its release notes/changelog page:</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-07/changelog-nord-design-system.png?sfvrsn=63fdae5e_2" title="Nord Design System changelog" alt="A screenshot of the Nord Design System changelog. Here we see what the Web Components tab looks like. Starting with version 4.3.0, there are a number of “Adds” changes following by the “Release date 5.6.2025”." /></p><p>What we see here is a well-organized changelog. To start, there&rsquo;s a section for the different aspects of the design system, like Web Components, CSS Framework, Design Tokens, etc.</p><p>Also, each version often groups the change types, so that &ldquo;Adds&rdquo; stay with &ldquo;Adds,&rdquo; &ldquo;Improves&rdquo; stay with &ldquo;Improves&rdquo; and so on.</p><p>While a set structure can improve usability, it&rsquo;ll also empower your team members to contribute to the changelog. With a set lexicon and rules, everyone can help maintain it, so the responsibility doesn&rsquo;t just ride on one person&rsquo;s shoulders.</p><h3 id="document-all-changes">2. Document All Changes</h3><p>Release notes are where you get to promote all the cool new things happening in the latest version of your product. Changelogs, however, should get into the nitty gritty of all the changes you&rsquo;ve made, even if they don&rsquo;t seem positive.</p><p>For example, your changelog should document and label these types of changes:</p><ul><li><strong>Added</strong> or <strong>New</strong>: For new features</li><li><strong>Removed</strong> or <strong>Retired</strong>: For features that have been taken out</li><li><strong>Deprecated</strong>: For features that are obsolete and scheduled to be phased out</li><li><strong>Changed</strong>: For modified features</li><li><strong>Fixed</strong>: For buggy features that have been repaired</li><li><strong>Security</strong>: For security-related updates</li><li><strong>Upcoming</strong>: For features or changes scheduled for the future</li></ul><p>By using consistent labels and documentation standards throughout the changelog, it&rsquo;ll make it much easier for users of all technical levels to understand what&rsquo;s changed.</p><p><a target="_blank" href="https://forum.asana.com/c/forum-en/api/api-changelog/204">Asana&rsquo;s changelog</a> is a unique example as it&rsquo;s published in the developer forum:</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-07/changelog-asana.png?sfvrsn=33ffb7fd_2" title="Asana changelog" alt="A screenshot of the Asana developer forum, which is where the changelog lives. Each entry in the forum documents the type of change and a short description of the change. Users can click on each to discover the specifics." /></p><p>As the company explains it:</p><blockquote><p>&ldquo;We chose to put the changelog in the forum instead (rather than in API documentation) for these two benefits: The forum supports comments so developers can ask questions and give feedback about upcoming changes and we can provide answers. Developers can subscribe to updates if they want to get notified about upcoming API changes.&rdquo;</p></blockquote><p>Regardless of where it lives, you can see that the changelog includes various kinds of changes and labels them as such&mdash;e.g., &ldquo;Upcoming,&rdquo; &ldquo;New,&rdquo; &ldquo;Change&rdquo; and so on.</p><h3 id="use-reverse-chronological-order">3. Use Reverse Chronological Order</h3><p>Each entry in your changelog should have a release date associated with it and a unique release number. Typically, major releases are a whole number like V2.0.0 and minor releases are written like V2.1.0.</p><p>When publishing them to the page, add the latest version to the top so the list is in reverse chronological order. The latest updates are what your users will be the most concerned with, so this will minimize the amount of scrolling they do.</p><p>This is what <a target="_blank" href="https://developer.ebay.com/api-docs/buy/browse/release-notes.html">eBay</a> does:</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-07/changelog-ebay.png?sfvrsn=7f4afa70_2" title="eBay changelog" alt="The eBay Release Notes page includes a section called “The API release history”. Here is where we find the changelog for the most recent versions. In the table, there is a Release Version, Release Date, and Description of Release." /></p><p>This is actually the top of the release notes page where extra details and fuller explanations about the release updates are written out down below. However, this table provides a succinct summary of the changes made in each release, starting with the most recent.</p><p>Another nice touch to this page is the API release history found on the right sidebar, so that users can click and go to a release they&rsquo;re interested in exploring further.</p><h3 id="keep-the-language-simple-and-accessible">4. Keep the Language Simple and Accessible</h3><p>Even though a changelog is a technical document, it doesn&rsquo;t mean it needs to be complex and too complicated for a layperson to understand. Keep it short and keep the wording straightforward.</p><p>Also, consider your audience. Unless you know that everyone who accesses the changelog will be from the same country and speak the same language, you&rsquo;ll need to verify that it&rsquo;s accessible.</p><p>Simple language will help with this. So, too, will version and date formats that everyone can understand. For example, instead of writing your release dates as <strong>MM/DD/YYYY</strong>, write them as <strong>YYYY/MM/DD</strong>.</p><p>Another option is to write the date out in full as <a target="_blank" href="https://developer.spotify.com/documentation/open-access/changelog">Spotify</a> does:</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-07/changelog-spotify.png?sfvrsn=61f80521_2" title="Spotify changelog" alt="A screenshot of the Spotify for Developers changelog. Each version has a unique number and release date is in big, bold lettering. Each change is listed as a bulletpoint beneath the version with a brief description and a purple hyperlink to more information." /></p><p>This changelog is no longer publicly accessible, but you can see how easy it is to find the version number and date, and how user-friendly the formats are.</p><p>Another deviation I should call attention to is the format of this changelog. Spotify doesn&rsquo;t appear to publish changes by announcing the change type first (e.g., &ldquo;Added,&rdquo; &ldquo;Deprecated,&rdquo; etc.). However, it has written this changelog in simplified language and provided reference links so that users can learn more about each of the changes.</p><h3 id="keep-a-schedule">5. Keep a Schedule</h3><p>Your changelog is a reflection of how well-maintained your software or system is. To help users and team members notice this, make updating the changelog in tandem with releases a priority. And create a schedule for these releases, even the minor ones.</p><p>Releases don&rsquo;t need to come out every week or even biweekly if your software doesn&rsquo;t need a ton of maintenance. But find an update schedule that works for you and stick to it. This will help set expectations with your users and it&rsquo;ll also keep your team attuned to what&rsquo;s happening with the product and experience, so they can keep it in the best shape possible.</p><p>The <a target="_blank" href="https://developers.facebook.com/docs/instagram-platform/changelog/">Instagram changelog</a>, for instance, appears to follow a monthly schedule (for the most part).</p><p><img src="https://d585tldpucybw.cloudfront.net/sfimages/default-source/blogs/2025/2025-07/changelog-instagram.png?sfvrsn=3c54f1d0_2" title="Instagram changelog" alt="A screenshot of the changelog for Instagram platform. On this page, we see changes start on June 16, 2025 and go as far back as February 8, 2018." /></p><p>Although there are some months that get skipped, you can see those instances usually follow a month where there were numerous releases. So, if your team can&rsquo;t or doesn&rsquo;t feel the need to commit to an exact release schedule, this is a good way to go about it. Aim for once a month (or whatever your preferred schedule is), but don&rsquo;t commit to any specific release dates.</p><p>Also, not every release will be scheduled ahead of time. For example, let&rsquo;s say customer support notifies you of a bug or your team has discovered a security vulnerability. These kinds of changes can&rsquo;t wait until your scheduled releases. Patch the issue ASAP and issue an update to the changelog once it&rsquo;s done.</p><p>If your team works overtime to repair something urgent, you can always push the next release back to give them a breather (which may be what Meta/Instagram has done).</p><h2 id="wrapping-up">Wrapping Up</h2><p>Documentation is so incredibly important when you&rsquo;re in charge of building and maintaining software and systems. But we don&rsquo;t just need documentation to tell us about features or how to execute processes. It can also let us know where we&rsquo;ve been, what we&rsquo;ve done, and to lay down a track for what&rsquo;s to come.</p><p>This is why it&rsquo;s vital to have a changelog for every application or website you build along with any design systems or documentation repositories you maintain. The changelog keeps an accurate record of what&rsquo;s been done, provides other teams and the public with transparency about what you&rsquo;re working on, and also teaches you more about what your application needs to thrive.</p><aside><hr data-sf-ec-immutable="" /><div class="row"><div class="col-4 u-normal-full u-small-mb0"><h4 class="u-fs20 u-fw5 u-lh125 u-mb0">When (and Why) to Roll Back Features on Apps</h4></div><div class="col-8"><p class="u-fs16 u-mb0">What happens if your users don&rsquo;t like a feature or, worse, there&rsquo;s major public backlash? Let&rsquo;s look at <a target="_blank" href="https://wwwuat.telerik.com/blogs/when-why-roll-back-features-apps">why feature rollbacks happen</a>, some recent examples from Google, Facebook and Instagram, and how to keep them from happening so much in the future.</p></div></div></aside><img src="https://feeds.telerik.com/link/23073/17109710.gif" height="1" width="1"/>]]></content>
  </entry>
</feed>
