<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Victoria Nduka - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Victoria Nduka - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 22:23:58 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/nwanduka/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Create an AWS Free Tier Account – A Step-by-Step Guide ]]>
                </title>
                <description>
                    <![CDATA[ I recently started learning cloud engineering through a bootcamp. One of our first tasks was to create an AWS account. For those of us who didn’t already have one, it seemed like a simple enough assignment. But as I went through the signup process, I... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-create-an-aws-free-tier-account/</link>
                <guid isPermaLink="false">68768aae330f8631f59cf431</guid>
                
                    <category>
                        <![CDATA[ Cloud Computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ AWS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ AWS Free Tier ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Cloud Computing Services ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Victoria Nduka ]]>
                </dc:creator>
                <pubDate>Tue, 15 Jul 2025 17:06:54 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752599184286/ff14fece-f865-4d8f-87e7-4cfed11a6946.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>I recently started learning cloud engineering through a bootcamp. One of our first tasks was to create an AWS account. For those of us who didn’t already have one, it seemed like a simple enough assignment. But as I went through the signup process, I ran into a few unexpected issues, particularly with verifying my payment method.</p>
<p>When I brought it up in our group chat, I realized I wasn’t the only one. Others were stuck too. Some couldn’t verify their phone numbers, others had their cards rejected, and a few didn’t even know what kind of card would work.</p>
<p>That’s what inspired this guide.</p>
<p>This article walks you through the exact steps to create an AWS account, with practical tips for troubleshooting common problems (especially for users in Nigeria), based on solutions that worked for me and others.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-what-is-aws">What is AWS?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-steps-to-create-an-account">Steps to Create an Account</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-common-setup-issues-and-how-to-solve-them">Common Setup Issues and How to Solve Them</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></p>
</li>
</ul>
<h2 id="heading-what-is-aws">What is AWS?</h2>
<p>Let’s say you want a place to live. Normally, you’d have to buy land, build the house from the ground up, handle the wiring and plumbing, and maybe even oversee construction. After all that, you’d still need to furnish the house – buy furniture, paint the walls, maybe call in an interior decorator. Then you'd have to reach out to the electricity company to connect your house to the grid…and so on.</p>
<p>Compare that to renting a house. With renting, a lot of that heavy lifting is already done. You move into an already-built space. If you want to repaint or get different furniture, you can. If electricity isn’t already included, you call someone to help. But still, you’re dealing with multiple providers: the landlord, the interior decorator, the electrician, and so on.</p>
<p>Now imagine there’s a single provider that gives you access to everything in one place: a ready-to-use space, electricity, furniture, interior design, and even maintenance, all on-demand – like a pre-furnished apartment. All you have to do is log in to your account, select the services you need, and pay only for what you use. If you're away for a while (say, on a long vacation), you can pause your utilities while you’re gone. That’s basically what AWS does, but for computing power and digital infrastructure.</p>
<p>Amazon Web Services (AWS) is a platform that gives you access to computing tools like servers (EC2), storage (S3), databases, and more, without needing to “build the house” yourself. You only pay for what you use. Most people (especially students or learners) start with the free tier, which gives you enough resources to learn and build basic projects without being charged. And that’s what you’ll learn how to set up here.</p>
<h2 id="heading-steps-to-create-an-account"><strong>Steps to Create an Account</strong></h2>
<p>There are 5 steps involved in successfully creating an AWS free tier account. We’ll go through them one by one.</p>
<h3 id="heading-step-1-set-up-and-verify-your-email-address">Step 1: Set up and verify your email address</h3>
<p>Go to <a target="_blank" href="https://aws.amazon.com">aws.amazon.com</a> and click on <strong>“Create Account”</strong> at the top right of the screen.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751572272275/7a9cdf0a-8afd-4b26-b5ca-4dffb2d82cd6.png" alt="The AWS home page with the &quot;create account&quot; button highlighted" class="image--center mx-auto" width="1920" height="853" loading="lazy"></p>
<p>You should be taken to the sign-up page. But you might be redirected to the sign in page instead. If that happens, scroll down a bit until you see the <strong>“New to AWS? Sign Up”</strong> button. Click it to go to the sign-up page.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751574858697/13ec0c92-93bb-4b3c-a12c-d280a754a70f.png" alt="The AWS sign-in page showing user type (root user or IAM user) and email address field. The &quot;sign up&quot; button is highlighted." class="image--center mx-auto" width="1920" height="828" loading="lazy"></p>
<p>On the sign-up page, you’ll be asked to:</p>
<ul>
<li><p>enter a root user email address</p>
</li>
<li><p>choose a name for your AWS account (you can change this name in your account settings after you sign up)</p>
</li>
</ul>
<p><strong>Tip:</strong> Use an email you check regularly. AWS sends important verification and billing alerts that you don’t want to miss.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751575004070/8c07161a-42d9-46dc-86b8-c8133f586e67.png" alt="The AWS sign-up page showing the root user email address and account name fields." class="image--center mx-auto" width="1920" height="840" loading="lazy"></p>
<p>Then click on <strong>“Verify email address”.</strong> A text-based CAPTCHA will pop up to verify your identity. In the field provided, type in the characters shown and submit.</p>
<p><strong>Tip</strong>: The refresh icon lets you load a new image if the current one is hard to read. You can also click the speaker icon to get an audio CAPTCHA if you have visual impairments.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751579148594/9a1668ca-b09a-455b-a29f-43e62e30a702.png" alt="The security verification page with CAPTCHA. The speaker and refresh buttons are to the right of the CAPTCHA." class="image--center mx-auto" width="1885" height="825" loading="lazy"></p>
<p>You’ll receive a 6-digit verification code in your email. Enter the code in the email confirmation pop-up then click <strong>“Verify”</strong> to verify your email address.</p>
<p><strong>Tip:</strong> If you don’t find the code in your inbox, check your spam folder for an email from Amazon Web Services. If it’s not there, wait for up to 5 minutes, then check again. If you still don’t get it, click the “Resend Code” button to have the code re-sent to your email.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751579441960/ec052bc8-ec71-4b56-8210-0cb65e221760.png" alt="Email verification page with a field to enter the verification code received in your email" class="image--center mx-auto" width="1890" height="825" loading="lazy"></p>
<p>Once your email is verified, you’ll get a success notification and on the same page be asked to enter your password. Your password must be at least 8 characters long and must contain at least 3 of the following:</p>
<ul>
<li><p>numbers</p>
</li>
<li><p>upper-case letters</p>
</li>
<li><p>lower-case letters</p>
</li>
<li><p>non-alphanumeric characters (such as !, @, #, and so on)</p>
</li>
</ul>
<p>Enter the password again in the “Confirm root user password” field and click <strong>“Continue”</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751642655084/c7deb8c3-23f5-4821-961a-c66f984acf9e.png" alt="AWS account sign-up screen showing the 'Create your password' step for root user verification, with fields for password entry and a 'Continue' button." class="image--center mx-auto" width="1879" height="818" loading="lazy"></p>
<h3 id="heading-step-2-enter-your-contact-information"><strong>Step 2: Enter your contact information</strong></h3>
<p>You’ll be asked to choose between a <strong>Personal</strong> or <strong>Business</strong> account. If you're signing up for learning or personal projects, the Personal option is fine.</p>
<p>Then, you’ll need to fill in your contact information. This includes:</p>
<ul>
<li><p>Your full name</p>
</li>
<li><p>Your phone number (with country code)</p>
</li>
<li><p>Your address</p>
</li>
<li><p>Your postal code</p>
</li>
</ul>
<p>Then check the box that says “<em>I have read and agree to the terms of the AWS Customer Agreement.”</em></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751816749502/c7ab3be6-f2a5-476f-bbaa-cf6f1ee02651.png" alt="AWS account creation screen showing contact information form with name field and usage type selection options (Business or Personal)." class="image--center mx-auto" width="1876" height="824" loading="lazy"></p>
<h3 id="heading-step-3-add-your-billing-information"><strong>Step 3: Add your billing information</strong></h3>
<p>The next step is to enter your billing information. Here you’ll be required to enter:</p>
<ul>
<li><p>Your billing country</p>
</li>
<li><p>Your credit or debit card details</p>
</li>
<li><p>Your billing address (could be your contact address or a different address)</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751825939816/81343027-1231-4458-92de-7a1a57353c5c.png" alt="AWS account verification screen showing billing information form, including country selection and credit card details for identity validation. Text explains temporary $1 hold for verification." width="1893" height="821" loading="lazy"></p>
<p>Click “Verify and continue” to move on to the next step.</p>
<p><strong>Note:</strong> AWS may temporarily hold up to $1 (or an equivalent amount in local currency) as a pending transaction for 3-5 days to verify your identity.</p>
<h3 id="heading-step-4-verify-your-identity"><strong>Step 4: Verify your identity</strong></h3>
<p>Once you’ve filled in your billing information, AWS will ask you to verify your identity by entering a code they’ll send to you. You can choose to receive the code via text message (SMS) or voice call.</p>
<p>Enter your country code and mobile phone number and click <strong>“Send SMS”</strong> (if you chose the text message option) to continue.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751826368753/e77d6961-d949-430e-843a-9d9193687d98.png" alt="AWS account verification screen showing phone number authentication step, with options for SMS text or voice call verification. Includes country code dropdown (Nigeria +234 selected) and phone number input field." class="image--center mx-auto" width="1876" height="828" loading="lazy"></p>
<p>You’ll be required to complete another CAPTCHA. Enter the characters in the image shown to confirm your identity.</p>
<p>Enter the code you received in the field and click <strong>“Verify and continue.”</strong></p>
<p>You might see an error message that says, <strong>“There was a problem with your payment information.”</strong> This means AWS couldn’t verify your payment method. When this happens, it's usually due to one of the following reasons:</p>
<ul>
<li><p>The card you used isn’t one that AWS accepts</p>
</li>
<li><p>You entered incorrect card details</p>
</li>
<li><p>The name and billing address you provided don’t match what your card issuer has</p>
</li>
<li><p>Your card doesn’t have at least $1 available for the temporary hold</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752326420973/33a9f33b-55aa-4539-9a2f-1d04ad701c32.png" alt="AWS error message screen showing payment verification failure, with instructions to update payment details or contact support." class="image--center mx-auto" width="1866" height="821" loading="lazy"></p>
<p>If you get this error, AWS will ask you to sign in and update your payment method. Here’s how to do it:</p>
<ol>
<li><p><a target="_blank" href="https://signin.aws.amazon.com/">Sign in</a> to your AWS account. You may automatically be taken to the Billing and Cost Management dashboard. If not, use the search bar at the top of the page to search for "Billing", then click on the Billing and Cost Management service.</p>
</li>
<li><p>In the left-hand menu, scroll down and click "Payment preferences."</p>
</li>
<li><p>Click <strong>"Edit"</strong> next to your existing card details to correct the billing name and address, or click <strong>"Add payment method"</strong> to enter a new payment method.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752329795101/a4106217-e747-4a20-a099-7d1a8bcb5e04.png" alt="AWS payment preferences dashboard showing unverified Mastercard alert with instructions to resolve payment verification issues." class="image--center mx-auto" width="1868" height="750" loading="lazy"></p>
</li>
</ol>
<h3 id="heading-step-5-choose-a-support-plan"><strong>Step 5: Choose a support plan</strong></h3>
<p>Next, AWS asks you to pick a support plan. Select the <strong>Basic support (Free)</strong> plan. It’s the recommended plan for new users who are just getting started with AWS.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751827793660/0e4b9aec-62fc-42cf-a11b-822251377ff6.png" alt="AWS support plan selection screen showing three tiered options: Free Basic support for beginners, $29/month Developer plan with business-hour assistance, and $100/month Business plan with 24/7 production support." class="image--center mx-auto" width="1878" height="834" loading="lazy"></p>
<p>You’ll still get access to the AWS Free Tier, which includes:</p>
<ul>
<li><p>750 hours of EC2 compute</p>
</li>
<li><p>5GB of S3 storage</p>
</li>
<li><p>and many more services you can experiment with for free (for up to 12 months)</p>
</li>
</ul>
<p><strong>Note:</strong> You can upgrade your plan later if needed. No need to pay now.</p>
<h3 id="heading-step-6-sign-in-and-explore-the-console"><strong>Step 6: Sign In and Explore the Console</strong></h3>
<p>Once everything is verified, you’ll be able to sign in to the <a target="_blank" href="https://console.aws.amazon.com/">AWS Management Console</a>. This is your dashboard for managing all AWS services, from setting up virtual servers (EC2) to experimenting with storage (S3) or databases (RDS).</p>
<p><strong>Note:</strong> Sometimes, it takes a few hours for your account to become fully active. If it takes more than 24 hours, reach out to AWS Support via chat or email.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752332214646/570608e0-6e7d-46a0-83c2-41d60604792e.png" alt="Final AWS account creation screen showing successful activation message with progress notification. Includes two action buttons: 'Go to AWS Management Console' and 'Sign up for another account'." class="image--center mx-auto" width="1873" height="787" loading="lazy"></p>
<h2 id="heading-common-setup-issues-and-how-to-solve-them"><strong>Common Setup Issues and How to Solve Them</strong></h2>
<p>I’ve summarized the most common issues I’ve come across or heard about with quick fixes here:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Problem</strong></td><td><strong>Cause</strong></td><td><strong>Solution</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Payment verification failed</td><td>1. Local naira card rejected</td><td>1. Use a dollar virtual card (for example, Geegpay, Grey, and so on)</td></tr>
<tr>
<td></td><td>2. Card info doesn’t match billing info</td><td>2. Match the name, address, and ZIP exactly</td></tr>
<tr>
<td></td><td>3. Incorrect billing information</td><td>3. Edit payment method with correct billing information (full name, billing address, and card details)</td></tr>
<tr>
<td></td><td>4. Insufficient balance on card</td><td>4. Have at least $1 on your card for the temporary hold</td></tr>
<tr>
<td>Didn't Get Verification Code</td><td>Network or SMS failure</td><td>Try another mobile network or use voice call option</td></tr>
<tr>
<td>Stuck After Signup</td><td>AWS still processing your account</td><td>Wait a few hours, then contact support if needed</td></tr>
</tbody>
</table>
</div><h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>Getting your AWS account set up is an important step in your cloud journey. Once you’re in, you’ll be able to explore powerful tools, build projects, and gain hands-on experience all within the free tier.</p>
<p>If you're reading this because you're just starting out like I was, well done. You’ve already taken one of the most important steps. Keep learning, keep building, and don’t be afraid to ask for help when you need it.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ A Beginner's Guide to Observability in Cloud Native Applications ]]>
                </title>
                <description>
                    <![CDATA[ If you're new to cloud native technologies, you may have heard the term 'observability' before. But what exactly does it mean? Is it simply the ability to observe? And if so, what are we observing and why? I had the same questions when I started lear... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/observability-in-cloud-native-applications/</link>
                <guid isPermaLink="false">67e2d66c64d44185d5a6d406</guid>
                
                    <category>
                        <![CDATA[ otlp resource attributes ]]>
                    </category>
                
                    <category>
                        <![CDATA[ cloud native applications ]]>
                    </category>
                
                    <category>
                        <![CDATA[ observability ]]>
                    </category>
                
                    <category>
                        <![CDATA[ #prometheus ]]>
                    </category>
                
                    <category>
                        <![CDATA[ OpenTelemetry ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Otel ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Victoria Nduka ]]>
                </dc:creator>
                <pubDate>Tue, 25 Mar 2025 16:14:36 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1742917070693/fa372981-fb20-4230-bd9f-43b7255b8ced.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you're new to cloud native technologies, you may have heard the term 'observability' before. But what exactly does it mean? Is it simply the ability to observe? And if so, what are we observing and why?</p>
<p>I had the same questions when I started learning about cloud-native technologies. In this article, I'll share my understanding of core observability concepts, introduce essential observability tools, and share insights from a related project I’m working on.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-my-introduction-to-cloud-native-technologies">My Introduction to Cloud Native Technologies</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-what-is-observability">What is Observability?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-types-of-observability-data">Types of Observability Data</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-1-metrics">1. Metrics</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-2-logs">2. Logs</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-3-traces">3. Traces</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-observability-tools">Observability Tools</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-prometheus">Prometheus</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-opentelemetry">OpenTelemetry</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-what-are-otlp-resource-attributes">What are OTLP Resource Attributes?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-importance-of-otlp-resource-attributes">Importance of OTLP Resource Attributes</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-my-project-work-fits-into-all-this">How My Project Work Fits into All This</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-additional-resources">Additional Resources</a></p>
</li>
</ul>
<h2 id="heading-my-introduction-to-cloud-native-technologies">My Introduction to Cloud Native Technologies</h2>
<p>I recently got selected as a mentee for the Linux Foundation Mentorship to work on the <a target="_blank" href="https://mentorship.lfx.linuxfoundation.org/project/36e3f336-ce78-4074-b833-012015eb59be">CNCF - Prometheus project</a>. The project is UX-focused, and for the next few months, I'll be working with my mentors to understand how users expect to use OpenTelemetry Line Protocol (OTLP) Resource Attributes in Prometheus.</p>
<p>That's quite a mouthful, I know. I was overwhelmed at first, and honestly, I’m still figuring it out. This is my third week, and although I still have a lot to learn—given that I had no knowledge of cloud native technologies when I applied for this internship—I've already learned quite a bit.</p>
<p>As I often do, I intend to document what I learn through articles to help reinforce concepts in my memory and serve as a resource for other newcomers who may find themselves grappling with these technical terms in the future. You know what they say: you can't say you've understood something until you're able to explain it to someone else who's also new to the topic.</p>
<h2 id="heading-what-is-observability">What is Observability?</h2>
<p>First, I had to learn what the unfamiliar terms meant—and there were a lot of them flying around. OpenTelemetry. Prometheus. Resource attributes. I’ve come to understand that these terms fall under one umbrella: Observability. Let's start there.</p>
<p>Let’s use a food delivery app to illustrate. When someone orders food, a lot happens behind the scenes:</p>
<ul>
<li><p>The app connects to different services (restaurants, payments, delivery)</p>
</li>
<li><p>Data flows between different systems to process the order, assign a driver, and track delivery</p>
</li>
</ul>
<p>Engineers need to monitor all the processes to ensure everything works smoothly. Are orders taking too long to process? Is the payment system failing? Does the app suddenly crash under load? Which part of the system is causing delays?</p>
<p>To answer these questions, engineers <strong>instrument</strong> their code. This means that they configure it to send back real-time data about the state, performance, and behavior of the application. This practice of understanding what's happening inside a complex system based on the data it generates is known as <strong>Observability</strong>.</p>
<p>You can see the process illustrated in the image below:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1742335445056/5fe7bb0b-bdf9-4f52-a2c1-7f2977411c6c.png" alt="A flowchart diagram titled &quot;Visual flow of observability data&quot; showing how data moves through a food delivery application system. The flow starts with a User who orders food from a Food App. The Food App connects to three services (Restaurant, Payment, and Delivery). All these components send data to OpenTelemetry, which collects three types of data: Metrics, Logs, and Traces. OpenTelemetry then forwards only the Metrics data to Prometheus, which stores metrics." class="image--center mx-auto" width="2080" height="1888" loading="lazy"></p>
<p>In the above flowchart diagram, you can see how data might move through a food delivery application system. The flow starts with a User who orders food from a Food App. The Food App connects to three services (Restaurant, Payment, and Delivery). All these components send data to OpenTelemetry, which collects three types of data: Metrics, Logs, and Traces. OpenTelemetry then forwards only the Metrics data to Prometheus, which stores metrics.</p>
<h2 id="heading-types-of-observability-data">Types of Observability Data</h2>
<p>There are three key types of data that systems generate for observability:</p>
<h3 id="heading-1-metrics"><strong>1. Metrics</strong></h3>
<p>Metrics are numerical measurements collected over time that represent the state or performance of your system. Examples in a food delivery app would be the number of orders processed per minute, average order processing time in milliseconds, number of active users or delivery drivers, and so on.</p>
<h3 id="heading-2-logs"><strong>2. Logs</strong></h3>
<p>Logs are text-based records of discrete events that occur within your application. Logs for our food delivery app would look something like this:</p>
<pre><code class="lang-http"><span class="hljs-attribute">ERROR</span>: Payment failed for order #12345 - Credit card declined
<span class="hljs-attribute">INFO</span>: Driver #789 assigned to order #12345
</code></pre>
<h3 id="heading-3-traces"><strong>3. Traces</strong></h3>
<p>Traces track the entire lifecycle of a request as it moves through different services in a system. They help engineers see how different components interact and identify bottlenecks in complex, distributed systems.</p>
<p>For example, in our food delivery app, a single order request might go through the following steps:<br><code>User places an order</code> → <code>Request sent to restaurant system</code> → <code>Payment processor verifies payment</code> → <code>Delivery system assigns a driver</code> → <code>User receives confirmation</code>.</p>
<p>Each step in this journey is recorded as part of a trace. This helps engineers pinpoint where delays occur and optimize the system for better performance.</p>
<p>Observability relies on metrics, logs, and traces working together to provide full system visibility. Metrics tell you something is wrong (“Error rate increased by 5%”). Logs tell you why it happened (“Payment failed due to invalid card details”). Traces show exactly where it happened (“Delay in restaurant service response”).</p>
<h2 id="heading-observability-tools"><strong>Observability Tools</strong></h2>
<p>Observability tools give you visibility into what’s going on within your application. There are a lot of them, but for the purpose of this article, we’ll talk about two: Prometheus and OpenTelemetry. </p>
<h3 id="heading-prometheus"><strong>Prometheus</strong></h3>
<p><a target="_blank" href="https://prometheus.io/">Prometheus</a> is an open-source monitoring and alerting toolkit. It does two things:</p>
<ul>
<li><p>Collects data from applications, specifically metrics (remember the data types we talked about earlier)</p>
</li>
<li><p>and stores them in a time-series database.</p>
</li>
</ul>
<p>A time-series database is a database specifically designed to handle measurements or events that occur over time.</p>
<p>Prometheus uses what's called a <strong>pull-based model</strong> to collect metrics from applications. Pull-based means Prometheus actively requests (pulls) data from services at regular intervals. Think of it like refreshing a webpage to get the latest content.</p>
<h3 id="heading-opentelemetry"><strong>OpenTelemetry</strong></h3>
<p><a target="_blank" href="https://opentelemetry.io/">OpenTelemetry (OTel)</a> collects, processes, and exports observability data. Unlike Prometheus, which mainly focuses on metrics, OpenTelemetry provides a standardized way to instrument applications for all three types of observability data: logs, metrics, and traces.</p>
<p>OpenTelemetry is designed to be vendor-agnostic. This means you can instrument your applications once with OpenTelemetry and then send that telemetry data to any supported observability backend, which could be an open-source solution like Jaeger or Prometheus, or commercial platforms like Datadog, New Relic, Dynatrace, or Honeycomb.</p>
<p>So, for example, you can use OpenTelemetry to instrument your application – and then Prometheus can pull metrics from OpenTelemetry while other tools handle logs and traces.</p>
<h2 id="heading-what-are-otlp-resource-attributes"><strong>What are OTLP Resource Attributes?</strong></h2>
<p>When OpenTelemetry collects data from applications, it does more than just gather raw telemetry data. It also provides context about that data. This context comes in the form of <strong>resource attributes</strong>, which describe where the data came from and what it relates to.</p>
<p>The 'resource' is the component (or entity) producing the data, while the 'attributes' are specific details about that resource.</p>
<p>Resource attributes are structured as pairs of information:</p>
<ul>
<li><p>The "key" is the name or identifier of the attribute (like <code>service.name</code> or <code>host.id</code>)</p>
</li>
<li><p>The "value" is the specific information for that attribute (like <code>payment-service</code> or <code>server-123</code>)</p>
</li>
</ul>
<p>Together, these key-value pairs identify and describe the specific component that's generating the observability data.</p>
<p>For example, if a payment processing service is sending metrics about transaction times, the resource attributes might include:</p>
<ul>
<li><p><code>service.name: "payment-service"</code></p>
</li>
<li><p><code>service.version: "1.2.3"</code></p>
</li>
<li><p><code>deployment.environment: "production"</code></p>
</li>
</ul>
<p>These attributes tell you exactly which service, which version, and in which environment the data is coming from, providing context for interpreting the metrics, logs, or traces.</p>
<p>Resource attributes are not arbitrary. OpenTelemetry provides a standardized set of attribute names and formats that everyone should follow, similar to having an agreed-upon language for describing services and their properties.</p>
<p>For example, OpenTelemetry specifies that you should use <code>service.name</code> (not <code>app_name</code> or <code>service_id</code>) to identify your service. They've created these standardized naming conventions (called <a target="_blank" href="https://opentelemetry.io/docs/concepts/semantic-conventions/">semantic conventions</a>) so that:</p>
<ol>
<li><p>All tools in the ecosystem can understand the same attributes</p>
</li>
<li><p>Engineers across different companies use consistent terminology</p>
</li>
<li><p>Observability data can be easily shared between different systems</p>
</li>
</ol>
<p>You can still create your own custom attributes when you need something specific (like <code>payment.provider</code> for a payment service), but using the standard attributes whenever possible means your telemetry data will work better with existing tools and be more easily understood by other engineers.</p>
<h2 id="heading-importance-of-otlp-resource-attributes">Importance of OTLP Resource Attributes</h2>
<p>Let’s say engineers want to monitor how long food deliveries take and whether there are delays in specific locations. Without resource attributes, OpenTelemetry might simply collect and report this metric like this:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">delivery_time_seconds:</span> <span class="hljs-number">1800</span>
</code></pre>
<p>This tells us that a delivery took 1,800 seconds, or 30 minutes, but nothing else. That’s useful, but it lacks context. Where did this happen? Which service handled it? If there was a delay in delivery and engineers wanted to investigate the cause, this alone would not help.</p>
<p>With OpenTelemetry’s resource attributes, the metric becomes more meaningful:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">delivery_time_seconds:</span> <span class="hljs-number">1800</span>
<span class="hljs-attr">resource:</span>
  <span class="hljs-attr">service.name:</span> <span class="hljs-string">"delivery-service"</span>
  <span class="hljs-attr">service.instance.id:</span> <span class="hljs-string">"instance-456"</span>
  <span class="hljs-attr">cloud.region:</span> <span class="hljs-string">"ng-west-2"</span>
  <span class="hljs-attr">deployment.environment:</span> <span class="hljs-string">"production"</span>
  <span class="hljs-attr">customer.city:</span> <span class="hljs-string">"Lagos"</span>
  <span class="hljs-attr">restaurant.id:</span> <span class="hljs-string">"rest-789"</span>
</code></pre>
<p>This tells us:</p>
<ul>
<li><p>The data came from the delivery service.</p>
</li>
<li><p>The instance handling the request is "instance-456".</p>
</li>
<li><p>It’s running in the ng-west-2 cloud region.</p>
</li>
<li><p>The environment is Production (not testing or staging), and so on.</p>
</li>
</ul>
<p>Now, engineers can answer more specific questions:</p>
<ul>
<li><p>Are deliveries slower in certain cities? (Filter by <code>customer.city</code>)</p>
</li>
<li><p>Are certain restaurants taking longer to prepare food? (Filter by <code>restaurant.id</code>)</p>
</li>
<li><p>Are delays only happening in a specific cloud region? (Filter by <code>cloud.region</code>)</p>
</li>
<li><p>Are issues only happening in production or also in staging? (Filter by <code>deployment.environment</code>)</p>
</li>
</ul>
<p>When issues arise, resource attributes allow engineers to quickly narrow down the source of problems. Rather than investigating every service, they can filter by specific attributes to focus their efforts.</p>
<h2 id="heading-how-my-project-work-fits-into-all-this"><strong>How My Project Work Fits into All This</strong></h2>
<p>Many engineers use OpenTelemetry for data collection and then send metrics to Prometheus for storage, querying, and analysis.</p>
<p>But Prometheus does not natively support resource attributes in the same way as OpenTelemetry. Instead, it relies on labels to organize metrics. Since Prometheus traditionally has its own labeling system for metrics, integrating OpenTelemetry's resource attributes creates interesting UX challenges.</p>
<p>One key challenge is the <strong>cardinality</strong> explosion. Cardinality refers to the number of unique combinations of label values (or dimensions) that a metric can have. A "cardinality explosion" occurs when you add labels with many possible values. OpenTelemetry often includes many detailed attributes that, if directly converted to Prometheus labels, would create an overwhelming number of time series. This can slow down Prometheus dramatically or even cause it to crash.</p>
<p>The existing solution involves stuffing all resource attributes into a single JSON-encoded Prometheus label. While this prevents the cardinality explosion, it makes querying extremely cumbersome. Users have to use complex join operations and specialized query syntax to filter or aggregate based on these attributes.</p>
<p>This approach is technically functional but creates a poor user experience. My research aims to understand how users mentally model the transition from OpenTelemetry's rich attribute system to Prometheus's more constrained label system.</p>
<p>The research goals are to:</p>
<ol>
<li><p>Understand how engineers currently use OpenTelemetry resource attributes with Prometheus</p>
</li>
<li><p>Identify pain points in the current integration between these systems</p>
</li>
<li><p>Discover user expectations for how resource attributes should be represented in Prometheus</p>
</li>
</ol>
<p>This work is particularly important as more organizations adopt OpenTelemetry as their instrumentation standard while continuing to use Prometheus for metrics monitoring. Creating a seamless experience between these two popular open-source projects will help improve the overall observability ecosystem.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Observability in cloud native applications is clearly an interesting subject and important for building reliable, performant systems. The tools and concepts we've explored – metrics, logs, traces, Prometheus, and OpenTelemetry – form the foundation of modern observability practices.</p>
<p>As I continue my mentorship program, I'll share more insights about how these technologies work together and try to break them down from the perspective of a first-time learner.</p>
<h2 id="heading-additional-resources">Additional Resources</h2>
<p>Learn more about:</p>
<ol>
<li><p><a target="_blank" href="https://opentelemetry.io/docs/">OpenTelemetry</a></p>
</li>
<li><p><a target="_blank" href="https://prometheus.io/docs/introduction/overview/">Prometheus</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/prometheus/prometheus/issues/15909">My UX research project</a></p>
</li>
</ol>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What to Do If You Don't Get into Outreachy: Exploring Other Paths to Open Source ]]>
                </title>
                <description>
                    <![CDATA[ Did you apply to Outreachy and receive a “Your Initial Application Was Not Successful” email? Or maybe you got into the contribution stage but after a rigorous month of contribution, you were not selected as an intern. How disheartening that can be! ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-to-do-if-you-dont-get-into-outreachy/</link>
                <guid isPermaLink="false">676307732bca88a1f50e3b28</guid>
                
                    <category>
                        <![CDATA[ Open Source ]]>
                    </category>
                
                    <category>
                        <![CDATA[ outreachy ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Victoria Nduka ]]>
                </dc:creator>
                <pubDate>Wed, 18 Dec 2024 17:33:39 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1734517208892/dae4a13d-a348-4a8d-831a-8a2f6a1546fa.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Did you apply to Outreachy and receive a “Your Initial Application Was Not Successful” email? Or maybe you got into the contribution stage but after a rigorous month of contribution, you were not selected as an intern. How disheartening that can be!</p>
<p>Rejection stings, especially when you’ve poured your heart and time into an application. <a target="_blank" href="https://www.outreachy.org/">Outreachy</a> is competitive, and not everyone who applies will make it through.</p>
<p>So if you’ve found yourself on the other side of the selection list, don’t despair. The Open Source sky is wide enough for every bird to fly.</p>
<p>If you're truly passionate about <a target="_blank" href="https://www.freecodecamp.org/news/how-to-contribute-to-open-source-projects-as-a-beginner/">contributing to open source</a> and building a successful open source career, this article offers practical advice on how to pursue that path—whether you get into Outreachy or not.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-why-you-were-not-selected">Why You Were Not Selected</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-should-you-reapply">Should You Reapply?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-alternative-routes-to-contributing-to-open-source">Alternative Routes to Contributing to Open Source</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-keep-contributing-to-open-source">Keep Contributing to Open Source</a></p>
</li>
</ul>
<h2 id="heading-why-you-were-not-selected">Why You Were Not Selected</h2>
<p>First, it’s important to understand the context. Outreachy receives hundreds of applications for a limited number of slots. The selection process is rigorous, and even highly qualified applicants may not be chosen due to factors beyond their control.</p>
<p>Note that this is just my perspective, drawn from personal experience and conversations with other past interns. It may not fully reflect the specific reasons why mentors or organizers might not select an applicant. But the factors I’ll discuss are worth considering and can help guide your future applications.</p>
<h3 id="heading-1-project-fit">1. Project fit</h3>
<p>Project fit is about more than just matching technical skills. I often advise applicants to choose projects that they’re passionate about. It’s not enough to only have the technical skills the project requires. Do your interests align with the project’s goals? Have you shown an understanding of its challenges? Are your contributions relevant to what the project actually needs?</p>
<p>Mentors look for candidates who don't just want an internship, but who genuinely care about the project's mission. They seek individuals who can see beyond the code to the broader impact of the open source initiative.</p>
<h3 id="heading-2-contribution-quality"><strong>2. Contribution quality</strong></h3>
<p>Applicants are encouraged to start with smaller tasks and progress to more complex ones. But because contributions are tracked, some applicants may be tempted to focus on the quantity of their contributions rather than the quality.</p>
<p>If you were a mentor for a project focused on improving accessibility, whom would you choose: an applicant who has logged 10 contributions, all consisting of typo fixes in documentation? Or one who has made 2 contributions, including a comprehensive accessibility audit and a detailed report?</p>
<p>One thoughtful, high-quality contribution often outweighs several superficial ones because it demonstrates your potential to add real value to the project.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">“The end goal is to show you have the skills to be a successful intern.” — <a target="_self" href="https://www.outreachy.org/docs/applicant/#make-contributions">Outreachy Applicant Guide</a></div>
</div>

<h3 id="heading-3-overall-application-narrative">3. Overall application narrative</h3>
<p>Your application is a story, not just a list of achievements.</p>
<ul>
<li><p>How compellingly do you explain your motivations?</p>
</li>
<li><p>Do you demonstrate a long-term commitment to open source?</p>
</li>
<li><p>Can you articulate your learning goals?</p>
</li>
<li><p>Do you show potential for growth?</p>
</li>
<li><p>How do you connect your past experiences to the project?</p>
</li>
</ul>
<p>Mentors read hundreds of applications. Those that tell a coherent, passionate story are more likely to stand out.</p>
<h3 id="heading-4-the-sheer-volume-of-exceptional-candidates">4. The sheer volume of exceptional candidates</h3>
<p>Sometimes, there are just so many exceptional applicants and not enough internship slots. It’s a tough decision for the mentors.</p>
<p>In this case, whether you’re selected or not is a matter of mathematical probability. So, if you are not selected, it doesn't mean you're not skilled or deserving enough. Understanding this can help you approach rejection with a growth mindset rather than self-doubt.</p>
<h2 id="heading-should-you-reapply">Should You Reapply?</h2>
<blockquote>
<p>"If at first you don't succeed, try, try, try again" — William Edward Hickson</p>
</blockquote>
<p>Many successful Outreachy interns were not selected on their first try. I’m one of them. If you’re eligible and still passionate about the program, by all means, reapply.</p>
<p>Here’s how to strengthen your next application:</p>
<p><strong>Start Early:</strong> Start exploring <a target="_blank" href="https://www.outreachy.org/past-projects/">past Outreachy projects</a> and building connections with mentors well before the application phase. Some communities (for example, Oppia, Wikimedia, Fedora, and Bioconductor) are regular Outreachy participants and are likely to participate in the next internship round.</p>
<p><strong>Expand Your Skills:</strong> Use the time between application cycles to deepen your knowledge in areas that align with Outreachy projects, whether it’s coding, documentation, or community management.</p>
<p>A friend of mine, Karimot Isiaka, started learning about accessibility after discovering that the project I worked on during my Outreachy internship was focused on this area. Today, she’s one of the December 2024 interns working on a project centered around accessibility. Had she not taken the initiative to expand her skills and dive into accessibility, she likely wouldn’t have been prepared for this opportunity. Be like Karimot.</p>
<p><strong>Build Relationships:</strong> Join project communities, participate in discussions, and contribute consistently. Mentors often notice applicants who’ve been active contributors.</p>
<h2 id="heading-alternative-routes-to-contributing-to-open-source">Alternative Routes to Contributing to Open Source</h2>
<p>Outreachy has played a significant role in introducing people from underrepresented groups to open source, providing mentorship, and offering a pathway to impactful contributions. But it’s just one route among many. Open source is a vast ecosystem, filled with opportunities to learn, grow, and even build a career.</p>
<p>Here are other ways to make an impact in open source:</p>
<h3 id="heading-1-independent-contributions">1. Independent Contributions</h3>
<p>One of the most direct ways to get involved in open source is by contributing independently to projects that align with your interests. You can:</p>
<ul>
<li><p>Go on <a target="_blank" href="https://github.com/">GitHub</a> or <a target="_blank" href="https://about.gitlab.com/">Gitlab</a> and look for issues tagged as “good first issue” or “help wanted.”</p>
</li>
<li><p>Contribute to documentation, test cases, or bug fixes.</p>
</li>
<li><p>Participate in <a target="_blank" href="https://hacktoberfest.com/">Hacktoberfest</a>, an annual celebration that encourages people to contribute to open source projects while earning rewards and gaining experience.</p>
</li>
</ul>
<p>Independent contributions allow you to build a portfolio and demonstrate your skills in a practical context, which can be just as impactful as participating in a formal program. <a target="_blank" href="https://www.freecodecamp.org/news/how-to-contribute-to-open-source-projects-as-a-beginner/">Here’s a helpful article</a> by Fanny Nyayic about how to get started as a beginner open source contributor.</p>
<h3 id="heading-2-other-open-source-internship-programs">2. Other Open Source Internship Programs</h3>
<p>If you’re bent on the internship route, there are other structured open source programs similar to Outreachy. Some of them include:</p>
<ol>
<li><p><a target="_blank" href="https://summerofcode.withgoogle.com/"><strong>Google Summer of Code (GSoC)</strong></a><strong>:</strong> GSoC is a global program that introduces students and new open source contributors to real-world software development. Participants work on a project with an open source organization, receiving mentorship, a stipend, and experience contributing to the open source community.</p>
</li>
<li><p><a target="_blank" href="https://developers.google.com/season-of-docs/"><strong>Google Season of Docs</strong></a><strong>:</strong> This program connects technical writers with open source organizations to improve their documentation. Writers work on tasks such as user guides, tutorials, or API documentation, enhancing the usability and accessibility of open source projects.</p>
</li>
<li><p><a target="_blank" href="https://docs.linuxfoundation.org/lfx/mentorship"><strong>LFX Mentorship</strong></a>: Offered by the Linux Foundation, LFX Mentorship provides hands-on experience working with Linux Foundation projects. It supports contributors in learning about open source technologies, networking, and growing their technical expertise through paid mentorship opportunities.</p>
</li>
<li><p><a target="_blank" href="https://fellowship.mlh.io/"><strong>MLH Fellowship</strong></a>: The Major League Hacking (MLH) Fellowship is a remote program where participants build and contribute to open source projects in areas like software development, systems design, or data science, while collaborating with peers and receiving mentorship from industry experts.</p>
</li>
<li><p><a target="_blank" href="https://mentorship.kde.org/sok/"><strong>Season of KDE</strong></a>: This mentorship program is run by the KDE Community, an open source organization focused on free software projects. Participants work on KDE initiatives such as software development, design, documentation, or community-building activities.</p>
</li>
<li><p><a target="_blank" href="https://github.com/asyncapi/community/blob/master/mentorship/asyncapi-mentorship/README.md"><strong>AsyncAPI Mentorship Program</strong></a>: The AsyncAPI Mentorship Program offers contributors opportunities to work on improving AsyncAPI tools and documentation. Participants collaborate on projects like software libraries, community initiatives, design, or technical documentation while learning open source best practices.</p>
</li>
<li><p><a target="_blank" href="https://www.summerofbitcoin.org/"><strong>Summer of Bitcoin</strong></a>: This program introduces university students to Bitcoin and open source development. Participants work with experienced mentors on projects that contribute to the Bitcoin ecosystem, focusing on coding, documentation, or research initiatives.</p>
</li>
</ol>
<h3 id="heading-3-paid-opportunities-in-open-source">3. Paid Opportunities in Open Source</h3>
<p>Open source contributions can open doors to paid opportunities. Here are some ways to monetize your efforts:</p>
<ul>
<li><p><strong>Sponsorship Platforms:</strong> Programs like <a target="_blank" href="https://docs.github.com/en/sponsors/getting-started-with-github-sponsors/about-github-sponsors">GitHub Sponsors</a> and <a target="_blank" href="https://opencollective.com/">OpenCollective</a> enable contributors and maintainers to receive financial backing for their work.</p>
</li>
<li><p><strong>Google Open Source Peer Bonus Program:</strong> The <a target="_blank" href="https://opensource.google/documentation/reference/growing/peer-bonus/">Google Open Source Peer Bonus</a> program recognizes and rewards contributors for their impact on open source projects.</p>
</li>
<li><p><strong>Open Source Job Hubs:</strong> Platforms like <a target="_blank" href="https://opensourcejobhub.com/">Open Source JobHub</a>, <a target="_blank" href="https://www.ossjobs.dev/">OSSJobs</a>, and <a target="_blank" href="https://opensourcedesign.net/jobs/">Open Source Design</a> curate paid opportunities within the open source ecosystem and connect contributors with roles that align with their skills.</p>
</li>
<li><p><strong>Bounty Programs:</strong> Many open source projects offer bounty programs where contributors can earn money for completing specific tasks, fixing bugs, or adding features. The <a target="_blank" href="https://github.com/orgs/asyncapi/projects/36/?pane=info">AsyncAPI Bounty Program</a> is an example. Platforms like <a target="_blank" href="https://bountysource.tumblr.com/">Bountysource</a>, <a target="_blank" href="https://oss.issuehunt.io/issues">IssueHunt</a>, and <a target="_blank" href="https://www.gitcoin.co/blog/everything-you-need-to-know-about-gitcoin">Gitcoin</a> also connect contributors with paid tasks in open source</p>
</li>
<li><p><strong>Full-Time Roles:</strong> Many tech companies hire developers to focus exclusively on maintaining or enhancing open source projects they rely on or sponsor.</p>
</li>
</ul>
<h3 id="heading-4-non-code-contributions">4. Non-Code Contributions</h3>
<p>Non-code contributions are an underrated yet valuable way to get involved. If you’re a non-technical person, you can contribute to open source in any of the following ways:</p>
<ul>
<li><p><strong>Design:</strong> Creating UI/UX designs or social media graphics for open source projects.</p>
</li>
<li><p><strong>Community management:</strong> Moderating forums, organizing meetups, or managing social media. Amarachi Johnson has a <a target="_blank" href="https://www.freecodecamp.org/news/contributing-to-open-source-as-a-community-manager/">helpful article here</a> on contributing to open source projects as a community manager.</p>
</li>
<li><p><strong>Advocacy:</strong> Writing articles, giving talks, or creating tutorials about the project. Christine Belzie has a <a target="_blank" href="https://www.freecodecamp.org/news/improve-tech-writing-skills-by-contributing-to-open-source/">helpful article here</a> on how technical writers can contribute to OSS.</p>
</li>
</ul>
<h3 id="heading-5-personal-projects">5. Personal Projects</h3>
<p>If you’re passionate about solving a particular problem, consider <a target="_blank" href="https://opensource.guide/starting-a-project/">starting your own open source project</a>. That side project you’re working on? You could make it open source. Invite other people to contribute. Build an open source community around this project you care about. Who knows? You could build the next freeCodeCamp.</p>
<h2 id="heading-keep-contributing-to-open-source">Keep Contributing to Open Source</h2>
<p>Rejection hurts, but it’s not the end of the road. Many accomplished contributors faced rejection at some point. Some didn’t make it into Outreachy or GSoC but went on to become project maintainers, speakers, or leaders in the open source space.</p>
<p>If you haven’t gotten into Outreachy, take a moment to regroup and then try again. And while you’re at it, explore other opportunities. Don’t give up. Rejection is just a step in the journey. Keep pushing forward, and you'll find your place in the open source world.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Perform a Web Accessibility Audit ]]>
                </title>
                <description>
                    <![CDATA[ Over one billion people worldwide live with some form of disability. That is about 16% of the global population. Now, imagine how many of these individuals might be trying to access your website. Would they navigate easily through your site, or would... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-perform-a-web-accessibility-audit/</link>
                <guid isPermaLink="false">6712fdc4ad96e38e0b7422ae</guid>
                
                    <category>
                        <![CDATA[ Accessibility ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Victoria Nduka ]]>
                </dc:creator>
                <pubDate>Sat, 19 Oct 2024 00:31:00 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1729112018927/8f769e94-9c4b-4651-a0f7-0c99d529c9c3.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Over <a target="_blank" href="https://www.who.int/health-topics/disability#tab=tab_1">one billion people worldwide live with some form of disability</a>. That is about 16% of the global population. Now, imagine how many of these individuals might be trying to access your website. Would they navigate easily through your site, or would they encounter barriers that might drive them away?</p>
<p>A web accessibility audit helps you identify and fix issues that prevent users from interacting with your website effectively. In this guide, you’ll learn how to perform a web accessibility audit and improve your site’s usability.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-what-is-web-accessibility">What is Web Accessibility?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-what-is-a-web-accessibility-audit">What is a Web Accessibility Audit?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-what-to-do-before-the-audit">What to Do Before the Audit</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-audit-your-website">How to Audit Your Website</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-what-to-do-after-the-audit">What to Do After the Audit</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-accessibility-is-an-ongoing-process">Accessibility is an Ongoing Process</a></p>
</li>
</ul>
<h2 id="heading-what-is-web-accessibility">What is Web Accessibility?</h2>
<p>Web accessibility means that websites and web applications are designed and developed so that people with disabilities can use them. This includes individuals with visual, auditory, motor, cognitive, and neurological disabilities. An accessible website provides a better user experience for all users, regardless of their abilities.</p>
<h2 id="heading-what-is-a-web-accessibility-audit">What is a Web Accessibility Audit?</h2>
<p>A web accessibility audit is the process of evaluating a website or web application to determine how easily people with disabilities can use it. This evaluation is done against established standards set by the World Wide Web Consortium (W3C). These standards, known as the Web Content Accessibility Guidelines (WCAG), provide the criteria for evaluating a website's accessibility.</p>
<p>An accessibility audit helps you identify barriers that prevent people with disabilities from fully using or interacting with your site. By the end of the audit, you’ll have a comprehensive report that details the issues found and actionable steps to improve your site's accessibility.</p>
<h2 id="heading-what-to-do-before-the-audit">What to Do Before the Audit</h2>
<p>Before diving into the actual audit, there are a few preparatory steps you need to take to set the foundation for a thorough and organized accessibility review. Here's what you need to do:</p>
<h3 id="heading-1-familiarize-yourself-with-accessibility-guidelines">1. Familiarize Yourself with Accessibility Guidelines</h3>
<p>The first step in any accessibility audit is understanding the rules you're auditing against. Familiarizing yourself with these guidelines will help you understand what to look for and what kind of changes might be necessary to improve your site's accessibility.</p>
<p>The <a target="_blank" href="https://www.w3.org/TR/WCAG22/">Web Content Accessibility Guidelines (WCAG)</a> provide detailed recommendations on how to make websites more accessible to people with disabilities. It is versioned, with the WCAG 2.2 being the most updated version. The guidelines are divided into three levels of conformance:</p>
<ul>
<li><p><strong>Level A</strong>: The minimum requirements for accessibility.</p>
</li>
<li><p><strong>Level AA</strong>: Addresses more common barriers for disabled users.</p>
</li>
<li><p><strong>Level AAA</strong>: The highest and most rigorous level of accessibility.</p>
</li>
</ul>
<p>For a start, you should aim for Level AA compliance.</p>
<h3 id="heading-2-define-the-goal-of-your-audit">2. Define the Goal of Your Audit</h3>
<p>Why are you doing the audit in the first place, and what do you hope to achieve? You goal could be to:</p>
<ul>
<li><p>Know where you are in terms of accessibility.</p>
</li>
<li><p>Generate a <a target="_blank" href="https://en.wikipedia.org/wiki/Voluntary_Product_Accessibility_Template">voluntary product accessibility template (VPAT)</a>.</p>
</li>
<li><p>Identify what issues need to be remediated.</p>
</li>
</ul>
<p>Your goal will determine what approach you take to perform the audit.</p>
<h3 id="heading-3-define-the-scope-of-your-audit">3. Define the Scope of Your Audit</h3>
<p>Next, decide what parts of your website you’ll be auditing. While it's ideal to audit the entire site, this might not always be feasible due to time or resource constraints. In that case, focus on key pages and features that are critical for user interaction.</p>
<h3 id="heading-4-gather-your-tools">4. Gather Your Tools</h3>
<p>To conduct a thorough web accessibility audit, you'll need a combination of automated and manual testing tools.</p>
<p>For automated testing, some popular tools include:</p>
<ul>
<li><p>WAVE</p>
</li>
<li><p>Axe DevTools</p>
</li>
<li><p>Lighthouse</p>
</li>
<li><p>Color contrast analyzers</p>
</li>
</ul>
<p>For manual testing, you'll need:</p>
<ul>
<li><p>A keyboard (to test keyboard navigation).</p>
</li>
<li><p>Screen readers like JAWS, NVDA, or VoiceOver.</p>
</li>
<li><p>Different browsers to check compatibility.</p>
</li>
<li><p>Ideally, a group of test participants, especially individuals with disabilities, to provide real-world feedback.</p>
</li>
</ul>
<h3 id="heading-5-create-an-accessibility-checklist">5. <strong>Create an Accessibility Checklist</strong></h3>
<p>Based on the WCAG guidelines, create a checklist of specific items to verify during your audit. This checklist will serve as your roadmap, ensuring that you don’t miss any critical components.</p>
<p>Having a checklist based on WCAG standards ensures consistency in your audit and gives you clear, actionable steps to follow. It also allows you to track your progress and document issues for later review.</p>
<h2 id="heading-how-to-audit-your-website">How to Audit Your Website</h2>
<p>Now it’s time to conduct the actual audit. A good approach is to start with a quick test using an automated tool, followed by a thorough manual review to catch issues that automation might miss.</p>
<h3 id="heading-step-1-run-an-automated-scan">Step 1: Run an Automated Scan</h3>
<p>For the automated scan, you can use WAVE, axe DevTools, Lighthouse, or a combination of these for a more comprehensive assessment. Use multiple tools to catch a broader range of accessibility issues and provide a more well-rounded analysis.</p>
<h4 id="heading-using-wave">Using WAVE</h4>
<ol>
<li><p>Go to <a target="_blank" href="http://wave.webaim.org">wave.webaim.org</a>.</p>
</li>
<li><p>Enter the URL of the website you want to check.</p>
</li>
</ol>
<p>Alternatively,</p>
<ol>
<li><p>Install the <a target="_blank" href="https://wave.webaim.org/extension/">WAVE browser extension</a>.</p>
</li>
<li><p>Go to the page you want to audit.</p>
</li>
<li><p>Right-click on the page to open the context menu.</p>
</li>
<li><p>Click “WAVE this page” to scan your page.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729181600332/64b21e6a-42a9-458f-a3a4-f85a414be7cc.png" alt="Screenshot of right-click menu showing 'WAVE this page' option" class="image--center mx-auto" width="553" height="370" loading="lazy"></p>
</li>
<li><p>WAVE will generate a report showing:</p>
<ul>
<li><p>Errors (red icons)</p>
</li>
<li><p>Alerts (yellow icons)</p>
</li>
<li><p>Features (green icons)</p>
</li>
<li><p>Structural elements (blue icons)</p>
</li>
<li><p>HTML5 and ARIA elements (purple icons)</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729181301746/5e667a48-8ee7-4157-80ab-7334194cf3bd.png" alt="WAVE accessibility evaluation tool results summary showing 2 errors, 0 contrast errors, 48 alerts, 26 features, 58 structural elements, and 50 ARIA elements" class="image--center mx-auto" width="565" height="846" loading="lazy"></p>
</li>
</ul>
</li>
<li><p>Click on each icon to get more information about the issue or feature.</p>
</li>
</ol>
<h4 id="heading-using-axe-devtools">Using axe DevTools</h4>
<ol>
<li><p>Install the <a target="_blank" href="https://www.deque.com/get-started-axe-devtools-browser-extension/?_gl=1*30317n*_up*MQ..*_ga*ODc3NjIyNjgyLjE3MjkxODIyNTg.*_ga_C9H6VN9QY1*MTcyOTE4MjI1Ny4xLjEuMTcyOTE4MjMxMS4wLjAuMA..">axe DevTools extension</a> for your browser.</p>
</li>
<li><p>Navigate to the web page you want to test.</p>
</li>
<li><p>Open your browser DevTools (F12 or Cmd+Option+I)</p>
</li>
<li><p>Go to the "axe DevTools" tab.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729182512532/f9ea794b-9806-428e-93fe-2af843f4bb2e.png" alt="Screenshot of axe DevTools interface showing options for Scan User Flow, Full Page Scan, and Partial Page Scan" class="image--center mx-auto" width="805" height="662" loading="lazy"></p>
</li>
<li><p>Click "Full Page Scan" to start the accessibility check.</p>
</li>
<li><p>Review the results. They are categorized by severity (Critical, Serious, Moderate, Minor).</p>
</li>
<li><p>Each issue includes details on:</p>
<ul>
<li><p>What the problem is</p>
</li>
<li><p>Why it matters</p>
</li>
<li><p>How to fix it</p>
</li>
<li><p>Which WCAG success criteria it violates</p>
</li>
</ul>
</li>
</ol>
<h4 id="heading-using-lighthouse">Using Lighthouse</h4>
<ol>
<li><p>Open your browser DevTools (F12 or Cmd+Option+I).</p>
</li>
<li><p>Go to the "Lighthouse" tab.</p>
</li>
<li><p>Select "Accessibility" under "Categories" (you can select others too).</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1729182964952/083f7f52-621c-492a-a821-0ff7ae71d45e.png" alt="Lighthouse settings panel, showing options for generating a report, choosing mode and device, and selecting categories to analyze" class="image--center mx-auto" width="800" height="662" loading="lazy"></p>
</li>
<li><p>Click "Analyze page load".</p>
</li>
<li><p>Review the accessibility score and specific issues found.</p>
</li>
<li><p>Each issue links to more detailed explanations and how to fix them.</p>
</li>
</ol>
<h3 id="heading-step-2-conduct-a-manual-test">Step 2: Conduct a Manual Test</h3>
<p>Manual testing complements automated tools by checking issues that can’t be automatically detected. It involves simulating how users with disabilities would interact with your website. Here are some key areas to focus on during manual testing:</p>
<h4 id="heading-1-keyboard-navigation">1. Keyboard Navigation</h4>
<p>Many users rely on a keyboard to navigate the web, either due to mobility impairments or because they use assistive technologies like screen readers. To test this:</p>
<ul>
<li><p>Ensure all interactive elements (links, buttons, forms) can be accessed using the Tab key.</p>
</li>
<li><p>Use the Enter or Spacebar to activate elements.</p>
</li>
<li><p>Check for keyboard traps (places where a user can get stuck and can’t navigate out).</p>
</li>
</ul>
<h4 id="heading-2-screen-reader-compatibility">2. Screen Reader Compatibility</h4>
<p>Screen readers convert on-screen content into speech or Braille. To test screen reader accessibility:</p>
<ul>
<li><p>Install a screen reader like NVDA (for Windows) or VoiceOver (for macOS).</p>
</li>
<li><p>Navigate through the website using only the screen reader. Check whether the content is read in a logical order and all elements are properly labeled.</p>
</li>
<li><p>Pay attention to issues like missing or incorrect alt text for images, improper headings structure, and unlabeled buttons.</p>
</li>
</ul>
<h4 id="heading-3-text-alternatives">3. Text Alternatives</h4>
<p>Check that non-text content such as images, videos, and icons have appropriate text alternatives. For example:</p>
<ul>
<li><p>Images should have descriptive alt text that conveys their purpose or function.</p>
</li>
<li><p>Videos should include captions and transcripts to ensure accessibility for users with hearing impairments.</p>
</li>
</ul>
<h3 id="heading-step-3-review-semantic-html-and-aria-usage">Step 3: Review Semantic HTML and ARIA Usage</h3>
<p>Semantic elements like <code>&lt;header&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;article&gt;</code>, and <code>&lt;footer&gt;</code> help screen readers understand the structure of a page. Accessible Rich Internet Applications (ARIA) attributes can be used to enhance accessibility for dynamic content. However, it’s important to use ARIA sparingly and only when necessary, as incorrect usage can lead to more problems.</p>
<p>Here are some best practices:</p>
<ul>
<li><p>Use semantic HTML wherever possible before resorting to ARIA.</p>
</li>
<li><p>Ensure that ARIA roles, states, and properties are correctly implemented. Misusing ARIA can confuse users and screen readers.</p>
</li>
</ul>
<h3 id="heading-step-4-document-issues">Step 4: Document Issues</h3>
<p>Once you’ve completed both automated and manual testing, it’s time to document the accessibility issues you’ve discovered. Categorize the issues by their severity:</p>
<ul>
<li><p><strong>Critical</strong>: Issues that block users from accessing essential features, such as non-functional navigation or forms.</p>
</li>
<li><p><strong>Moderate</strong>: Issues that degrade the user experience, like poor color contrast.</p>
</li>
<li><p><strong>Minor</strong>: Minor violations that don’t significantly impact the user experience but should still be addressed, such as misused ARIA attributes.</p>
</li>
</ul>
<p>Use a spreadsheet or project management tool like GitHub Issues to document the issues. You could also use the <a target="_blank" href="https://www.w3.org/WAI/eval/report-tool">WCAG-EM report tool</a> developed by the W3C Web Accessibility Initiative (WAI).</p>
<p>In your report, be sure to include:</p>
<ul>
<li><p>The page where the issue occurs.</p>
</li>
<li><p>A description of the problem.</p>
</li>
<li><p>WCAG success criteria it violates.</p>
</li>
<li><p>Suggestions for how to fix the issue.</p>
</li>
</ul>
<h2 id="heading-what-to-do-after-the-audit">What to Do After the Audit</h2>
<p>You’re done with your audit. You now have a detailed accessibility report with issues that you’ve identified. What do you do next?</p>
<h3 id="heading-1-implement-and-test-fixes">1. Implement and Test Fixes</h3>
<p>The next step is to work with your development team to implement the fixes. Ideally, you should aim to resolve all identified issues. However, if you're working under time constraints, you may want to prioritize issues that are easier to fix but still have a significant impact on accessibility.</p>
<p>After making these changes, rerun your accessibility audits—both automated and manual—to verify that the issues have been successfully resolved.</p>
<h3 id="heading-2-establish-accessibility-guidelines">2. Establish Accessibility Guidelines</h3>
<p>Your accessibility efforts would go to waste if new developers on your team introduced accessibility issues to your website. To prevent this, create a comprehensive document outlining your accessibility standards. This document should detail the best practices your team will follow moving forward. This way, all future updates or changes maintain the accessibility improvements you've made.</p>
<h2 id="heading-accessibility-is-an-ongoing-process">Accessibility is an Ongoing Process</h2>
<p>Performing a web accessibility audit is an important step toward making your website more inclusive. But does that mean your job is done, and you can sit back and relax? Not quite. Accessibility isn't a one-time task. It's an ongoing process.</p>
<p>As you add new features or content, you'll need to continuously test and improve your site to maintain accessibility standards. This doesn't just benefit users with disabilities, it enhances the overall user experience for everyone.</p>
<p>Consistently prioritizing accessibility leads to a more user-friendly, functional, and inclusive website.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
