<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dev By RayRay</title>
    <description>The latest articles on DEV Community by Dev By RayRay (@devbyrayray).</description>
    <link>https://dev.to/devbyrayray</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F405566%2F2501de6d-a1a2-4ec6-8f83-36448efdde5e.jpg</url>
      <title>DEV Community: Dev By RayRay</title>
      <link>https://dev.to/devbyrayray</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devbyrayray"/>
    <language>en</language>
    <item>
      <title>Stop Adding PR Reviewers One-by-One in Azure DevOps</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Fri, 07 Nov 2025 09:47:15 +0000</pubDate>
      <link>https://dev.to/devbyrayray/stop-adding-pr-reviewers-one-by-one-in-azure-devops-2ml2</link>
      <guid>https://dev.to/devbyrayray/stop-adding-pr-reviewers-one-by-one-in-azure-devops-2ml2</guid>
      <description>&lt;p&gt;Are you still adding your teammates one by one to your Azure DevOps PRs?&lt;/p&gt;

&lt;p&gt;You know the drill. You create your pull request, then click and search for Jane. Click, search for Bob. Click, search for Maria. Did you forget someone? Probably.&lt;/p&gt;

&lt;p&gt;It's a repetitive task that's slow, tedious, and just gets in the way of merging your code.&lt;/p&gt;

&lt;p&gt;There is a much cleaner, more efficient way to handle this. You don't want to manage a list of individuals; you want a single rule that says, "I need one approval from the Dev Team."&lt;/p&gt;

&lt;p&gt;Let's build that rule. It's a "set it and forget it" fix using a &lt;strong&gt;Branch Policy&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisite: A Team
&lt;/h2&gt;

&lt;p&gt;This trick relies on having your reviewers grouped into a 'Team' in Azure DevOps. If you haven't done this, it's a one-time setup and makes managing permissions much easier. Check the docs on &lt;a href="https://learn.microsoft.com/en-us/azure/devops/organizations/settings/add-teams?view=azure-devops&amp;amp;tabs=preview-page" rel="noopener noreferrer"&gt;how to create a team in Azure DevOps&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Branch Policy
&lt;/h2&gt;

&lt;p&gt;You set this up once on your target branch (like &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;develop&lt;/code&gt;), and it works forever.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Project Settings&lt;/strong&gt; (represented by the gear icon, located in the bottom-left corner).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to &lt;strong&gt;Repositories&lt;/strong&gt; (under the &lt;code&gt;Repos&lt;/code&gt; heading).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the repo you want, then the &lt;strong&gt;Policies&lt;/strong&gt; tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll to the 'Branch Policies' section and click on the branch you want to protect (e.g., &lt;code&gt;main&lt;/code&gt;). &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpkt6er8pvf7ys9ycws9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwpkt6er8pvf7ys9ycws9.png" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Find the &lt;strong&gt;"Automatically include reviewers"&lt;/strong&gt; section and click the &lt;code&gt;+&lt;/code&gt; button.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;(If you want to read about all the policy options, you can find the &lt;a href="https://learn.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops" rel="noopener noreferrer"&gt;official docs on branch policies here&lt;/a&gt;.)&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Reviewer policy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zggmodq63o2wdow7uoq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zggmodq63o2wdow7uoq.png" width="800" height="912"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reviewers:&lt;/strong&gt; Search for and select your &lt;em&gt;team's name&lt;/em&gt; (e.g., &lt;code&gt;[MyProject]\Dev Team&lt;/code&gt;). Do &lt;strong&gt;not&lt;/strong&gt; add the individuals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Policy requirement:&lt;/strong&gt; Set this to &lt;strong&gt;Required&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Minimum number of reviewers:&lt;/strong&gt; This option will now appear. Set it to &lt;strong&gt;1&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  What Did You Just Build?
&lt;/h3&gt;

&lt;p&gt;From now on, every new PR to that branch will automatically add the &lt;code&gt;Dev Team&lt;/code&gt; as a single, required block.&lt;/p&gt;

&lt;p&gt;As soon as &lt;em&gt;one person&lt;/em&gt; from that team approves it, the &lt;em&gt;entire team block&lt;/em&gt; gets a green checkmark.&lt;/p&gt;

&lt;p&gt;No more clicking on individual names. No more forgetting teammates. Your PR is unblocked, and you can get back to your flow. 😌&lt;/p&gt;




&lt;p&gt;What's your favorite 'set it and forget it' setting in Azure DevOps? What's one small policy tweak that has removed the most friction for your team? Share it in the comments!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>azure</category>
      <category>azuredevops</category>
    </item>
    <item>
      <title>Beyond Vibe Coding: How I Use AI as a Tech Lead to Stay in Control</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Thu, 16 Oct 2025 12:45:25 +0000</pubDate>
      <link>https://dev.to/devbyrayray/beyond-vibe-coding-how-i-use-ai-as-a-tech-lead-to-stay-in-control-3cb0</link>
      <guid>https://dev.to/devbyrayray/beyond-vibe-coding-how-i-use-ai-as-a-tech-lead-to-stay-in-control-3cb0</guid>
      <description>&lt;p&gt;I'm sure you're familiar with "vibe coding"—that creative process of building things based on a feeling, without a strict plan. It can be fun, but in a team environment, it simply doesn't work. It’s hard to scale, new people get lost, and the results are often messy.&lt;/p&gt;

&lt;p&gt;For me, things have changed. I now focus on working with clear specifications, and I use AI as my co-pilot. Many people think using AI means you lose control, but I've found the opposite is true. When used correctly, AI is a powerful partner that helps you apply your knowledge more effectively, giving you &lt;em&gt;more&lt;/em&gt; control, not less.&lt;/p&gt;

&lt;p&gt;Here are the six main ways I use AI as a tech lead.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Supercharging My Git Workflow
&lt;/h3&gt;

&lt;p&gt;I've used Git for a long time, so I'm comfortable with it. But being comfortable with a tool doesn't mean you're using it efficiently. This is where AI, especially GitHub Copilot, has made my daily Git work seamless.&lt;/p&gt;

&lt;p&gt;Instead of typing every command by hand, I let AI handle the repetitive parts. It suggests sharp, accurate commit messages based on my changes, and most of the time they're perfect with just a few small tweaks. It can also create branch names for me based on the user story, which keeps everything consistent.&lt;/p&gt;

&lt;p&gt;But the real game-changer is writing pull request descriptions. By connecting AI to our Azure DevOps board, it can generate a comprehensive summary of changes, including the rationale behind them, and automatically link to the corresponding user story. This frees me from tedious tasks so I can focus on what really matters: the quality of the code itself.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. The AI-Powered Second Pair of Eyes: Code Reviews
&lt;/h3&gt;

&lt;p&gt;As a tech lead, I frequently conduct code reviews for multiple teams, which means I don't always have the full context. Previously, it took a lot of time to get up to speed. Now, AI is my starting point.&lt;/p&gt;

&lt;p&gt;I can ask it to explain changes in a pull request, identify potential problems I might have missed, or verify that code adheres to our team's coding rules. As long as our rules are written down, AI can handle a large part of the review, and it does it much faster than I ever could.&lt;/p&gt;

&lt;p&gt;This approach enables me to focus on the most critical aspects, such as the core logic and architecture. It also helps me give better, fairer feedback. For instance, I can ask AI to "explain why we use dependency injection here." That simple request turns a standard comment into a valuable teaching moment for the whole team.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Staying in the Zone with AI and Azure DevOps
&lt;/h3&gt;

&lt;p&gt;Connecting an AI assistant like GitHub Copilot to your project board—whether it's Azure DevOps, Jira, or GitLab—is a massive improvement for any developer's workflow. I can stay in my code editor—my focus zone—and still have a direct connection to our team's plan.&lt;/p&gt;

&lt;p&gt;Through my editor, I can request additional information on a user story, seek help in understanding a new bug report, or even write and post comments for product owners. It effectively creates a bridge between the project plan and the actual coding work, ensuring that what I'm building is aligned with the team's goals and that everything is tracked properly.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Taming the CI/CD Beast
&lt;/h3&gt;

&lt;p&gt;After years of building CI/CD pipelines in Azure DevOps, I’ve developed a solid understanding of how they work. But every so often, you run into a problem that’s hard to figure out.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I remember spending two hours debugging a pipeline once, only to find it was a single misplaced character. Last week, a similar issue came up, and by pasting the error into Copilot Chat, I found the fix in less than two minutes."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My process for fixing these issues has completely changed. I just copy the strange error message from the pipeline, paste it into the chat with the AI, and since the AI can read my &lt;code&gt;*.yml&lt;/code&gt; file, it often finds the problem right away. It’s this teamwork—my experience guiding the AI’s powerful pattern-matching—that helps me fix problems in a fraction of the time.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. My Go-To Brainstorming Partner
&lt;/h3&gt;

&lt;p&gt;Honestly, brainstorming is the main way I've used AI from the very beginning. It feels like having a senior architect on call 24/7. I use it for all sorts of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Technical ideas:&lt;/strong&gt; "How can we build a good reusable component?" or "What are the pros and cons of different ways to build a component library?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improving code:&lt;/strong&gt; "Why is this code so slow? Give me three ideas to make it faster."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team skills:&lt;/strong&gt; "Can you help me write this PR comment so it sounds helpful, not like an attack?" or "How can I help my interns understand this topic better?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Regardless of your job, having an AI to help you think through ideas is incredibly useful. It consistently challenges my assumptions and pushes me to make better, more well-rounded decisions.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. Why Specs Are More Important Than Ever
&lt;/h3&gt;

&lt;p&gt;Using AI to build applications is powerful, but AI without clear specifications is a recipe for disaster. It’s like asking an intern to build a streaming platform in a few weeks. I often compare AI to an intern: you have to give it the right information at the right time. One single prompt is not going to create a perfect application.&lt;/p&gt;

&lt;p&gt;The quality of the output you get from AI is a direct reflection of the quality of the input you provide. So, if managers think AI will replace developers, they first need to get much better at clearly defining their requirements.&lt;/p&gt;

&lt;p&gt;For us developers, this is a good thing. By creating clear specifications that the team agrees on, we set the rules. We are still in control. We guide the AI to build what we planned, making sure the final product works well, is consistent, and meets the team's goals. Our jobs aren't disappearing; they're evolving.&lt;/p&gt;




&lt;p&gt;At the end of the day, "vibe coding" is a relic of the past because modern software demands planning, teamwork, and scalability. AI, when guided by our own knowledge, is the best way to be more productive while staying in control.&lt;/p&gt;

&lt;p&gt;How are you using AI in your role as a developer or tech lead? I'd love to hear your favorite tips in the comments below! 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Let's Talk About Accessibility (Without the Headache) 🧠😅</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Wed, 15 Oct 2025 09:38:58 +0000</pubDate>
      <link>https://dev.to/devbyrayray/lets-talk-about-accessibility-without-the-headache-1mp3</link>
      <guid>https://dev.to/devbyrayray/lets-talk-about-accessibility-without-the-headache-1mp3</guid>
      <description>&lt;p&gt;Let's be honest. When you're a full-stack developer, juggling the front-end, back-end, database, and everything in between, "accessibility" can sometimes feel like just one more thing on an endless to-do list. I get it. You want to build great things, and sometimes the finer details of accessibility guidelines can feel a bit overwhelming, especially if you're not a front-end specialist.&lt;/p&gt;

&lt;p&gt;For a long time, I treated accessibility as a "nice-to-have," something I'd get to &lt;em&gt;after&lt;/em&gt; the core functionality was working. But I had a realization: what's the point of building something amazing if a significant portion of people can't even use it properly? Making the web accessible isn't just about ticking a box; it's about making our work usable for everyone. It’s about being inclusive.&lt;/p&gt;

&lt;p&gt;The good news? It doesn't have to be a huge, complicated chore. I found a tool that has completely changed how I approach this, and I think it’ll do the same for you.&lt;/p&gt;




&lt;h3&gt;
  
  
  Meet Accented.dev: Your New Best Friend for Accessibility
&lt;/h3&gt;

&lt;p&gt;I recently stumbled upon &lt;strong&gt;&lt;a href="https://accented.dev/" rel="noopener noreferrer"&gt;Accented.dev&lt;/a&gt;&lt;/strong&gt;, a fantastic open-source tool that makes spotting accessibility issues incredibly simple. Seriously, it’s a game-changer. (You can also check it out on &lt;a href="https://github.com/pomerantsev/accented" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;!)&lt;/p&gt;

&lt;p&gt;What I love about it is how seamless it is. Accented is a frontend library that runs directly in your browser while you're developing. It’s built on the &lt;strong&gt;&lt;a href="https://github.com/dequelabs/axe-core" rel="noopener noreferrer"&gt;axe-core® engine&lt;/a&gt;&lt;/strong&gt;, which is the gold standard for accessibility testing, so you know you're getting reliable feedback.&lt;/p&gt;

&lt;p&gt;Here’s why I think you’ll love it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;See issues in real-time.&lt;/strong&gt; As you're coding, Accented highlights any accessibility problems right on the page. No more running a separate audit at the end of a sprint. You see a problem, you fix it. Done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's super easy to set up.&lt;/strong&gt; You can get it running with just a few lines of code. It doesn't matter if you're using React, Vue, Svelte, or even a legacy project with no framework. It just works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No more context switching.&lt;/strong&gt; The issues are flagged visually on the page &lt;em&gt;and&lt;/em&gt; in the console. You can see exactly which element has a problem without having to dig through code to find it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It’s completely free and open-source.&lt;/strong&gt; Who doesn’t love that? ❤️&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  How It Works in Practice
&lt;/h3&gt;

&lt;p&gt;Imagine you're building a new feature. You save your code, the page reloads, and little callouts appear next to a few elements. One might say an image is missing an &lt;code&gt;alt&lt;/code&gt; tag, another might point out a button with low color contrast.&lt;/p&gt;

&lt;p&gt;Instead of this being a problem you discover weeks later (or worse, never), you can fix it on the spot in a matter of seconds. It turns accessibility from a complex audit into a simple, continuous part of your development workflow. It’s like having a friendly accessibility coach looking over your shoulder.&lt;/p&gt;




&lt;h3&gt;
  
  
  Give It a Try!
&lt;/h3&gt;

&lt;p&gt;If you've ever felt that accessibility was too complex or time-consuming to focus on, I really encourage you to give &lt;a href="https://accented.dev/" rel="noopener noreferrer"&gt;Accented.dev&lt;/a&gt; a try. It’s one of those rare tools that is not only powerful but also a genuine pleasure to use. It has helped me become a more mindful and inclusive developer without adding any friction to my workflow.&lt;/p&gt;

&lt;p&gt;What are your go-to tools for accessibility? Or have you had a similar experience? Share your thoughts in the comments below. Let’s make the web a better place for everyone, one line of code at a time! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>a11y</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AI or Obsolete: Why Developers Need AI in Their Workflow</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Thu, 21 Aug 2025 12:53:26 +0000</pubDate>
      <link>https://dev.to/devbyrayray/ai-or-obsolete-why-developers-need-ai-in-their-workflow-4gh4</link>
      <guid>https://dev.to/devbyrayray/ai-or-obsolete-why-developers-need-ai-in-their-workflow-4gh4</guid>
      <description>&lt;p&gt;Back in 2022, when I first heard the term "AI-powered developer", I pictured a robot typing code while I sat back. Today, that "robot" looks more like a VS Code extension, a CLI plugin, or even a teammate suggesting solutions right when I need them.&lt;/p&gt;

&lt;p&gt;If you're still hesitant, I understand. I was curious and a bit uneasy as well. But the data is clear: AI in development isn't optional anymore - it's a must-have. In this post, I'll share why, what happens if you wait too long, what research shows about the impact of tools like GitHub Copilot, and how you can get started with your team.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Where We Are Today
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI is already part of daily work
&lt;/h3&gt;

&lt;p&gt;Take a look around GitHub, your IDE marketplace, or even Stack Overflow—AI is everywhere. Tools like &lt;strong&gt;GitHub Copilot&lt;/strong&gt;, &lt;strong&gt;Tabnine&lt;/strong&gt;, and &lt;strong&gt;Cursor&lt;/strong&gt; are no longer experiments; they’re part of how developers actually work.  &lt;/p&gt;

&lt;p&gt;They’re helping with:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating boilerplate code in seconds (Vue components, Pinia stores, composables).
&lt;/li&gt;
&lt;li&gt;Suggesting meaningful refactors for readability and performance.
&lt;/li&gt;
&lt;li&gt;Writing unit tests for your components.
&lt;/li&gt;
&lt;li&gt;Converting code between frameworks (Vue ↔ React) or JavaScript → TypeScript.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it’s not just developers: managers are already using AI to spot bottlenecks, flag risky PRs, and track velocity more effectively.  &lt;/p&gt;

&lt;h3&gt;
  
  
  What this means for us
&lt;/h3&gt;

&lt;p&gt;This isn’t just hype. Studies confirm the benefits:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster coding&lt;/strong&gt; – GitHub found developers completed tasks &lt;strong&gt;55% faster&lt;/strong&gt; with Copilot compared to those without it.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Higher satisfaction&lt;/strong&gt; – In surveys, 60–75% of developers said Copilot made them feel more fulfilled and less frustrated.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better focus&lt;/strong&gt; – 73% said Copilot kept them “in the flow,” and 87% said it reduced the mental energy spent on repetitive work.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality maintained&lt;/strong&gt; – Enterprise studies even showed higher PR merge rates and more successful builds with Copilot in the mix.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, AI is already becoming a &lt;strong&gt;productivity layer&lt;/strong&gt; on top of our existing workflows.  &lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Cost of Waiting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  “We’ve managed fine without it.”
&lt;/h3&gt;

&lt;p&gt;This is the line I hear most from experienced developers. But waiting has risks:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04ojlhqw8v8vrvcw5lb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04ojlhqw8v8vrvcw5lb8.png" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The truth is, teams that delay AI adoption risk being outpaced by those who embrace it. The data shows that adoption is quick once teams start: &lt;strong&gt;81% of developers enable Copilot on the day they get access **, and **96% accept suggestions immediately&lt;/strong&gt;.  &lt;/p&gt;




&lt;h2&gt;
  
  
  3. What the Data Tells Us
&lt;/h2&gt;

&lt;p&gt;Instead of telling stories, let’s look at the real numbers:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/" rel="noopener noreferrer"&gt;55% faster&lt;/a&gt;:&lt;/strong&gt; In GitHub’s study, developers using Copilot finished coding tasks more than twice as quickly.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://resources.github.com/learn/pathways/copilot/essentials/measuring-the-impact-of-github-copilot/" rel="noopener noreferrer"&gt;Better throughput&lt;/a&gt;:&lt;/strong&gt; In an enterprise rollout, pull requests per developer increased by &lt;strong&gt;8.7%&lt;/strong&gt;, and merge rates were &lt;strong&gt;15% higher&lt;/strong&gt; with Copilot.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality intact:&lt;/strong&gt; &lt;a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-in-the-enterprise-with-accenture/#:~:text=But%20we%20don%E2%80%99t%20want%20to,human%20reviewers%20and%20test%20automation" rel="noopener noreferrer"&gt;Teams saw **84% more successful CI builds&lt;/a&gt;**, meaning fewer regressions slipping through.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/" rel="noopener noreferrer"&gt;Happier developers&lt;/a&gt;:&lt;/strong&gt; 90% of engineers reported feeling more fulfilled, and 95% said they enjoyed coding more with Copilot.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-in-the-enterprise-with-accenture/#:~:text=We%20also%20observed%20that%20developers,provide%20a%20barrier%20to%20entry" rel="noopener noreferrer"&gt;Widespread adoption&lt;/a&gt;:&lt;/strong&gt; 40% of developers worldwide have tried Copilot, and 26% use it regularly, according to JetBrains’ 2024 survey.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These numbers paint a clear picture: Copilot isn’t just saving time—it’s improving quality and making work more enjoyable.  &lt;/p&gt;




&lt;h2&gt;
  
  
  4. How to Get Started with Your Team
&lt;/h2&gt;

&lt;p&gt;Here’s how you can introduce AI coding tools like Copilot without chaos:  &lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Start small&lt;/strong&gt; – Pick one tool (e.g. Copilot) and try it on a specific workflow, like scaffolding new Vue components or setting up composables.&lt;br&gt;&lt;br&gt;
2️⃣ &lt;strong&gt;Set expectations&lt;/strong&gt; – AI is a co-pilot, not the pilot. Always review and test.&lt;br&gt;&lt;br&gt;
3️⃣ &lt;strong&gt;Train the team&lt;/strong&gt; – Run a short demo, share effective prompts, and talk about pitfalls.&lt;br&gt;&lt;br&gt;
4️⃣ &lt;strong&gt;Standardize usage&lt;/strong&gt; – Don’t let everyone reinvent the wheel. I built a &lt;strong&gt;&lt;a href="https://github.com/devbyray/github-copilot-starter" rel="noopener noreferrer"&gt;GitHub Copilot Starter&lt;/a&gt;&lt;/strong&gt; project for exactly this reason. It’s a template repository with ready-to-go instructions for coding standards, commit message conventions, accessibility guidelines, testing practices, project structure, and more. By cloning it, your team can keep Copilot usage consistent and aligned with your standards.&lt;br&gt;&lt;br&gt;
5️⃣ &lt;strong&gt;Measure impact&lt;/strong&gt; – Track PR cycle times, test coverage, and run short surveys. GitHub even offers APIs to measure Copilot usage across teams.&lt;br&gt;&lt;br&gt;
6️⃣ &lt;strong&gt;Scale gradually&lt;/strong&gt; – If the pilot is positive, expand. GitHub’s studies show it can take up to ~11 weeks for full benefits to show, so give it time.  &lt;/p&gt;




&lt;h2&gt;
  
  
  5. What’s Next for AI in Development
&lt;/h2&gt;

&lt;p&gt;AI is moving from “assistant” to &lt;strong&gt;collaborator&lt;/strong&gt;. We’ll soon see:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated architecture diagrams from codebases.
&lt;/li&gt;
&lt;li&gt;Automated migrations between frameworks.
&lt;/li&gt;
&lt;li&gt;Assistants that adapt to your team’s coding style and domain knowledge.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best way to prepare is to keep experimenting, join developer communities, and invest in upskilling. Prompting is quickly becoming as essential as Git.  &lt;/p&gt;




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

&lt;p&gt;The first time I let AI generate a Vue composable for me, I was skeptical—but it worked perfectly, even with a clear comment on how to reuse it. That’s when it clicked: &lt;strong&gt;the tools we use shape the work we do&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;So here’s my challenge: on your next ticket, let AI help. Try Copilot, ask it to generate a Vue component with TypeScript support, and see how it feels.  &lt;/p&gt;

&lt;p&gt;Let’s turn curiosity into skills. 🚀  &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>How to Use Azure DevOps MCP Server with GitHub Copilot in VS Code: Complete Setup Guide</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Tue, 17 Jun 2025 19:31:07 +0000</pubDate>
      <link>https://dev.to/devbyrayray/how-to-use-azure-devops-mcp-server-with-github-copilot-in-vs-code-complete-setup-guide-3ala</link>
      <guid>https://dev.to/devbyrayray/how-to-use-azure-devops-mcp-server-with-github-copilot-in-vs-code-complete-setup-guide-3ala</guid>
      <description>&lt;p&gt;Ever find yourself juggling VS Code and Azure DevOps browser tabs all day? I know the feeling—every time I switch contexts, I lose my flow. 😩 But guess what: Microsoft just dropped an official Model Context Protocol (MCP) server that plugs Azure DevOps right into GitHub Copilot. Game‑changer, right? 🎉&lt;/p&gt;

&lt;p&gt;In this post, I’ll show you how to set up and use the Azure DevOps MCP server with GitHub Copilot in VS Code. You’ll be able to see work items, update tasks, query project info, and more—all without leaving your editor. Let’s dive in!&lt;/p&gt;




&lt;h2&gt;
  
  
  What You'll Need (Prerequisites)
&lt;/h2&gt;

&lt;p&gt;Before we dive in, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;VS Code or VS Code Insiders installed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub Copilot extension is active&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Node.js 20 or higher&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An Azure DevOps account with appropriate permissions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Azure CLI installed&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Authenticate with Azure
&lt;/h2&gt;

&lt;p&gt;First, you need to authenticate with Azure DevOps through the Azure CLI (If not installed, &lt;a href="https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest" rel="noopener noreferrer"&gt;follow the docs&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;az login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will open your browser and prompt you to sign in to your Azure account. Ensure you use the same account with access to your Azure DevOps organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create the MCP Configuration
&lt;/h2&gt;

&lt;p&gt;In your project root directory, create a &lt;code&gt;.vscode/mcp.json&lt;/code&gt; file with the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ado_org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"promptString"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Azure DevOps organization name (e.g. 'contoso')"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ado"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"@azure-devops/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"${input:ado_org}"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration tells VS Code how to connect to the Azure DevOps MCP server using your organization name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Start the MCP Server
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Save the &lt;code&gt;mcp.json&lt;/code&gt; configuration file&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the Command Palette in VS Code (&lt;code&gt;Ctrl+Shift+P&lt;/code&gt; or &lt;code&gt;Cmd+Shift+P&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the MCP server startup command&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When prompted, enter your Azure DevOps organization name (just the name, not the full URL)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 4: Enable GitHub Copilot Agent Mode
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open GitHub Copilot in VS Code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Switch to Agent Mode&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Look for Azure DevOps tools in the available tools list&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the Azure DevOps MCP server tools&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it! You're now ready to interact with Azure DevOps directly through GitHub Copilot.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use Azure DevOps MCP with GitHub Copilot
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Managing Work Items
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;View your assigned work items:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This will give you a list of all the assigned work items with your name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me my assigned work items in Azure DevOps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But you can make it more advanced or specific:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me my assigned work items in Azure DevOps with the title's based on priority
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create new work items:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Adding new work items has never been easier! Just use a prompt like this, and it will create it for you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a new user story titled "Implement user authentication" with description "As a user, I want to log in securely so that I can access my account"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or if you want to create a task that belongs to a work item:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a set of tasks for work item 875342.
- Implement new auth method
- Update exisiting unit tests
- Create new unit tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Update work item status:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Updating existing is also very handy! This saves us so much context switching!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Update work item 12345 to "In Progress" and add a comment that I've started working on it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Project and Repository Operations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;List your projects:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have multiple projects you work on, you can list them easily.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List my Azure DevOps projects and show me the teams for my main project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Repository information:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me the repositories in this project and list the recent branches
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pull request management:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You are not just tied to one thing per prompt. Just combine multiple requests to do it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I just created a PR for my authentication feature. Update work item 12345 to reference this PR and change the status to Code Review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Build and Test Management
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Check build status:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me the status of recent builds for this project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Test plan information:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List test plans for this project and show me recent test results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why Azure DevOps MCP in GitHub Copilot is So Powerful
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. No More Context Switching 💪
&lt;/h3&gt;

&lt;p&gt;The biggest productivity killer in development is context switching. Research shows it takes an average of 23 minutes to fully refocus after an interruption. With Azure DevOps MCP, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Check work item details without opening a browser&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update task status while reviewing code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create follow-up tasks immediately after solving bugs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Query project information within your coding context&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Natural Conversation with Your Project Data 💬
&lt;/h3&gt;

&lt;p&gt;Instead of clicking through Azure DevOps UI menus, you can have natural conversations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me work items in the current iteration for the Development Team, then create a new task for implementing API authentication
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This conversational approach makes project management feel less like administrative overhead and more like a natural part of development.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Intelligent Task Updates After Development 🤖
&lt;/h3&gt;

&lt;p&gt;After you create a pull request, you can immediately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Link the PR to the relevant work item&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update the work item status to "Code Review"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add implementation details as comments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create follow-up tasks for testing or documentation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All without leaving VS Code.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Rich Context Understanding 🧠
&lt;/h3&gt;

&lt;p&gt;GitHub Copilot with MCP access understands the relationship between your code and Azure DevOps work items. It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Help create better commit messages based on work item descriptions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Suggest relevant test cases from the user story acceptance criteria&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Help decompose large user stories into smaller, manageable tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide context about requirements when you're coding&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Real-World Example: Complete Development Workflow
&lt;/h2&gt;

&lt;p&gt;Here's how a typical development session looks like that I have with Azure DevOps MCP:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start the day:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me my assigned work items for this sprint
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Begin working on a task:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Update work item 12345 to "In Progress" and add a comment that I'm starting the implementation
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Need clarification on requirements:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me the full description and acceptance criteria for work item 12345
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;After creating a PR:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Update work item 12345 to reference PR #67 and change status to "Code Review"
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create follow-up tasks:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a new task for writing documentation for the authentication feature, link it to user story 12345
&lt;/code&gt;&lt;/pre&gt;

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

&lt;p&gt;All of this happens without ever opening a browser tab or losing focus from your code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Troubleshooting Common Issues
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP Server Not Starting:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ensure you're authenticated with Azure CLI (&lt;code&gt;az login&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check that your Azure DevOps organization name is correct&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify Node.js 20+ is installed&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Permission Issues:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make sure your Azure account has appropriate permissions in Azure DevOps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check that you're a member of the project you're trying to access&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If it says you don’t have sufficient authorization, but you know you have. Visit Azure DevOps in the browser, sometimes this will fix it for me.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Connection Problems:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Restart VS Code after configuration changes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify the MCP configuration file syntax is correct&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check your internet connection and Azure DevOps service status&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Future of AI-Powered Development
&lt;/h2&gt;

&lt;p&gt;This Azure DevOps MCP integration represents a fundamental shift in interacting with development tools. We're moving away from tool-hopping toward a unified experience where natural language becomes the interface to our entire development ecosystem.&lt;/p&gt;

&lt;p&gt;The Model Context Protocol (MCP) is the key enabler here - it's like USB-C for AI integrations. Once a service has an MCP server, any MCP-compatible AI agent can use it without custom development work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started Today
&lt;/h2&gt;

&lt;p&gt;The Azure DevOps MCP server is open source and available on GitHub at: &lt;a href="https://github.com/microsoft/azure-devops-mcp" rel="noopener noreferrer"&gt;https://github.com/microsoft/azure-devops-mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Setting up takes less than 10 minutes, but the productivity gains compound over time. You'll spend less time navigating tools and more time solving actual problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Your Experience?
&lt;/h2&gt;

&lt;p&gt;Have you tried integrating MCP servers into your development workflow? What other tools would you love to see with MCP support?&lt;/p&gt;

&lt;p&gt;I'd love to hear about your experience! Connect with me on &lt;a href="https://x.com/devbyrayray" rel="noopener noreferrer"&gt;X/Twitter&lt;/a&gt; or &lt;a href="https://linkedin.com/raym0ns" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and let's discuss how AI is transforming our development workflows.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>azuredevops</category>
      <category>githubcopilot</category>
      <category>ai</category>
    </item>
    <item>
      <title>Vibe Coding: Is This the Future of Software Development?</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Wed, 26 Mar 2025 10:42:36 +0000</pubDate>
      <link>https://dev.to/devbyrayray/vibe-coding-is-this-the-future-of-software-development-15hm</link>
      <guid>https://dev.to/devbyrayray/vibe-coding-is-this-the-future-of-software-development-15hm</guid>
      <description>&lt;p&gt;The world of software development is constantly evolving, and the latest buzz? &lt;strong&gt;Vibe coding.&lt;/strong&gt; Its an AI-driven approach thats shaking up how we write code, making it faster, more intuitive, and more fun (&lt;em&gt;not always, hahaha&lt;/em&gt;). But is it all hype, or is there something useful here? Lets dive in and see what vibe coding is about and whether its worth your attention.&lt;/p&gt;




&lt;h2&gt;
  
  
  So, Whats Vibe Coding?
&lt;/h2&gt;

&lt;p&gt;Vibe coding flips the script on traditional development. Instead of painstakingly writing out every line of code, you describe what you want in plain language, and a large language model (LLM) generates the code for you. The concept gained traction after &lt;a href="https://x.com/karpathy/status/1886192184808149383?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1886192184808149383%7Ctwgr%5E6e0a430b6f2bc487c20cb65eaf4d722426b48cf5%7Ctwcon%5Es1_&amp;amp;ref_url=https%3A%2F%2Ftimesofindia.indiatimes.com%2Ftechnology%2Ftech-news%2Fwhat-is-vibe-coding-former-tesla-ai-director-andrej-karpathy-defines-a-new-era-in-ai-driven-development%2Farticleshow%2F118659724.cms" rel="noopener noreferrer"&gt;Andrej Karpathy introduced it earlier this year&lt;/a&gt;, and its been making waves ever since.&lt;/p&gt;

&lt;p&gt;Think of it as having an AI-powered coding buddy that turns your ideas into working code. Its all about making development more conversational, reducing tedious work, and letting developers focus on solving more significant problems instead of getting stuck in syntax details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/karpathy/status/1886192184808149383" rel="noopener noreferrer"&gt;https://x.com/karpathy/status/1886192184808149383&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Its a Big Deal
&lt;/h2&gt;

&lt;p&gt;Vibe coding has the potential to open doors for more people to build software. You no longer need deep technical expertise to get startedif you can describe what you want, you can generate working code. Thats a game-changer for beginners and non-developers who want to bring their ideas to life.&lt;/p&gt;

&lt;p&gt;For experienced developers, vibe coding can boost productivity by handling the repetitive, boilerplate-heavy coding parts. Need a quick API call setup? A function to process data? Just describe it, and let AI do the rest. Its also great for rapid prototypingperfect for hackathons, proof-of-concept projects, or testing new ideas without sinking hours into setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Catch: Its Not Magic
&lt;/h2&gt;

&lt;p&gt;Before we get too carried away, lets be honestvibe coding isnt flawless. AI-generated code isnt always clean, efficient, or even correct. Bugs can creep in, requiring careful debugging and validation.&lt;/p&gt;

&lt;p&gt;Then theres the issue of understanding. You could have a maintenance nightmare if you rely too much on AI-generated code without understanding its workings. Thats a risk in professional settings where clean, maintainable code is key.&lt;/p&gt;

&lt;p&gt;Security is another concern. AI can generate code with vulnerabilities, especially when handling sensitive data or external dependencies. If you dont review it properly, you could introduce security risks without realizing it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7kjpb4ahnglv2wtpxw1s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7kjpb4ahnglv2wtpxw1s.png" width="800" height="954"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/posts/mihaivalentin_state-of-writing-code-with-ai-march-2025-activity-7307670836486856705-jXFX/?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAORaU0BYKL5LPqa2TeQfSY4JoawyqbrFX8" rel="noopener noreferrer"&gt;&lt;em&gt;LinkedIn post where they posted this picture&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Vibe Code the Right Way
&lt;/h2&gt;

&lt;p&gt;To make the most of vibe coding, use it responsibly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Always review AI-generated code.&lt;/strong&gt; Dont trust it blindlydebug and refine as needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start with non-critical projects.&lt;/strong&gt; Experiment before integrating it into production-level systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use it as a learning tool.&lt;/strong&gt; Understanding how AI interprets prompts can improve your own coding intuition.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the SyntaxFM podcast, they also talked about Vibe Coding, and I agree with their opinion. Check the video here:&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Vibe coding is more than a fleeting trendits a glimpse into the future of software development. It makes coding more accessible, speeds up workflows, and enhances creativity. But its not a replacement for traditional coding skills. Instead, its a tool that, when used wisely, can make development more efficient and enjoyable.&lt;/p&gt;

&lt;p&gt;So, are you ready to ride the vibe coding wave? Give it a shot and see where it takes you! 🚀&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy coding!&lt;/em&gt; 💻&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aitools</category>
      <category>programmingblogs</category>
      <category>programmingtips</category>
    </item>
    <item>
      <title>Save Hours By Giving GitHub Copilot Custom Instructions for Code and Commit Generation 💡🤖</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Thu, 13 Mar 2025 07:58:15 +0000</pubDate>
      <link>https://dev.to/devbyrayray/save-hours-by-giving-github-copilot-custom-instructions-for-code-and-commit-generation-4h57</link>
      <guid>https://dev.to/devbyrayray/save-hours-by-giving-github-copilot-custom-instructions-for-code-and-commit-generation-4h57</guid>
      <description>&lt;p&gt;I've always believed that writing great code isn't just about getting things to work; it's about creating a story in every line and commit.&lt;/p&gt;

&lt;p&gt;I was recently diving into the documentation of GitHub Copilot, and I was thrilled to discover that you can teach it using your coding and commit message style.&lt;/p&gt;

&lt;p&gt;In this post, I will show you how I set up custom instructions so that Github Copilot generates code similar to my coding style and writes commit messages in our team's language. Trust me, once you get this working, you'll never look at your Git history the same way again!&lt;/p&gt;




&lt;h3&gt;
  
  
  What are custom instructions?
&lt;/h3&gt;

&lt;p&gt;Custom instructions are like giving GitHub Copilot a guide detailing your coding preferences and committing message rules. Imagine having a teammate who already knows your quirks, whether you love using double quotes in JavaScript or insist on using conventional commit messages.&lt;/p&gt;

&lt;p&gt;With custom instructions, whenever you ask GitHub Copilot for help, it automatically writes in your style and follows your guidelines. Its not just about saving time; its about ensuring consistency throughout your project.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Create the settings file
&lt;/h3&gt;

&lt;p&gt;First, create a folder (if it's not already there yet) &lt;code&gt;.vscode&lt;/code&gt; and create a &lt;code&gt;settings.json&lt;/code&gt; file in it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhy728d2jwfl3wl9eku0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhy728d2jwfl3wl9eku0x.png" width="395" height="192"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Set up custom instructions for code generation
&lt;/h3&gt;

&lt;p&gt;Then, I create a file called &lt;code&gt;code-style.md&lt;/code&gt; in the a &lt;code&gt;docs&lt;/code&gt; folder in my repository. I outline my coding style for languages like JavaScript, CSS, and Vue.js in that file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Code Style Guide

## General Guidelines
- Keep the code simple and readable.
- Use Prettier for code formatting.

## CSS
- Use class names that are descriptive and follow a consistent naming convention.
- Avoid using IDs for styling.
- Organize CSS properties in a logical order.

## Tailwind CSS- Use utility-first classes to build components.- Avoid using custom CSS when possible.- Group related classes together for better readability.

## JavaScript
- Use `const` and `let` instead of `var`.
- Prefer arrow functions for anonymous functions.
- Use template literals for string concatenation.
- Always use semicolons.- Follow the Prettier configuration for formatting.

## Vue.js
- Use single-file components (SFCs) with the `.vue` extension.
- Organize component structure in this order: `&amp;lt;script&amp;gt;` then `&amp;lt;template&amp;gt;` and lastly `&amp;lt;style&amp;gt;`.
- Use PascalCase for component names.
- Use kebab-case for component file names.
- Keep components small and focused.- Use Vuex for state management.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With these guidelines, GitHub Copilot generates code that seamlessly fits into my projects without needing constant tweaks.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Custom instructions for commit message generation
&lt;/h3&gt;

&lt;p&gt;A clear, consistent commit message can be a lifesaver when understanding your codebase's evolution. I create a &lt;code&gt;commit-style.md&lt;/code&gt; file in the &lt;code&gt;docs&lt;/code&gt; folder. Here's a peek at my commit style guide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Commit Style Guide
We follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) style for our commit messages. 

Here are some examples:
- `feat: add new user authentication module`
- `fix: resolve issue with data fetching.`
- `docs: update README with installation instructions`
- `style: format code with Prettier`
- `refactor: improve performance of data processing`
- `test: add unit tests for user service`- `chore: update dependencies`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way, when I click the Generate Commit Message button, GitHub Copilot produces a message summarizing the changes using our style. This will keep our Git history clean and readable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh92fl53q0z65iq3qoi90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh92fl53q0z65iq3qoi90.png" width="565" height="317"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Reference the docs in the settings file
&lt;/h3&gt;

&lt;p&gt;To tie it all together, I add the path of the markdown files in the &lt;code&gt;settings.json&lt;/code&gt;. Here is my configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ 
   "github.copilot.chat.codeGeneration.instructions": [
       { 
          "file": "docs/code-style.md"// import instructions from file `code-style.md` 
       }
   ], 
   "github.copilot.chat.commitMessageGeneration.instructions ": [
       { 
          "file": "docs/commit-message.md"// import instructions from file `commit-message.md` 
       }
   ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this setup, my code and commit messages automatically align with my standards. This simple change makes a huge difference in maintaining consistency throughout my projects.&lt;/p&gt;




&lt;h3&gt;
  
  
  Best Practices and Personal Tips
&lt;/h3&gt;

&lt;p&gt;Over time, I've learned that the key to getting the most out of custom instructions is to keep them simple and iterative. Start with the basics, then refine as you notice what works and what doesn't.&lt;/p&gt;

&lt;p&gt;By placing your custom instruction files in your repository, you ensure that everyone on your team is on the same page and speaking the same coding language.&lt;/p&gt;

&lt;p&gt;I recorded a quick video that shows precisely what I describe in this blog. Check it out below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=NrSjVO74Lm8" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=NrSjVO74Lm8&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Custom instructions for GitHub Copilot have sped up my workflow. They allow me to write cleaner code and generate commit messages that communicate the story behind my changes.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://code.visualstudio.com/docs/copilot/copilot-customization" rel="noopener noreferrer"&gt;Github Copilot custom instructions documentation&lt;/a&gt; is in the Visual Studio Code docs.&lt;/p&gt;

&lt;p&gt;If you haven't explored this feature yet, I encourage you to do so. You might be surprised at how much time you can save and how consistent your project can become. I'd love to hear about your experiences with custom instructions.&lt;/p&gt;

&lt;p&gt;Comment below, share your custom rules, or give this post a thumbs up if you find it helpful. Let's make coding a little more personal and a lot more productive!&lt;/p&gt;

&lt;p&gt;Happy coding and committing!&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubcopilot</category>
      <category>ai</category>
      <category>programmingtips</category>
    </item>
    <item>
      <title>From Hating Public Speaking to DevWorld Amsterdam 2025 (It Took Me 20 Years)</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Tue, 04 Mar 2025 09:58:11 +0000</pubDate>
      <link>https://dev.to/devbyrayray/from-hating-public-speaking-to-devworld-amsterdam-2025-it-took-me-20-years-2af5</link>
      <guid>https://dev.to/devbyrayray/from-hating-public-speaking-to-devworld-amsterdam-2025-it-took-me-20-years-2af5</guid>
      <description>&lt;p&gt;Twenty years ago, speaking in front of a crowd terrified me. I would rather fail skip a class than stand in front of an audience. Fast forward to 2025, and I was on the &lt;a href="https://devworldconference.com/" rel="noopener noreferrer"&gt;DevWorld stage in Amsterdam&lt;/a&gt;: calm and confident.&lt;/p&gt;

&lt;p&gt;This isnt a story about flawless rehearsals or perfectly scripted talks its a honest journey filled with mishaps, genuine learning, and unexpected moments of triumph.&lt;/p&gt;

&lt;p&gt;In this blog I want to highlight my lessons learned with some tips &amp;amp; tricks for you to apply in your own journey.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Tip 1: Start with a Buddy&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;My first talk was back in 2012, when responsive design was the latest buzzword. I teamed up with a colleague at our small web agency, and we took our first plunge into public speaking.&lt;/p&gt;

&lt;p&gt;I still remember the nervesfumbling with my slides and accidentally swapping min-width with max-width. Despite my shaky start, having my buddy on stage helped ease the tension. We could cover for each other and even laugh off our mistakes in real-time.&lt;/p&gt;

&lt;p&gt;Sharing the spotlight reduces the pressure. The journey feels less daunting and more collaborative when you have someone by your side.&lt;/p&gt;

&lt;p&gt;The audience, too, plays an essential role in this dynamic. They are often more invested in the genuine learning process than in pursuing flawlessness. When they witness teamwork in action, they appreciate the authenticity behind the effort. It humanizes the experience and makes the endeavor relatable.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frvshlhkwtjperfuywzds.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frvshlhkwtjperfuywzds.jpeg" alt="My first talk about JavaScript Web Speech API (sorry for the picture quality 😉)" width="700" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Tip 2: Embrace Your Unknowns&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;In 2015, I decided it was time to go solo with a talk on the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API" rel="noopener noreferrer"&gt;JavaScript Web Speech API&lt;/a&gt;. Facing an audience of mostly experienced developers, I felt the weight of expectations to deliver something technical and in-depth.&lt;/p&gt;

&lt;p&gt;When a question about accented speech caught me off guard, instead of scrambling for an answer, I admitted, I dont know but lets figure this out together after my talk! That honest response opened up a collaborative dialogue, changing a moment of panic into a learning opportunity for everyone.&lt;/p&gt;

&lt;p&gt;Practicing honesty lays the foundation for trust. When you openly acknowledge your areas of uncertainty, it enhances the authenticity of your presentation.&lt;/p&gt;

&lt;p&gt;This vulnerability not only makes your message more relatable but also encourages your audience to actively participate in exploring new ideas with you. Inviting them into this shared discovery journey creates a more engaging and dynamic atmosphere that fosters connection and collaboration.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Tip 3: Let Teaching Expose Your Gaps&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;By 2018, I mentored interns and taught courses on HTML, CSS, Flexbox, Grid, JavaScript, React, Angular, and more.&lt;/p&gt;

&lt;p&gt;One session stands out: a bright intern asked, What is a ternary operator in JavaScript? I didnt have a ready answer then, but rather than feeling embarrassed, I saw it as an opportunity to learn together.&lt;/p&gt;

&lt;p&gt;We dove into the topic, and the discussion turned into a mini-workshop that benefited everyone in the room.&lt;/p&gt;

&lt;p&gt;Teaching goes beyond sharing knowledge. It embodies the journey of learning side by side with your students. Rather than presenting oneself as the sole authority, acknowledging one's areas of uncertainty can transform each educational session into a shared expedition of discovery.&lt;/p&gt;

&lt;p&gt;This collaborative approach enhances understanding and creates a rich environment where participants feel empowered to contribute their insights and experiences.&lt;/p&gt;

&lt;p&gt;In this way, every discussion evolves into a great experience of ideas and perspectives, deepening the collective knowledge of both the instructor and the audience.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dont stress if things dont go as planned most people wont know your original plan.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Tip 4: Use Real-World Projects for Content&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;During 2023 and 2024, I partnered with my buddy Marco two talks on cutting-edge topics like GitHub Copilot for .NET projects. Back then it was pretty new for quite some developers.&lt;/p&gt;

&lt;p&gt;I even showed how you can make ChatGPT be rude toward a notoriously rude recruiter. We practiced our presentation more than four or five times, receiving invaluable feedback from colleagues, interns, and trainees.&lt;/p&gt;

&lt;p&gt;Basing your presentation on real-world projects make them highly relatable for the audience. Each practice round gave us more and more constructive feedback, which allowed us to improve our session.&lt;/p&gt;

&lt;p&gt;Embrace every practice session as a chance to fine-tune your delivery, experimenting with different approaches based on real-life experiences and scenarios. By integrating these hands-on experiments into your preparation, you can craft talks that resonate with your audience, leaving a lasting impression.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulpjse8hmaw4xvyf9zwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulpjse8hmaw4xvyf9zwa.png" width="700" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Tip 5: Let Passion Outshine Perfection&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;In February 2025, I took the stage at DevWorld for my solo talk on local AI tools like Ollama, LM Studio, and Continue.dev a genuinely passionate topic.&lt;/p&gt;

&lt;p&gt;I prepared extensively with the support of trainees and colleagues, rehearsing and iterating my demos. While there were no demo glitches, the unpredictable nature of LLMs kept the audience engaged. I even showcased earlier tryouts of conversational demos to highlight the evolution of my work.&lt;/p&gt;

&lt;p&gt;Preparation is key. Dont stress if things dont go as planned most people wont know your original plan. Plan for failure, be ready for unexpected twists and remember that passion will always outshine a quest for flawless perfection.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;You can find my presentation&lt;/em&gt; &lt;a href="https://dw2025.byrayray.dev/" rel="noopener noreferrer"&gt;&lt;em&gt;https://dw2025.byrayray.dev/&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Your Turn to Start&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Every stumble from mixing up media queries to facing unexpected questions has shaped the speaker I am today.&lt;/p&gt;

&lt;p&gt;My journey wasnt about flawless delivery; it was about taking that first step, learning from each experience, and letting my passion lead the way.&lt;/p&gt;

&lt;p&gt;If youre hesitating to give that first talk, remember: your voice matters, and every mistake is a stepping stone toward improvement.&lt;/p&gt;

&lt;p&gt;Ready to take the plunge?&lt;/p&gt;

&lt;p&gt;Whats your funniest speaking fail? Share your story below, and lets learn from each other after all, every great speaker once started with a shaky first step!&lt;/p&gt;

&lt;p&gt;]]&amp;gt;&lt;/p&gt;

</description>
      <category>conference</category>
      <category>developer</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>How to use Angular Signals</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Wed, 21 Jun 2023 15:33:50 +0000</pubDate>
      <link>https://dev.to/devbyrayray/how-to-use-angular-signals-23md</link>
      <guid>https://dev.to/devbyrayray/how-to-use-angular-signals-23md</guid>
      <description>&lt;p&gt;Angular Signals are hot right now! Even if you still need to start using them because you're not on Angular 16, Making your Angular development more straightforward and future-proof is worth your time.&lt;/p&gt;

&lt;p&gt;Do you find RxJS complex? Well, you are not the only one. So many others think that way. Well, Angular Signals solves that problem for so many developers. So let's dive into it together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Sources:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/devbyray/angular-signals-vs-rxjs" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codesandbox.io/p/github/devbyray/angular-signals-vs-rxjs/main?layout=%257B%2522sidebarPanel%2522%253A%2522EXPLORER%2522%252C%2522rootPanelGroup%2522%253A%257B%2522direction%2522%253A%2522horizontal%2522%252C%2522type%2522%253A%2522PANEL_GROUP%2522%252C%2522id%2522%253A%2522ROOT_LAYOUT%2522%252C%2522panels%2522%253A%255B%257B%2522type%2522%253A%2522PANEL_GROUP%2522%252C%2522direction%2522%253A%2522horizontal%2522%252C%2522id%2522%253A%2522EDITOR%2522%252C%2522panels%2522%253A%255B%257B%2522type%2522%253A%2522PANEL%2522%252C%2522panelType%2522%253A%2522TABS%2522%252C%2522id%2522%253A%2522clim5w3tu00753p6olf6t445f%2522%257D%255D%252C%2522sizes%2522%253A%255B100%255D%257D%252C%257B%2522type%2522%253A%2522PANEL_GROUP%2522%252C%2522direction%2522%253A%2522horizontal%2522%252C%2522id%2522%253A%2522DEVTOOLS%2522%252C%2522panels%2522%253A%255B%257B%2522type%2522%253A%2522PANEL%2522%252C%2522panelType%2522%253A%2522TABS%2522%252C%2522id%2522%253A%2522clim5w3tu00763p6ok5kqy7xm%2522%257D%255D%252C%2522sizes%2522%253A%255B100%255D%257D%255D%252C%2522sizes%2522%253A%255B65.34208440466293%252C34.65791559533707%255D%257D%252C%2522tabbedPanels%2522%253A%257B%2522clim5w3tu00753p6olf6t445f%2522%253A%257B%2522id%2522%253A%2522clim5w3tu00753p6olf6t445f%2522%252C%2522tabs%2522%253A%255B%257B%2522type%2522%253A%2522FILE%2522%252C%2522filepath%2522%253A%2522%252Fsrc%252Fapp%252Fsignals-updates-array%252Fsignals-updates-array.component.ts%2522%252C%2522id%2522%253A%2522clj5ojqfc00ro3p6o339jgi5z%2522%252C%2522mode%2522%253A%2522permanent%2522%257D%255D%252C%2522activeTabId%2522%253A%2522clj5ojqfc00ro3p6o339jgi5z%2522%257D%252C%2522clim5w3tu00763p6ok5kqy7xm%2522%253A%257B%2522id%2522%253A%2522clim5w3tu00763p6ok5kqy7xm%2522%252C%2522tabs%2522%253A%255B%257B%2522type%2522%253A%2522TASK_LOG%2522%252C%2522taskId%2522%253A%2522start%2522%252C%2522id%2522%253A%2522clim5wjf200cy3p6o6ltrngnd%2522%252C%2522mode%2522%253A%2522permanent%2522%257D%252C%257B%2522type%2522%253A%2522TASK_PORT%2522%252C%2522taskId%2522%253A%2522start%2522%252C%2522port%2522%253A4200%252C%2522id%2522%253A%2522clim5wpod00i73p6obec6k6sr%2522%252C%2522mode%2522%253A%2522permanent%2522%252C%2522path%2522%253A%2522%252F%2522%257D%255D%252C%2522activeTabId%2522%253A%2522clim5wpod00i73p6obec6k6sr%2522%257D%257D%252C%2522showDevtools%2522%253Atrue%252C%2522showSidebar%2522%253Atrue%252C%2522sidebarPanelSize%2522%253A29.677019335262912%257D" rel="noopener noreferrer"&gt;CodeSandbox&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://angular-signals-vs-rxjs.vercel.app/" rel="noopener noreferrer"&gt;Example website&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Signals
&lt;/h2&gt;

&lt;p&gt;Angular Signals are reactive properties in your Angular component, directive, or service. They update their value automatically; you don't need to listen to changes. No, they are doing all of that for you. Let's start with creating a Signal and showing it in the view.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get the value
&lt;/h3&gt;

&lt;p&gt;Let's start simple. Getting a value from a signal is pretty straightforward.&lt;/p&gt;

&lt;p&gt;If we want to show the value of a signal in the view, we need to define it first in the component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({...})
export class Component {
    count = signal&amp;lt;number&amp;gt;(0)
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then in the view, we can output it in an expression like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div&amp;gt;{{ count() }}&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is that easy. But how do we use a value of a signal in our component?&lt;/p&gt;

&lt;h3&gt;
  
  
  How to get a value in a component class
&lt;/h3&gt;

&lt;p&gt;The class of your component is also slightly different. The &lt;code&gt;Signal&lt;/code&gt; value can be retrieved as easily as &lt;code&gt;this.count()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({...})
export class Component {
    count = signal&amp;lt;number&amp;gt;(0)

    private logCount(): void {
        console.log('Count: ', this.count())
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since signals are built for reactivity in Angular, we want to set and update a value in a signal. Let's dive into that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting and updating the value
&lt;/h3&gt;

&lt;p&gt;Reading the values of a &lt;code&gt;Signal&lt;/code&gt; is simple. But if you are used to RxJS with Observables and Behavioursubjects, for example, this is a bit different, but I know you will love the simplicity!&lt;/p&gt;

&lt;p&gt;By default, you can give a signal a value (just like the &lt;code&gt;BehaviourSubject&lt;/code&gt;). When the value is changed, the view is updated automatically. Setting the value of a signal can be done with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({...})
export class Component {
    count = signal&amp;lt;number&amp;gt;(0)

    private changeCount(): void {
        this.count.set(30)
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to update a value in a Signal based on the previous value
&lt;/h3&gt;

&lt;p&gt;If you want to update your &lt;code&gt;Signal&lt;/code&gt; based on the previous value, use the &lt;code&gt;update()&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;count = signal(25)

// Update value
this.signal.update(prevValue =&amp;gt; prevValue + 10) // 35

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the update has been done, it will automatically be reflected in the view.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to update a signal with an array of objects
&lt;/h3&gt;

&lt;p&gt;Updating an Array of Objects is equally simple with Signals. For this, we will use the &lt;code&gt;.mutate()&lt;/code&gt; method.&lt;/p&gt;

&lt;p&gt;Let's say we have an Array of Objects. Each Object has a price property. What if we want to update the first price, we can do that with &lt;code&gt;.mutate()&lt;/code&gt; like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export class SignalsUpdatesArrayComponent {
    prices = signal&amp;lt;Obj[]&amp;gt;([
      { price: 10 }, 
      { price: 20 }, 
      { price: 30 }
    ])

    updatePrice(): void {
        this.prices.mutate(value =&amp;gt; (value[0].price = this.getRandomPrice()))
    }

    getRandomPrice(): number {
        return Math.round(Math.random() * 100)
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We call the &lt;code&gt;updatePrice()&lt;/code&gt; in the template, and it will be performed.&lt;/p&gt;

&lt;p&gt;But what if we want to add an Object to the Array on the fly? Well just as easy. Push a new Object in the &lt;code&gt;mutate()&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export class SignalsUpdatesArrayComponent {
    prices = signal&amp;lt;Obj[]&amp;gt;([
      { price: 10 }, 
      { price: 20 }, 
      { price: 30 }
    ])

    updatePrice(index: number): void {
        this.prices.mutate(value =&amp;gt; (value[index].price = this.getRandomPrice()))
    }
    addPrice(): void {
        this.prices.mutate(value =&amp;gt; value.push({ price: this.getRandomPrice() }))
    }

    getRandomPrice(): number {
        return Math.round(Math.random() * 100)
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://angular-signals-vs-rxjs.vercel.app/" rel="noopener noreferrer"&gt;I created an example&lt;/a&gt; so you can see that it works by easily updating the Array.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to learn more about &lt;a href="https://byrayray.dev/posts/2021-09-03_when-to-use-rxjs-subject-behavioursubject-replaysubject-asyncsubject-or-void-subject-in-angular-c2e9db61b4a0" rel="noopener noreferrer"&gt;RxJS Subjects, BehaviourSubjects and more&lt;/a&gt;? Then read the post I wrote about that in detail.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Effect
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Listen to value updates with effect()
&lt;/h3&gt;

&lt;p&gt;Listening to changes can easily be done with &lt;code&gt;effect()&lt;/code&gt; . But it's not equal to the behavior of listening to changes of an &lt;code&gt;Observable&lt;/code&gt; or &lt;code&gt;BehaviourSubject&lt;/code&gt; in RxJS. So let's see what the difference is.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;effect()&lt;/code&gt; method with Signals is mostly for updating logging, saving data to local storage, or updating your canvas. By default, you are not allowed to update a signal within the &lt;code&gt;effect()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, we create a component where we want to log when the price is updated. In the constructor, we have added the &lt;code&gt;effect()&lt;/code&gt; to show that the price has been updated. In the HTML, we create a button to update the price.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({...})
export class SignalsGetUpdatesComponent {
  price = signal&amp;lt;number&amp;gt;(10);
  priceUpdated = signal&amp;lt;boolean&amp;gt;(false);

  constructor() {
    effect(() =&amp;gt; {
      console.log(`Price updated ${this.price()}`);
    });
  }

  updatePrice() {
    this.price.update((price) =&amp;gt; price + 30);
    this.priceUpdated.set(true);
    setTimeout(() =&amp;gt; {
      this.priceUpdated.set(false);
    }, 2000);
  }
}


&amp;lt;div&amp;gt;
    &amp;lt;h2&amp;gt;Get updates&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;
        Add {{30 | currency: 'EUR'}} to the price &amp;lt;br /&amp;gt;
        of {{10 | currency: 'EUR'}} and notify.
    &amp;lt;/p&amp;gt;

    &amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Is price updated: &amp;lt;/strong&amp;gt; {{priceUpdated() ? "👍" : "👎"}}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Price: &amp;lt;/strong&amp;gt; {{price() | currency:'EUR'}}&amp;lt;/p&amp;gt;
    &amp;lt;button (click)="updatePrice()" [ngClass]="{'is-updated': priceUpdated()}"&amp;gt;Add {{30 | currency: 'EUR'}}&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, I update the &lt;code&gt;priceUpdated&lt;/code&gt; signal in the &lt;code&gt;updatePrice()&lt;/code&gt; method while updating the price. When you use RxJS with a &lt;code&gt;BehaviourSubject&lt;/code&gt;, you could have done that in the &lt;code&gt;subscribe()&lt;/code&gt; method. This is a matter of taste on what you prefer.&lt;/p&gt;

&lt;p&gt;If you know what you do and are aware of creating possibly an infinite loop with updating signals in the &lt;code&gt;effect(),&lt;/code&gt; you can do that by passing a second parameter &lt;code&gt;{ allowSignalWrites: true }&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({...})
export class SignalsGetUpdatesEffectUpdateComponent {
    price = signal&amp;lt;number&amp;gt;(10)
    priceUpdated = signal&amp;lt;boolean&amp;gt;(false)

    constructor() {
        effect(
            () =&amp;gt; {
                console.log(`Price updated ${this.price()}`)

                this.priceUpdated.set(true)
                setTimeout(() =&amp;gt; {
                    this.priceUpdated.set(false)
                }, 2000)
            },
            { allowSignalWrites: true }
        )
    }

    updatePrice() {
        this.price.update(price =&amp;gt; price + 30)
    }
}


&amp;lt;div&amp;gt;
    &amp;lt;h2&amp;gt;Get updates and overwrite signal in effect&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;
        Add {{30 | currency: 'EUR'}} to the price &amp;lt;br /&amp;gt;
        of {{10 | currency: 'EUR'}} and notify.
    &amp;lt;/p&amp;gt;

    &amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Is price updated: &amp;lt;/strong&amp;gt; {{priceUpdated() ? "👍" : "👎"}}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Price: &amp;lt;/strong&amp;gt; {{price() | currency:'EUR'}}&amp;lt;/p&amp;gt;
    &amp;lt;button (click)="updatePrice()" [ngClass]="{'is-updated': priceUpdated()}"&amp;gt;Add {{30 | currency: 'EUR'}}&amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The effect will run when the component is initialized, like the &lt;code&gt;ngOnInit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Computations
&lt;/h2&gt;

&lt;p&gt;Let's talk about computations. You use a computation when calculating or doing string concatenation based on changing one or more values.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get the value from the computation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Signal
getDoubleCount() {
    console.log(this.doubleCount())
}

// BehaviourSubject
getDoubleCount() {
    this.doubleCount.subscribe((value) =&amp;gt; console.log(value))
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is where getting the simplest thing, as getting the double-count value, is going to be less straightforward with the &lt;code&gt;BehaviourSubject&lt;/code&gt; if you compare it with the &lt;code&gt;Signal&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Because with the &lt;code&gt;BehaviourSubject&lt;/code&gt;, you want to ensure the subscription is removed when it's not needed anymore.&lt;/p&gt;

&lt;p&gt;With signals, Angular handles many things for you, more than using RxJS. With RxJS, we can often get buried in complex and hard-to-read code, especially for people who have yet to get used to Angular or RxJS.&lt;/p&gt;

&lt;p&gt;For example, with RxJS, we need to clean our subscriptions ourselves; with signals, we don't have that because Angular handles that for us.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Inside a component class
// ...
destroy$ = new Subject&amp;lt;void&amp;gt;();

ngOnDestroy() {
    this.destroy$.next();
}

getDoubleCount() {
    this.doubleCount
        .pipe(takeUntil(this.destroy$))
        .subscribe((value) =&amp;gt; console.log(value))
}
//...

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No, signals bring a lot of simplicity while using reactivity. Developers coming from Vue will be used to a very similar way of handling reactive properties.&lt;/p&gt;

&lt;p&gt;For example, let's update a first name and show the user the full name. We will use &lt;code&gt;computed()&lt;/code&gt; to help us with that.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Component({...})
export class SignalsComputeValueComponent {
  firstName = signal('Bart')
  lastName = signal('The Great')

  fullName = computed(() =&amp;gt; this.firstName() + ' ' + this.lastName())

  changeFirstName() {
    this.firstName.set('Ray')
  }
}


&amp;lt;div&amp;gt;
    &amp;lt;h2&amp;gt;Get updates and overwrite signal in effect&amp;lt;/h2&amp;gt;

    &amp;lt;p&amp;gt;
        &amp;lt;strong&amp;gt;Firstname:&amp;lt;/strong&amp;gt; {{ firstName() }} &amp;lt;br /&amp;gt;
        &amp;lt;strong&amp;gt;Lastname:&amp;lt;/strong&amp;gt; {{ lastName() }}
    &amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Fullname computation:&amp;lt;/strong&amp;gt; {{ fullName() }}&amp;lt;/p&amp;gt;

    &amp;lt;p&amp;gt;
        &amp;lt;button (click)="changeFirstName()"&amp;gt;Update firstname&amp;lt;/button&amp;gt;
    &amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, the &lt;code&gt;fullName&lt;/code&gt; property merges two strings in the &lt;code&gt;computed()&lt;/code&gt; method. When the &lt;code&gt;firstName&lt;/code&gt; is updated, the &lt;code&gt;fullName&lt;/code&gt; will be updated automatically, and you can see it directly in the view. It is that simple!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks
&lt;/h2&gt;

&lt;p&gt;Now you are entirely up to date with how to use Angular Signals. I hope you can start using them right away.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdevbyrayray.hashnode.dev%2Fimages%2F0__4aTcitCaVTWHHeiO.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdevbyrayray.hashnode.dev%2Fimages%2F0__4aTcitCaVTWHHeiO.jpg" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmr3ek3kgdrgkooh8paq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmr3ek3kgdrgkooh8paq.png" alt="hashnode-footer.png" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After reading this story, I hope you learned something new or are inspired to create something new! 🤗 If I left you with questions or something to say as a response, scroll down and type me a message, send me a&lt;/em&gt; &lt;a href="https://twitter.com/@devbyrayray" rel="noopener noreferrer"&gt;&lt;em&gt;DM on Twitter @DevByRayRay&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Want to receive new posts in your mailbox? No, not only a link, just the whole article without any ads&lt;/em&gt; 🤗 &lt;em&gt;or other stuff.&lt;/em&gt; &lt;a href="https://byrayraydev.substack.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;em&gt;Then subscribe to my newsletter&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;em&gt;👍. I promise I wont spam you, only the most important and best-quality content will be sent to you .&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did you know that you can create a &lt;a href="https://hashnode.com/@devbyrayray/joinme" rel="noopener noreferrer"&gt;Developer blog like this one, yourself&lt;/a&gt;? It's entirely for free. 👍💰🎉🥳🔥&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>angular</category>
      <category>rxjs</category>
      <category>typescript</category>
    </item>
    <item>
      <title>5 Ways to Improve Your Coding Skills with ChatGPT: Tips and Tricks for Developers</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Wed, 05 Apr 2023 09:03:49 +0000</pubDate>
      <link>https://dev.to/devbyrayray/5-ways-to-improve-your-coding-skills-with-chatgpt-tips-and-tricks-for-developers-5a36</link>
      <guid>https://dev.to/devbyrayray/5-ways-to-improve-your-coding-skills-with-chatgpt-tips-and-tricks-for-developers-5a36</guid>
      <description>&lt;p&gt;Are you a developer looking to improve your craft? Look no further than ChatGPT! In this blog post, we'll outline five tips for using ChatGPT to become a better developer, including brainstorming solutions to application problems, spotting errors in code, explaining code functionality, writing better tests, and improving code readability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT helps you brainstorm why a problem is caused in your application
&lt;/h2&gt;

&lt;p&gt;My team and I encountered an issue in our application where data needed to be included, and models still needed to update. We work in an Angular environment.&lt;/p&gt;

&lt;p&gt;Let me share a situation where I discovered the power of discovering solutions and problems in an application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Situation: Subscription didn't exist
&lt;/h3&gt;

&lt;p&gt;After manually searching for what could happen, we took the leap and started asking questions to ChatGPT. We started with this question. (&lt;em&gt;sorry, I can't show you a screenshot because it's lost with an error of ChatGPT lately&lt;/em&gt; 🥲)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are using RxJS; we have a BehaviourSubject, but at the start, the data is received by the subscribe method, but later it isn't. What could be the problem?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After this question, ChatGPT started answering them with possible situations. Last, it suggested we check if the subscription still exists. It also provided us with a solution to check it.&lt;/p&gt;

&lt;p&gt;Well, that worked 😅🎉. Finally, we found the cause, and we could fix the issue 👍&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT helps spot problems with failing tests
&lt;/h2&gt;

&lt;p&gt;In the last couple of months, I have incorporated ChatGPT into all the work in my team.&lt;/p&gt;

&lt;p&gt;Sometimes you can have failing tests that don't make sense in the first place. ChatGPT can help you discover the problems and help find the solution.&lt;/p&gt;

&lt;p&gt;Just like this situation I encountered lately with my team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Situation: Date function wrongly calculated date with Vanilla JavaScript
&lt;/h3&gt;

&lt;p&gt;The other day we replaced an old date library with a new one. But we needed to create some translation layer so our dependencies still work.&lt;/p&gt;

&lt;p&gt;After we did that, we checked the end-to-end tests. And what was the case? One error! A method that used to work before, but now it doesn't.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;getCalculatedDate(days: number, months: number, years: number) {
    const today: Date = new Date();
    const calculatedDate = new Date(
      today.getFullYear() + years,
      today.getMonth() + months,
      today.getDate() + days
    );
    const days = String(calculatedDate.getDate()).padStart(2, '0');
    const months = String(calculatedDate.getMonth() + 1).padStart(2, '0');
    const years = String(calculatedDate.getFullYear());
    const formattedDate = days + '-' + months + '-' + years;
    return formattedDate;
  }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The issue was a difference of 1 hour time difference. Even though we didn't change the method's input, the comparison function output did.&lt;/p&gt;

&lt;p&gt;After trying for a while, we started asking questions like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What if I add 3 months and 1 day to today? What date is that?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explain the calculation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Would the answer be different if adding days first in the calculation?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And so on.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Eventually, we dropped the function and asked what was going wrong here. It helped us discover that you should first add a day to the date in vanilla JavaScript. Then create a new date and add the month and year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jacgqrgmj25vddd6qeg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jacgqrgmj25vddd6qeg.png" width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The funny thing was, it happened on the 31st day of the month. And there seem to be quirky things with Dates in JavaScript (as many of us know)&lt;/p&gt;

&lt;p&gt;In the end, we got it fixed. But this shows you that if you're asking many questions, it will explain many things and eventually help resolve them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT explains a piece of code
&lt;/h2&gt;

&lt;p&gt;As I work in a large codebase, developed and maintained by changing team members, the code can not always be as clear as you wish 😅.&lt;/p&gt;

&lt;p&gt;ChatGPT got you covered on this as well.&lt;/p&gt;

&lt;p&gt;This one is simple and helped me understand and re-write functionality much more simpler.&lt;/p&gt;

&lt;p&gt;Just drop in a piece of the code and ask for an explanation. It's that simple 👍&lt;/p&gt;

&lt;p&gt;Like in this example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask to explain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8k8dbvrwmh6oucd6dh0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8k8dbvrwmh6oucd6dh0.png" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhasnode.byrayray.dev%2Fimages%2Fchatgpt-ask-code-to-explain.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhasnode.byrayray.dev%2Fimages%2Fchatgpt-ask-code-to-explain.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvl1icb1f1q6n4zhw0jd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvl1icb1f1q6n4zhw0jd.png" width="800" height="746"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhasnode.byrayray.dev%2Fimages%2Fchatgpt-code-exaplain.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhasnode.byrayray.dev%2Fimages%2Fchatgpt-code-exaplain.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT can help you write better tests
&lt;/h2&gt;

&lt;p&gt;For many developers, writing tests for our code is a challenging task. After more than a decade of experience, it still keeps me wondering sometimes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What tests do I need?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How many test cases should I create?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did I cover all the edge cases?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And many more&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, ChatGPT has got me covered as well.&lt;/p&gt;

&lt;p&gt;Sometimes I use it to brainstorm and ask for additional test cases I missed.&lt;/p&gt;

&lt;p&gt;It really helped my team and me, and I wrote better code for testing 💪&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT can re-write your code for better readability
&lt;/h2&gt;

&lt;p&gt;Sometimes you find these code examples online and wonder how it works and if there is an easier way to write them.&lt;/p&gt;

&lt;p&gt;Please drop in your code and ask it to re-write it for you. It's that simple and really helps!&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Let's say we have a complex product structure in our API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "products": [
    {
      "id": 1,
      "name": "Product A",
      "category": {
        "id": 10,
        "name": "Electronics",
        "properties": {
          "warranty": "1 year",
          "returnPolicy": "30 days"
        }
      },
      "brand": {
        "id": 100,
        "name": "Brand X",
        "properties": {
          "country": "USA",
          "established": "1995"
        }
      },
      "properties": {
        "color": "black",
        "weight": "1.2 kg"
      }
    },
    {
      "id": 2,
      "name": "Product B",
      "category": {
        "id": 11,
        "name": "Furniture",
        "properties": {
          "material": "wood",
          "assemblyRequired": "yes"
        }
      },
      "brand": {
        "id": 101,
        "name": "Brand Y",
        "properties": {
          "country": "Germany",
          "established": "2001"
        }
      },
      "properties": {
        "dimensions": "100x50x30 cm",
        "color": "brown"
      }
    }
  ]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We want to sort the products based on the returnPolicy property. Another developed this function long ago; it's not easy to read, so we want to make it more readable and add TypeScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function s(p){
  return p.sort((a,b)=&amp;gt;a.category.properties.returnPolicy.localeCompare(b.category.properties.returnPolicy))
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can ask ChatGPT to make it more readable and add types. So this is the result it comes up with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface Properties {
  returnPolicy?: string;

}

interface Category {
  id: number;
  name: string;
  properties: Properties;
}

interface Product {
  id: number;
  name: string;
  category: Category;

}

/**
 * Sort an array of products based on the "returnPolicy" property.
 * @param {Product[]} products - The array of products to be sorted.
 * @return {Product[]} - The sorted array of products.
 */
function sortProductsByReturnPolicy(products: Product[]): Product[] {
  return products.sort((productA, productB) =&amp;gt; {
    return productA.category.properties.returnPolicy.localeCompare(
      productB.category.properties.returnPolicy
    );
  });
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, it wrote a Product, Category, and generic Properties interface and applied it to the function. But also added some explicit comments to it.&lt;/p&gt;

&lt;p&gt;So refactoring becomes a lot easier with ChatGPT!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In short, ChatGPT can help developers in many ways. Whether you're just starting out or have been developing for years, ChatGPT can help you improve. This blog post provides seven tips for using ChatGPT, covering problem-solving and code readability. By using ChatGPT, you can write code faster and with fewer mistakes.&lt;/p&gt;

&lt;p&gt;One of the best things about ChatGPT is that it can find errors in code. Even experienced developers make mistakes, and finding them can be tricky. ChatGPT makes it easy to find errors and fix them. ChatGPT can also help you explain what your code is doing and write better tests.&lt;/p&gt;

&lt;p&gt;ChatGPT is also good at making code easier to read. Large codebases can be hard to maintain, primarily if the code needs better written. Using ChatGPT to improve code readability, you can make your code more accessible for other developers to understand.&lt;/p&gt;

&lt;p&gt;One of the most powerful things about ChatGPT is that it can help developers work together better. Developers can work more effectively using ChatGPT to brainstorm solutions, find errors, and improve code quality. When combined with human experience, ChatGPT can help developers deliver better results and drive innovation.&lt;/p&gt;

&lt;p&gt;In conclusion, ChatGPT is a valuable tool for developers of all levels. By following the tips in this blog post and using ChatGPT in your work, you can write better code, save time, and get better results. Whether you're a beginner or an expert, ChatGPT is worth exploring to see how it can help you and your team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmr3ek3kgdrgkooh8paq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmr3ek3kgdrgkooh8paq.png" alt="hashnode-footer.png" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After reading this story, I hope you learned something new or are inspired to create something new! 🤗 If I left you with questions or something to say as a response, scroll down and type me a message, send me a&lt;/em&gt; &lt;a href="https://twitter.com/@devbyrayray" rel="noopener noreferrer"&gt;&lt;em&gt;DM on Twitter @DevByRayRay&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Want to receive new posts in your mailbox? No, not only a link, just the whole article without any ads&lt;/em&gt; 🤗 &lt;em&gt;or other stuff.&lt;/em&gt; &lt;a href="https://byrayraydev.substack.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;em&gt;Then subscribe to my newsletter&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;em&gt;👍. I promise I wont spam you, only the most important and best-quality content will be sent to you .&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did you know that you can create a &lt;a href="https://hashnode.com/@devbyrayray/joinme" rel="noopener noreferrer"&gt;Developer blog like this one, yourself&lt;/a&gt;? It's entirely for free. 👍💰🎉🥳🔥&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>chatgpt</category>
      <category>coding</category>
    </item>
    <item>
      <title>ChatGPT + Bing = Awesome 🔥</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Thu, 09 Feb 2023 15:46:36 +0000</pubDate>
      <link>https://dev.to/devbyrayray/chatgpt-bing-awesome-5gnl</link>
      <guid>https://dev.to/devbyrayray/chatgpt-bing-awesome-5gnl</guid>
      <description>&lt;p&gt;Ladies and Gentlemen, hold on tight: the search game is about to change forever! Bing, the popular search engine, has just become even better with the integration of ChatGPT, and it's nothing short of extraordinary! In this blog post, we'll explore why the combination of Bing and ChatGPT is a game-changer and how it will make your search experience even more impressive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT
&lt;/h2&gt;

&lt;p&gt;ChatGPT is an advanced language model developed by OpenAI that understands natural language queries. It understands the context of your search and delivers precise, relevant results tailored to you. This makes it an excellent choice for search engines like Bing, as it eliminates the need to sift through irrelevant results and helps you find what you need more quickly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ChatGPT + Search engine = 🔥
&lt;/h2&gt;

&lt;p&gt;Now, let's explore why this integration is so great! Firstly, ChatGPT understands the context of your search, so you'll get more relevant results. This means you don't need to waste time looking through irrelevant search results, and you can find what you need more quickly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r20o89wu7mw39zfrypr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0r20o89wu7mw39zfrypr.png" width="800" height="1059"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the lovely details is that Bing will present the origin of the data it found. So it will still be valuable for us content creators to create that content.&lt;/p&gt;

&lt;p&gt;You can find some examples on the  &lt;a href="https://www.bing.com/new#examples" rel="noopener noreferrer"&gt;special Bing website&lt;/a&gt;. Sadly enough, we still have to wait to try it out. But you can join  &lt;a href="https://www.bing.com/new" rel="noopener noreferrer"&gt;the waiting list&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Q&amp;amp;A in Bing
&lt;/h2&gt;

&lt;p&gt;The Bing + ChatGPT integration has an excellent Q&amp;amp;A feature. You must type your question as if you were asking a friend, and ChatGPT will give you the best answer.&lt;/p&gt;

&lt;p&gt;Bing is doing something unique by integrating ChatGPT into its search engine. It shows that the competition between search engines Bing and Google are getting tougher.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Search engine competition war!
&lt;/h2&gt;

&lt;p&gt;Google should be worried. Bing and ChatGPT joining together give people a search engine that works better and is more personalized. ChatGPT can understand words people type in, give more exact results, and offer advice tailored to the person. This combination makes Bing + ChatGPT a serious threat to Google.&lt;/p&gt;

&lt;p&gt;Furthermore, ChatGPT being incorporated into Bing shows a change in the search market towards more advanced and intelligent search experiences. As technology progresses, other search engines will likely do the same and add similar technology to their services. If Google does not keep up, it could be left behind in the search market and no longer be the leading search engine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  NLP in search engines is very beneficial
&lt;/h2&gt;

&lt;p&gt;Last but not least, Bing + ChatGPT makes search simpler than ever. ChatGPT understands natural language queries, making it easy for everyone to get the answers they need, regardless of age, background, or tech knowledge. Teenagers who are tech-savvy and grandparents who are just beginning to explore search will find it easier to get the information they need.&lt;/p&gt;

&lt;p&gt;If you want to see the presentation where ChatGPT gets introduced with Bing, check the Youtube video:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/rOeRWRJ16yY" rel="noopener noreferrer"&gt;https://youtu.be/rOeRWRJ16yY&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In the end, adding ChatGPT to Bing is a game-changer that's making search even better. ChatGPT can understand natural language questions, give more exact results, and make the search easier. Bing + ChatGPT can take you on the most fantastic search journey ever! Why wait? Get ready to have a great time!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmr3ek3kgdrgkooh8paq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmr3ek3kgdrgkooh8paq.png" alt="hashnode-footer.png" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After reading this story, I hope you learned something new or are inspired to create something new! 🤗 If I left you with questions or something to say as a response, scroll down and type me a message, send me a&lt;/em&gt; &lt;a href="https://twitter.com/@devbyrayray" rel="noopener noreferrer"&gt;&lt;em&gt;DM on Twitter @DevByRayRay&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Want to receive new posts in your mailbox? No, not only a link, just the whole article without any ads&lt;/em&gt; 🤗 &lt;em&gt;or other stuff.&lt;/em&gt; &lt;a href="https://byrayraydev.substack.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;em&gt;Then subscribe to my newsletter&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;em&gt;👍. I promise I wont spam you, only the most important and best-quality content will be sent to you .&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did you know that you can create a &lt;a href="https://hashnode.com/@devbyrayray/joinme" rel="noopener noreferrer"&gt;Developer blog like this one, yourself&lt;/a&gt;? It's entirely for free. 👍💰🎉🥳🔥&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>chatgpt</category>
    </item>
    <item>
      <title>Revolutionize Your Programming with AI, ChatGPT &amp; GitHub Copilot</title>
      <dc:creator>Dev By RayRay</dc:creator>
      <pubDate>Sun, 08 Jan 2023 14:15:25 +0000</pubDate>
      <link>https://dev.to/devbyrayray/revolutionize-your-programming-with-ai-chatgpt-github-copilot-1p4l</link>
      <guid>https://dev.to/devbyrayray/revolutionize-your-programming-with-ai-chatgpt-github-copilot-1p4l</guid>
      <description>&lt;p&gt;Are you a developer looking to stay ahead of the curve? Incorporating artificial intelligence (AI) into your work is no longer a luxury but necessary. This blog post will discuss the top five benefits of embracing AI and how it can revolutionize your programming skills. Plus, we'll introduce you to a tool that makes it easy to use AI in your workflow. Don't get left behind start incorporating AI into your projects today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Originally published on&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://byrayray.dev/posts/2023-01-08-revolutionize-programming-ai-chatgpt-github-copilot" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;em&gt;ByRayRay.dev&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For a few months, I've been investigating what AI can do for developers like myself. It took my interest when &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;Github Copilot&lt;/a&gt; was launched by Github. Then I didn't know that it was driven by a product called &lt;a href="https://openai.com/blog/openai-codex/" rel="noopener noreferrer"&gt;OpenAI Codex&lt;/a&gt;, which seems to be very powerful.&lt;/p&gt;

&lt;p&gt;But especially since ChatGPT came by storm around November 2022, I'm incorporating it into my workflow. Because of that experience, I will predict the following.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Incorporating AI into your work as a developer is no longer optional. Those who refuse to adapt will eventually become obsolete as the industry moves forward with those who are utilizing AI to its full potential&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TLDR;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Incorporating AI into your work as a developer is essential for staying competitive in the industry&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI can increase efficiency, enhance accuracy, improve decision-making, enhance collaboration, and future-proof your skills&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub Copilot is a tool that makes it easy to incorporate AI into your workflow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't get left behind start using AI to revolutionize your programming skills today&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Revolution For Developers
&lt;/h2&gt;

&lt;p&gt;AI will revolutionize the way we approach software development. It can help automate tasks, analyze data, and generate code. Incorporating AI into your work is seamless and straightforward with the right tools.&lt;/p&gt;

&lt;p&gt;One such tool is GitHub Copilot, a plugin for your integrated development environment (IDE) that allows you to incorporate AI into your workflow easily. With GitHub Copilot, you can easily access AI models and incorporate them into your projects without leaving your IDE.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Reasons Why Developers Should Embrace AI
&lt;/h2&gt;

&lt;p&gt;Last few years, there have been so many people saying that I would lose my job to AI. They predicted companies would no longer need developers because AI would all take over.&lt;/p&gt;

&lt;p&gt;When you start using ChatGPT, you will soon find that you need to be specific in what you want. That's not the case. It would be best to tell it clearly and in-depth to get what you want.&lt;/p&gt;

&lt;p&gt;Since most developers will know what they want and how to write the code or how the code should look, it's super helpful to let an AI help you as a coding buddy.&lt;/p&gt;

&lt;p&gt;But beyond just the convenience factor, there are reasons why every programmer should embrace AI and incorporate it into their work. Here are five pros to consider:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Efficiency: AI can automate tasks and processes and saves time for you to focus on more critical tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accuracy: AI can analyze data and make accurate decisions that humans may not be able to achieve on their own. For example, at this date, ChatGPT has data from the beginning of the internet until 2021. So all the things written since then are used to help you make decisions. ( &lt;strong&gt;&lt;em&gt;Yes, I know ChatGPT is not always giving the correct answer, but that will improve&lt;/em&gt;&lt;/strong&gt; )&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved Decision-Making: AI can help you make more informed decisions by providing insights and recommendations based on data analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enhanced Collaboration: AI can help teams collaborate more effectively by providing real-time analysis and insights.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Future-Proofing Your Skills: As AI advances, those familiar with it will have a competitive edge in the job market.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Risks Of Not Using AI As Developers
&lt;/h2&gt;

&lt;p&gt;Of course, when there are good reasons to use AI as a developer, but there are also reasons why you shouldn't use it (yet). Let's discuss them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Initial Investment: Implementing AI into your workflow may require an initial investment in tools and resources. Right now, using Github Copilot requires a subscription of 100$ a month. In my opinion worth the money, but you can check it out for yourself with two months for free 👍&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complexity: AI can be complex and may require a learning curve to utilize its capabilities thoroughly. But to use AI in your flow, you don't need to learn all the details of AI. It's nice that you know some of the basics of how AI works. (this video by &lt;a href="https://www.youtube.com/watch?v=5q87K1WaoFI" rel="noopener noreferrer"&gt;WIRED explains AI in 5 ways of difficult what machine learning is&lt;/a&gt;. ML is the technology that helps AI learn from mistakes and improve problem-solving.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dependence on Technology: Relying on AI can create a dependence on technology, which could be problematic if it fails. So is relying on any technology we use in our life. It is also problematic if there is a bug in a Linux kernel, Visual Studio Code, Github actions, or the Azure servers we use for our pipelines. It's more problematic if the power goes off, but our civilization relies on technology daily.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But after all, the pros of incorporating AI into our work as developers outweigh the cons. Better said, all these cons are things we should keep in mind and not real cons.&lt;/p&gt;

&lt;p&gt;There is a higher risk if you are not using AI in your work. Because in the future, you will lose your job to developers embracing AI in their work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Ideas To Use ChatGPT In Our Work
&lt;/h2&gt;

&lt;p&gt;I already told you that Github Copilot is one way to use AI in your workflow as a developer. But I'm also using ChatGPT to help me explain things, give examples, and more. Here are a few ideas of what you can use.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ask For Unit Tests
&lt;/h3&gt;

&lt;p&gt;Ask to write a unit test for a particular piece of code and let it explain why it does it. For example, I gave a piece of code and asked to write a unit test for it with Jest. Yes, I could have done it myself, but this helped me to give an idea.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq08cd310509zk3w5e5cm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq08cd310509zk3w5e5cm.webp" alt="Screenshot ChatGPT" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The answer was:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexx3pa74o4em5ubzf1bi.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexx3pa74o4em5ubzf1bi.webp" alt="Screenshot ChatGPT" width="800" height="738"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Ask To Explain
&lt;/h3&gt;

&lt;p&gt;I asked ChatGPT to explain how to write a unit test for a BehaviourSubject in the RxJS library.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wk69vzotegwicnfdshm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wk69vzotegwicnfdshm.webp" alt="Screenshot ChatGPT" width="800" height="71"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The extensive answer was pretty good.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88hexyz6uoe3mglept2y.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88hexyz6uoe3mglept2y.webp" alt="Screenshot ChatGPT" width="800" height="1237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Ask To Do Certain Things
&lt;/h3&gt;

&lt;p&gt;I'm also frequently asking ChatGPT how I can do this or that. That is super useful. Because when you are going to Google the same thing, you have to scroll through so many results searching for that one clear example.&lt;/p&gt;

&lt;p&gt;Here is an example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmls1z8rvgsx9apnglqas.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmls1z8rvgsx9apnglqas.webp" alt="Screenshot ChatGPT" width="800" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The answer:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuh64euffsmkgynx630p.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuh64euffsmkgynx630p.webp" alt="Screenshot ChatGPT" width="800" height="1242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, this long answer helped my team and me a lot!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;So don't be left behind. Embrace AI and see how it can benefit your work as a developer. Incorporating AI into your projects can be seamless and straightforward with the right tools and a willingness to learn.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvy5emh9l32hvsau0s25.png" alt="divider-byrayray.png" width="733" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmr3ek3kgdrgkooh8paq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmr3ek3kgdrgkooh8paq.png" alt="hashnode-footer.png" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After reading this story, I hope you learned something new or are inspired to create something new! 🤗 If I left you with questions or something to say as a response, scroll down and type me a message, send me a&lt;/em&gt; &lt;a href="https://twitter.com/@devbyrayray" rel="noopener noreferrer"&gt;&lt;em&gt;DM on Twitter @DevByRayRay&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Want to receive new posts in your mailbox? No, not only a link, just the whole article without any ads&lt;/em&gt; 🤗 &lt;em&gt;or other stuff.&lt;/em&gt; &lt;a href="https://byrayraydev.substack.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;em&gt;Then subscribe to my newsletter&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;em&gt;👍. I promise I wont spam you, only the most important and best-quality content will be sent to you .&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did you know that you can create a &lt;a href="https://hashnode.com/@devbyrayray/joinme" rel="noopener noreferrer"&gt;Developer blog like this one, yourself&lt;/a&gt;? It's entirely for free. 👍💰🎉🥳🔥&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>chatgpt</category>
      <category>openai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
