<?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[ Collaboration - 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[ Collaboration - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 22:20:29 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/collaboration/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ System Architecture Documentation Best Practices and Tools ]]>
                </title>
                <description>
                    <![CDATA[ Imagine being asked to give UX feedback on a system workflow document and realizing you can’t understand a word of it. That’s exactly what happened to me. As an IT support officer, I can put myself in the perspective of a user and identify friction p... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/system-architecture-documentation-best-practices-and-tools/</link>
                <guid isPermaLink="false">691484910576aea108fc08d8</guid>
                
                    <category>
                        <![CDATA[ documentation ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software architecture ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ifeoma Udu ]]>
                </dc:creator>
                <pubDate>Wed, 12 Nov 2025 12:58:57 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1762950321590/b67b93ef-de20-430b-a160-13631259c1d5.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Imagine being asked to give UX feedback on a system workflow document and realizing you can’t understand a word of it. That’s exactly what happened to me.</p>
<p>As an IT support officer, I can put myself in the perspective of a user and identify friction points, but this document had no visuals, no simplified explanations, just walls of backend jargon: <em>service mesh, container orchestration, async queues, REST APIs… you name it.</em></p>
<p>I realized quickly: if someone like me struggles to understand this, so will PMs, frontend devs, new hires, and even other IT staff.</p>
<p>Here’s a practical guide for creating system architecture documentation that anyone on your team can read and use:</p>
<ul>
<li><p><a class="post-section-overview" href="#heading-step-1-show-the-system-from-different-angles">Step 1: Show the System from Different Angles</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-step-2-make-diagrams-the-star">Step 2: Make Diagrams the Star</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-step-3-translate-tech-into-user-relevant-outcomes">Step 3: Translate Tech Into User-Relevant Outcomes</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-step-4-make-communication-clear">Step 4: Make Communication Clear</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-step-5-keep-it-simple-and-consistent">Step 5: Keep it Simple and Consistent</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-system-architecture-documentation-tools-for-teams">System Architecture Documentation Tools for Teams</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></p>
</li>
</ul>
<h2 id="heading-step-1-show-the-system-from-different-angles"><strong>Step 1: Show the System from Different Angles</strong></h2>
<p>A good architecture doc isn’t just a list of tech terms. Think about who is reading it:</p>
<p><strong>A. Conceptual View (PM/UX/business folks)</strong></p>
<ul>
<li><p>What the system does for the user.</p>
</li>
<li><p>Example: <em>“User Authentication System,” “Checkout Service”</em></p>
</li>
<li><p>Focus on user value and business goals.</p>
</li>
</ul>
<p><strong>B. Component View (frontend developers/IT staff)</strong></p>
<ul>
<li><p>How the parts interact.</p>
</li>
<li><p>Example: <em>“Web App calls API Gateway → Microservice → Database”</em></p>
</li>
<li><p>Focus on data flow and system boundaries.</p>
</li>
</ul>
<p><strong>C.   Operational View (backend/DevOps)</strong></p>
<ul>
<li><p>Where the system runs and how.</p>
</li>
<li><p>Example: <em>servers, databases, cloud setup, scaling.</em></p>
</li>
<li><p>Focus on infrastructure and deployment.</p>
</li>
</ul>
<p>This way, everyone can find what’s relevant to their role without getting lost in technical weeds.</p>
<h2 id="heading-step-2-make-diagrams-the-star"><strong>Step 2: Make Diagrams the Star</strong></h2>
<p>Words alone don’t cut it. Diagrams help people visualize the system, especially if they’re not experts.</p>
<p><strong>Types of Diagrams to Include</strong></p>
<ul>
<li><p><strong>System Context Diagram:</strong> Shows the system and its external dependencies. UX/PM/IT staff can see how it touches users and other systems.</p>
</li>
<li><p><strong>Container Diagram:</strong> Shows main boundaries like <em>“Web App,” “Auth API,” “Database.”</em> Frontend and backend teams benefit.</p>
</li>
<li><p><strong>UML/Component Diagram:</strong> Shows internal structure or interactions. Mostly backend focus, but helps everyone understand flow.</p>
</li>
</ul>
<p><strong>Tip:</strong> Even a simple flowchart drawn in PowerPoint, Figma, or by hand is better than none. Clarity matters more than perfection.</p>
<p>Diagrams help:</p>
<ul>
<li><p>UX sees user impact.</p>
</li>
<li><p>Frontend knows which services to hook up.</p>
</li>
<li><p>Backend sees infrastructure and interactions.</p>
</li>
<li><p>Everyone shares the same mental picture.</p>
</li>
</ul>
<h3 id="heading-example-1-system-context-diagram">Example 1: System Context Diagram</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762421963002/ab9f11d4-e30f-4e4a-9510-55b4b3f5e8ad.jpeg" alt="Flowchart illustrating an end user visiting a web app, which processes payments via Stripe API and sends emails through SendGrid using webhooks." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>This diagram illustrates who uses the system (a person on the web) and which external services it depends on, like Stripe for payments and SendGrid for emails. It doesn't show the internal workings of the system, just what it connects to.</p>
<h3 id="heading-example-2-container-diagram">Example 2: Container Diagram</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762612172310/1ef1b7e9-0441-4d34-b136-2283ec0b4c56.jpeg" alt="Flowchart depicting a web application architecture. The sequence starts with a web browser, leading to a frontend app, then to an API gateway. The gateway splits into two paths: one leads to an Auth Service connected to a User Database, and the other to an Order Service connected to an Orders Database." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>This diagram illustrates the main components of the system: the Web App, which is the user interface; the Auth API, responsible for handling login and security; and the User Database, where user profiles are stored. The arrows indicate how these components interact with each other.</p>
<p><strong>Practical Tip: Tools to Create Clear Architecture Docs.</strong></p>
<h2 id="heading-step-3-translate-tech-into-user-relevant-outcomes"><strong>Step 3: Translate Tech Into User-Relevant Outcomes</strong></h2>
<p>System architecture goes beyond databases and queues, focusing on making the product fast, reliable, and secure for users. Link technical requirements to outcomes everyone can understand:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Requirement</strong></td><td>❌ <strong>Technical Jargon</strong></td><td>✅ <strong>User Outcome</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Scalability</td><td>Kubernetes for container orchestration</td><td>Can handle 10x daily users without slowdowns.</td></tr>
<tr>
<td>Performance</td><td>CDN + caching</td><td>Pages load in under 500ms, no “loading” screens.</td></tr>
<tr>
<td>Security</td><td>TLS 1.3 for data transfer</td><td>User data is safe; only authorized systems access PII(Personally Identifiable Information)<strong>.</strong></td></tr>
</tbody>
</table>
</div><p>Even a person with basic UX awareness can see why tech decisions matter.</p>
<h2 id="heading-step-4-make-communication-clear"><strong>Step 4: Make Communication Clear</strong></h2>
<p>One major source of confusion is how different parts of the system talk to each other. Spell it out:</p>
<p>a) Frontend ↔ Backend: Clearly explain how your frontend connects to the backend.</p>
<p>Example: <em>“The website sends login requests to the Auth API.”</em></p>
<p>b) Backend ↔ Backend: Explain whether services communicate with each other instantly (synchronous) or through background tasks like message queues (asynchronous). This helps the team understand why some actions feel instant to users, while others take time.</p>
<p>Even non-backend readers can follow the flow and understand how it impacts the product.</p>
<h2 id="heading-step-5-keep-it-simple-and-consistent"><strong>Step 5: Keep it Simple and Consistent</strong></h2>
<ul>
<li><p>Use headings, bullet points, and a table of contents. Don’t write a novel.</p>
</li>
<li><p>Keep names consistent: <em>“User Service”</em> in diagrams should match text labels.</p>
</li>
<li><p>Explain the “why” behind major decisions:</p>
</li>
</ul>
<p><em>“We chose a NoSQL DB for User Profiles because it requires fast read/write for non-relational data.”</em></p>
<p>Consistency and simplicity make the doc useful to everyone, not just backend experts.</p>
<h2 id="heading-system-architecture-documentation-tools-for-teams"><strong>System Architecture Documentation Tools for Teams</strong></h2>
<p>Great architecture documentation lives where your team already works and uses tools that are easy to update, share, and understand. Below are the common types of tools teams use, grouped by purpose.</p>
<h3 id="heading-documentation-platforms-where-you-write-the-full-doc">Documentation Platforms (Where You Write the Full Doc)</h3>
<p>You can use these tools to combine text, diagrams, and structure a document.</p>
<p><strong>Google Docs</strong><br>Simple, familiar, and collaborative. Supports real-time comments, edit history, and easy sharing. Perfect if your team already uses Gmail or Drive. Just paste diagrams as images.</p>
<p><strong>Confluence</strong><br>Common in larger companies. Integrates with Jira, supports page templates, and lets you embed diagrams. Good for structured knowledge bases.</p>
<p><strong>Notion</strong><br>Flexible workspace for small teams. Mix docs, tasks, and diagrams in one place. Great if your team uses Notion for other work.</p>
<p><strong>GitHub/GitLab Wikis (with Markdown)</strong><br>Ideal for engineering-heavy teams. Docs live next to your code, and you can include diagrams using simple code (like Mermaid). Changes are tracked like code.</p>
<blockquote>
<p><strong>Start with Google Docs</strong> if you’re unsure. A living doc people actually read is better than a “perfect” one no one opens.</p>
</blockquote>
<h3 id="heading-diagramming-tools-where-you-create-visuals"><strong>Diagramming Tools (Where You Create Visuals)</strong></h3>
<p>These help you draw the architecture diagrams you’ll add to your documentation platform.</p>
<p><strong>Draw.io</strong><br>Free, browser-based, and drag-and-drop simple. No sign-up needed. Exports clean PNG/SVG files you can paste into Docs or Confluence. Great for C4-style diagrams (System Context, Container, and so on).</p>
<p><strong>Figma</strong><br>If your team already uses Figma for design, you can create architecture diagrams using basic shapes and arrows. Real-time commenting makes feedback easy. Just export as PNG for Docs.</p>
<p><strong>Mermaid (Diagrams as Code)</strong><br>Write simple text like <code>User --&gt; Web App</code>, and it becomes a diagram. Works in GitHub, GitLab, and tools like Obsidian. Use the <a target="_blank" href="https://mermaid.live/">Mermaid Live Editor</a> to design, then download and paste into Google Docs.</p>
<h4 id="heading-a-key-insight-from-practicing-architects"><strong>A Key Insight from Practicing Architects.</strong></h4>
<p>Avoid tools that <strong>only produce static images</strong> (like PowerPoint, Canva, or basic whiteboards) for anything beyond quick sketches. If the same service appears in three diagrams and you rename it, you’ll have to update all three manually, leading to outdated and inconsistent docs.</p>
<h3 id="heading-how-they-work-together"><strong>How They Work Together</strong></h3>
<ol>
<li><p>Write your doc in Google Docs (or your team’s existing platform).</p>
</li>
<li><p>Create diagrams in Draw.io or Figma (or try Mermaid if you’re curious).</p>
</li>
<li><p>Paste the diagram into your doc, add alt text, and explain what it shows in plain language.</p>
</li>
</ol>
<p>This combo gives you accessibility, collaboration, and maintainability without overwhelming you or your team.</p>
<h2 id="heading-conclusion"><strong>Conclusion</strong></h2>
<p>You don’t need to be a senior engineer to write great architecture docs. You just need clarity, empathy, and the willingness to explain “why.”</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Structure Your README File – README Template Example ]]>
                </title>
                <description>
                    <![CDATA[ As a developer who aspires to be a founder, building your first startup can be filled with excitement and ideas. The worst thing that could happen to you is jumping straight into the coding part. I was in this situation and the last thing on my mind ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-structure-your-readme-file/</link>
                <guid isPermaLink="false">690e02f392fcbf371b6e1b9d</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ startup ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Casmir Onyekani ]]>
                </dc:creator>
                <pubDate>Fri, 07 Nov 2025 14:32:19 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1762523233143/4555ff83-b390-4cb2-b6de-acea129de4b1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>As a developer who aspires to be a founder, building your first startup can be filled with excitement and ideas. The worst thing that could happen to you is jumping straight into the coding part. I was in this situation and the last thing on my mind was writing a README file.</p>
<p>I thought, <em>“I’ll add it later.”</em> But “later” never came.</p>
<p>Weeks turned into months, and my once-simple idea turned into chaos. A developer who joined my project had no idea how to set it up. Even I, the founder, started forgetting why I structured certain parts of the app the way I did.</p>
<p>What was supposed to be a few months of development stretched to nearly a year. All because I ignored one small file: <strong>the README.</strong></p>
<p>In this article, you’ll learn how to structure your README file to show all the important information about your project. You can see what it’ll look like here: <a target="_blank" href="https://github.com/nuelcas/mybrandname.git">MybrandName repo</a>.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-the-readme-file-is-not-just-a-formality">The README File is Not Just a Formality</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-readme-structure">README Structure</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-mybrandname-ai-branding-assistant">MyBrandName — AI Branding Assistant</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-features">Features</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-tech-stack">Tech Stack</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-quick-start">Quick Start</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-prerequisites">Prerequisites</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-installations">Installations</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-repository-structure">Repository Structure</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-architecture-overview">Architecture Overview</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-example-api-endpoints">Example API Endpoints</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-authentication-supabase">Authentication (Supabase)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-environment-variables">Environment Variables</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-testing">Testing</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-continuous-integration-ci">Continuous Integration (CI)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-versioning-amp-changelog">Versioning &amp; Changelog</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-contributing">Contributing</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-code-of-conduct">Code of Conduct</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-deployment">Deployment</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-license">License</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-the-github-repository">The GitHub Repository</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-developer-checklist">Developer Checklist</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-common-pitfalls-amp-how-to-avoid-them-beginner-friendly">Common Pitfalls &amp; How to Avoid Them (Beginner-Friendly)</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-problem-hardcoding-api-keys">Problem: Hardcoding API Keys</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-problem-no-quick-start-section">Problem: No Quick Start Section</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-problem-missing-example-requests-or-screenshots">Problem: Missing Example Requests or Screenshots</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-problem-confusing-folder-structure">Problem: Confusing Folder Structure</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-problem-forgetting-to-version-your-project">Problem: Forgetting to Version Your Project</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-problem-no-testing-before-deployment">Problem: No Testing Before Deployment</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-what-you-can-learn-from-this">💡 What You Can Learn from This</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-final-words">Final Words</a></p>
</li>
</ul>
<h2 id="heading-the-readme-file-is-not-just-a-formality">The README File is Not Just a Formality</h2>
<p>Many beginners see the README as optional—something you add just before submitting your GitHub repo. But that’s isn’t the right mindset.</p>
<p>Your README is your project’s map. It tells any developer (including your future self) where to start, how to set up the environment, and how everything connects. It saves time, reduces frustration, and turns a pile of code into a usable, understandable project.</p>
<p>If someone can clone your repository and get it running in under 10 minutes, your README did its job!</p>
<h3 id="heading-readme-structure">README Structure</h3>
<p>Your README acts like the user manual for any developer who clones your repository. It should guide a developer to:</p>
<ul>
<li><p>Clone the repo.</p>
</li>
<li><p>Install dependencies.</p>
</li>
<li><p>Configure environment variables.</p>
</li>
<li><p>Run both backend and frontend successfully.</p>
</li>
<li><p>Understand how the system works.</p>
</li>
</ul>
<p>Let me walk you through a sample README from a project called <strong>MyBrandName</strong>.</p>
<p>Here’s what the README looks like: <a target="_blank" href="https://github.com/nuelcas/mybrandname">https://github.com/nuelcas/mybrandname</a></p>
<h2 id="heading-mybrandname-ai-branding-assistant">MyBrandName — AI Branding Assistant</h2>
<p>MyBrandName is an AI-powered platform that helps startups create a complete brand identity—logos, stories, and marketing assets—in minutes.</p>
<h3 id="heading-features">Features</h3>
<ul>
<li><p><strong>AI-Powered Branding</strong> – Instantly generate logos, brand stories, and marketing assets using OpenAI.</p>
</li>
<li><p><strong>Authentication</strong> – Secure user login and registration powered by Supabase.</p>
</li>
<li><p><strong>Database</strong> – Supabase for storing users, brands, assets, and subscription data.</p>
</li>
<li><p><strong>Frontend</strong> – Responsive UI built with TypeScript, Vite, and TailwindCSS.</p>
</li>
<li><p><strong>Backend API</strong> – Node.js + Express handles AI generation, authentication, and data management.</p>
</li>
<li><p><strong>Subscription Management</strong> – Stripe integration for plan upgrades and payments.</p>
</li>
<li><p><strong>Continuous Integration (CI)</strong> – Automated testing and build workflows via GitHub Actions.</p>
</li>
<li><p><strong>Versioning &amp; Changelog</strong> – Semantic versioning with a clear project evolution record.</p>
</li>
<li><p><strong>Deployment Ready</strong> – Easily deploy frontend (Vercel) and backend (Render) with Supabase integration.</p>
</li>
</ul>
<h3 id="heading-tech-stack">Tech Stack</h3>
<ul>
<li><p><strong>Runtime:</strong> Node.js + Express.js.</p>
</li>
<li><p><strong>Language:</strong> TypeScript.</p>
</li>
<li><p><strong>Frontend:</strong> Vite + Tailwind CSS.</p>
</li>
<li><p><strong>Database &amp; Auth:</strong> Supabase (Database, Storage, Authentication).<br>  <strong>AI Service:</strong> OpenAI API (Logo, Story, and Content Generation).</p>
</li>
<li><p><strong>HTTP Client:</strong> Axios/Fetch API.</p>
</li>
<li><p><strong>CI/CD:</strong> GitHub Actions (Automated Testing &amp; Deployment).</p>
</li>
<li><p><strong>Hosting:</strong> Vercel (Frontend) + Render (Backend).</p>
</li>
</ul>
<h2 id="heading-quick-start">Quick Start</h2>
<h3 id="heading-prerequisites">Prerequisites</h3>
<ul>
<li><p><strong>Node.js 16+</strong></p>
</li>
<li><p><strong>Supabase project</strong> (for Authentication, Database, and Storage)</p>
</li>
<li><p><strong>OpenAI API key</strong> (for AI-powered logo and content generation)</p>
</li>
<li><p><strong>Stripe account</strong> (for subscription and payment handling)</p>
</li>
</ul>
<h3 id="heading-installations">Installations</h3>
<ol>
<li>Clone the repository</li>
</ol>
<pre><code class="lang-bash">git <span class="hljs-built_in">clone</span> https://github.com/nuelcas/mybrandname.git
</code></pre>
<ol start="2">
<li>Install Dependencies</li>
</ol>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> backend &amp;&amp; npm install
<span class="hljs-built_in">cd</span> ../frontend &amp;&amp; npm install
</code></pre>
<ol start="3">
<li>Environment setup</li>
</ol>
<pre><code class="lang-bash">cp backend/.env.example backend/.env
</code></pre>
<p>Update <code>.env</code> with your configuration:</p>
<ul>
<li><p>Supabase URL and API key</p>
</li>
<li><p>OpenAI API key</p>
</li>
<li><p>Stripe API key</p>
</li>
</ul>
<ol start="4">
<li>Development</li>
</ol>
<pre><code class="lang-bash"><span class="hljs-comment"># Run backend</span>
<span class="hljs-built_in">cd</span> backend &amp;&amp; npm run dev

<span class="hljs-comment"># Run frontend</span>
<span class="hljs-built_in">cd</span> frontend &amp;&amp; npm run dev
</code></pre>
<ol start="5">
<li>Production Build</li>
</ol>
<pre><code class="lang-bash">npm run build
npm start
</code></pre>
<p>Visit: <a target="_blank" href="http://localhost:5173">http://localhost:5173</a></p>
<h2 id="heading-repository-structure">Repository Structure</h2>
<pre><code class="lang-bash">/mybrandname
├── /frontend
│   ├── /src
│   │   ├── /components        <span class="hljs-comment"># UI Components (AuthForm, Navbar, etc.)</span>
│   │   ├── /pages             <span class="hljs-comment"># App pages (Home, Dashboard, Pricing)</span>
│   │   ├── /hooks             <span class="hljs-comment"># Custom React hooks (useAuth, useLogoGenerator)</span>
│   │   ├── /lib               <span class="hljs-comment"># Config files (Supabase, API client, constants)</span>
│   │   ├── /styles            <span class="hljs-comment"># Global and component styles</span>
│   │   ├── App.tsx            <span class="hljs-comment"># Main routing setup</span>
│   │   └── main.tsx           <span class="hljs-comment"># React entry point</span>
│   ├── public/                <span class="hljs-comment"># Public assets (icons, logos)</span>
│   ├── tailwind.config.ts     <span class="hljs-comment"># Configures Tailwind CSS settings</span>
│   ├── vite.config.ts         <span class="hljs-comment"># Contains build and development settings for the Vite bundler</span>
│   └── package.json           <span class="hljs-comment"># Lists frontend project dependencies, scripts, and metadata</span>
│
├── /backend
│   ├── /src
│   │   ├── /routes            <span class="hljs-comment"># Express routes (auth, brand, assets, subscription)</span>
│   │   ├── server.ts          <span class="hljs-comment"># Main Express server entry</span>
│   │   └── config/            <span class="hljs-comment"># Environment and DB configs</span>
│   └── package.json           <span class="hljs-comment"># Lists backend project dependencies, scripts, and metadata for Node.js</span>
│
└── README.md
</code></pre>
<h3 id="heading-architecture-overview">Architecture Overview</h3>
<p><strong>Frontend</strong></p>
<ul>
<li><p>Built with TypeScript + Vite + Tailwind CSS</p>
</li>
<li><p>Connects to Supabase for authentication, backend API for AI generation, and Stripe for payments</p>
</li>
</ul>
<p><strong>Backend</strong></p>
<ul>
<li><p>Built with Node.js + Express</p>
</li>
<li><p>Handles authentication, AI content generation, and database writes via Supabase</p>
</li>
</ul>
<p><strong>Supabase Tables</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Table</strong></td><td><strong>Purpose</strong></td></tr>
</thead>
<tbody>
<tr>
<td>users</td><td>Stores user accounts</td></tr>
<tr>
<td>brands</td><td>Saves generated brand info</td></tr>
<tr>
<td>assets</td><td>Links to stored images/files</td></tr>
<tr>
<td>subscriptions</td><td>Tracks plan and payment status</td></tr>
</tbody>
</table>
</div><h3 id="heading-example-api-endpoints">Example API Endpoints</h3>
<p><strong>Auth Routes</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Endpoint</strong></td><td><strong>Method</strong></td><td><strong>Description</strong></td></tr>
</thead>
<tbody>
<tr>
<td>/api/auth/signup</td><td>POST</td><td>Register new user</td></tr>
<tr>
<td>/api/auth/login</td><td>POST</td><td>Log in user</td></tr>
</tbody>
</table>
</div><p><strong>Branding Routes</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Endpoint</strong></td><td><strong>Method</strong></td><td><strong>Description</strong></td></tr>
</thead>
<tbody>
<tr>
<td>/api/brand/logo</td><td>POST</td><td>Generate AI-powered logo</td></tr>
</tbody>
</table>
</div><p>Example Request:</p>
<pre><code class="lang-bash">POST /api/brand/logo
{
  <span class="hljs-string">"brandName"</span>: <span class="hljs-string">"NovaTech"</span>,
  <span class="hljs-string">"industry"</span>: <span class="hljs-string">"Tech"</span>,
  <span class="hljs-string">"style"</span>: <span class="hljs-string">"Modern Minimal"</span>
}
</code></pre>
<p>Example Response:</p>
<pre><code class="lang-bash">{
  <span class="hljs-string">"logoUrl"</span>: <span class="hljs-string">"https://supabase.storage/novatech-logo.png"</span>,
  <span class="hljs-string">"palette"</span>: [<span class="hljs-string">"#121212"</span>, <span class="hljs-string">"#FF005C"</span>]
}
</code></pre>
<h3 id="heading-authentication-supabase">Authentication (Supabase)</h3>
<pre><code class="lang-bash">import { createClient } from <span class="hljs-string">'@supabase/supabase-js'</span>;

const supabase = createClient(
  import.meta.env.VITE_SUPABASE_URL,
  import.meta.env.VITE_SUPABASE_KEY
);
</code></pre>
<h3 id="heading-environment-variables">Environment Variables</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Variable</strong></td><td><strong>Description</strong></td></tr>
</thead>
<tbody>
<tr>
<td>VITE_SUPABASE_URL</td><td>Supabase project URL</td></tr>
<tr>
<td>OPENAI_API_KEY</td><td>API key for AI generation</td></tr>
<tr>
<td>PORT</td><td>Backend port (default: 5000)</td></tr>
</tbody>
</table>
</div><h3 id="heading-testing">Testing</h3>
<p>Use Vitest/Jest for unit testing and Supertest for API routes.</p>
<pre><code class="lang-bash">npm run <span class="hljs-built_in">test</span>
</code></pre>
<h3 id="heading-continuous-integration-ci">Continuous Integration (CI)</h3>
<p>CI automatically runs tests when you push new code. This ensures your main branch always stays stable.</p>
<p>Example GitHub Action Workflow:</p>
<pre><code class="lang-bash">name: MyBrandName CI
on: [push, pull_request]
<span class="hljs-built_in">jobs</span>:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: |
          <span class="hljs-built_in">cd</span> backend &amp;&amp; npm ci &amp;&amp; npm run <span class="hljs-built_in">test</span>
          <span class="hljs-built_in">cd</span> ../frontend &amp;&amp; npm ci &amp;&amp; npm run build
</code></pre>
<p><strong>Tip:</strong> CI helps avoid “it works on my machine” problems.</p>
<h3 id="heading-versioning-amp-changelog">Versioning &amp; Changelog</h3>
<p>Keep a <a target="_blank" href="http://CHANGELOG.md"><code>CHANGELOG.md</code></a> file documenting updates.<br>Use <strong>Semantic Versioning (MAJOR.MINOR.PATCH)</strong>, for example,<br><code>1.1.0</code> → Added new features.</p>
<h2 id="heading-contributing">Contributing</h2>
<p>We welcome contributions from developers who want to improve <strong>MyBrandName</strong>!<br>Follow these steps to contribute effectively:</p>
<ul>
<li><p><strong>Fork the Repository</strong></p>
<ul>
<li>Click the <em>Fork</em> button on GitHub to create your own copy of the project.</li>
</ul>
</li>
<li><p><strong>Clone Your Fork</strong></p>
<ul>
<li>Run:</li>
</ul>
</li>
</ul>
<pre><code class="lang-bash">    git <span class="hljs-built_in">clone</span> https://github.com/nuelcas/mybrandname.git
</code></pre>
<ul>
<li><p><strong>Create a Feature Branch</strong></p>
<ul>
<li>Keep your changes organized:</li>
</ul>
</li>
</ul>
<pre><code class="lang-bash">    git checkout -b feat/your-feature-name
</code></pre>
<ul>
<li><p><strong>Set Up the Environment</strong></p>
<ul>
<li>Follow the setup instructions in the README to install dependencies and configure your <code>.env</code> files.</li>
</ul>
</li>
<li><p><strong>Follow Code Style and Formatting Rules</strong></p>
<ul>
<li>Ensure consistent formatting before committing:</li>
</ul>
</li>
</ul>
<pre><code class="lang-bash">    npm run lint
</code></pre>
<ul>
<li><p><strong>Use Clear Commit Messages</strong></p>
<ul>
<li><p>Follow the conventional commit style:</p>
<ul>
<li><p><code>feat:</code> – new feature</p>
</li>
<li><p><code>fix:</code> – bug fix</p>
</li>
<li><p><code>docs:</code> – documentation update</p>
</li>
<li><p><code>refactor:</code> – code restructuring</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Write or Update Tests</strong></p>
<ul>
<li><p>Use <code>Vitest</code> or <code>Jest</code> for unit testing and <code>Supertest</code> for API routes.</p>
</li>
<li><p>Run:</p>
</li>
</ul>
</li>
</ul>
<pre><code class="lang-bash">    npm run <span class="hljs-built_in">test</span>
</code></pre>
<ul>
<li><p><strong>Document Your Changes</strong></p>
<ul>
<li>Update <a target="_blank" href="http://README.md"><code>README.md</code></a>, <a target="_blank" href="http://CHANGELOG.md"><code>CHANGELOG.md</code></a>, or <a target="_blank" href="http://CONTRIBUTING.md"><code>CONTRIBUTING.md</code></a> if needed.</li>
</ul>
</li>
<li><p><strong>Submit a Pull Request (PR)</strong></p>
<ul>
<li><p>Push your branch and open a PR with:</p>
<ul>
<li><p>A short, clear description of your changes.</p>
</li>
<li><p>Any related issue numbers (for example, “Closes #12”).</p>
</li>
<li><p>Screenshots or example outputs (if applicable).</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>Participate in Code Review</strong></p>
<ul>
<li>Respond to feedback, make improvements, and help maintain project quality.</li>
</ul>
</li>
</ul>
<h3 id="heading-code-of-conduct">Code of Conduct</h3>
<p>To maintain a positive and inclusive community, all contributors are expected to:</p>
<ul>
<li><p>Be respectful, kind, and patient when interacting with others.</p>
</li>
<li><p>Welcome feedback and engage in constructive discussions.</p>
</li>
<li><p>Avoid discriminatory or offensive language.</p>
</li>
<li><p>Focus on collaboration and problem-solving rather than criticism.</p>
</li>
<li><p>Credit other contributors where due.</p>
</li>
<li><p>Report any violations or concerns to the maintainers privately.</p>
</li>
</ul>
<p>Let’s work together to make <strong>MyBrandName</strong> a project where everyone feels valued and supported. 💙</p>
<h2 id="heading-deployment">Deployment</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Component</strong></td><td><strong>Platform</strong></td><td><strong>Notes</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Frontend</td><td>Vercel/Netlify</td><td>Add env variables</td></tr>
<tr>
<td>Backend</td><td>Render/Railway</td><td>Add Supabase &amp; AI keys</td></tr>
<tr>
<td>Database</td><td>Supabase</td><td>Auth + Storage + Database</td></tr>
</tbody>
</table>
</div><h3 id="heading-license">License</h3>
<p>This project is licensed under the MIT License—see the LICENSE file for details.</p>
<h3 id="heading-the-github-repository">The GitHub Repository</h3>
<p>You can clone the GitHub repo, edit and build your app from it: <a target="_blank" href="https://github.com/nuelcas/mybrandname.git">MybrandName repo.</a></p>
<h3 id="heading-developer-checklist"><strong>Developer Checklist</strong></h3>
<p>Think of this checklist as your <em>final review</em> before sharing your app publicly:</p>
<p><strong>1. Supabase Authentication is Working</strong></p>
<ul>
<li><p>Test your login and registration flow.</p>
</li>
<li><p>Try creating a new account and logging in.</p>
</li>
<li><p>Make sure the user’s data appears correctly in the Supabase “users” table.</p>
</li>
</ul>
<p><strong>2. AI Endpoints Return Proper Results</strong></p>
<ul>
<li><p>Test your backend endpoints for AI-powered features (for example, logo generation).</p>
</li>
<li><p>Use tools like <strong>Postman</strong> to send sample requests.</p>
</li>
<li><p>Confirm that Supabase stores the generated data or files correctly.</p>
</li>
</ul>
<p><strong>3. Frontend is Responsive</strong></p>
<ul>
<li><p>Open your app on a mobile device and desktop browser.</p>
</li>
<li><p>Ensure the design adjusts properly to different screen sizes.</p>
</li>
<li><p>Check for broken buttons, misaligned text, or hidden sections.</p>
</li>
</ul>
<p><strong>4. Continuous Integration (CI) Tests Pass</strong></p>
<ul>
<li><p>If you use GitHub Actions, make sure your tests run automatically when you push code.</p>
</li>
<li><p>Fix any failed tests before merging branches.</p>
</li>
<li><p>This helps you catch bugs early.</p>
</li>
</ul>
<p><strong>5. Documentation Files Are Complete</strong></p>
<ul>
<li><p>Ensure your <strong>README</strong>, <strong>CONTRIBUTING</strong>, and <strong>CHANGELOG</strong> files are up to date.</p>
</li>
<li><p>Add setup steps, contribution guidelines, and update notes.</p>
</li>
<li><p>This makes your repo beginner-friendly and professional.</p>
</li>
</ul>
<blockquote>
<p>Run through your README’s <strong>Quick Start</strong> section as if you’re a new user.<br>If you can set up the project in less than 10 minutes, your documentation is clear enough.</p>
</blockquote>
<h2 id="heading-common-pitfalls-amp-how-to-avoid-them-beginner-friendly">Common Pitfalls &amp; How to Avoid Them (Beginner-Friendly)</h2>
<p>Here are some common mistakes new developers make and how you can prevent them:</p>
<h3 id="heading-problem-hardcoding-api-keys">Problem: Hardcoding API Keys</h3>
<p>Never store API keys directly in your code. If you push your project to GitHub, anyone can see them.</p>
<p><strong>Solution:</strong> Store them in a <code>.env</code> file and add <code>.env</code> to <code>.gitignore</code>.</p>
<h3 id="heading-problem-no-quick-start-section">Problem: No Quick Start Section</h3>
<p>If your README doesn’t explain how to install and run the app, other developers will be lost.</p>
<p><strong>Solution:</strong> Always include a <strong>Quick Start</strong> section showing installation and setup steps.</p>
<h3 id="heading-problem-missing-example-requests-or-screenshots">Problem: Missing Example Requests or Screenshots</h3>
<p>Readers want to see what your API or app does before trying it.</p>
<p><strong>Solution:</strong> Add example API requests and responses (like the <code>/api/brand/logo</code> example). You can also include screenshots of the UI.</p>
<h3 id="heading-problem-confusing-folder-structure">Problem: Confusing Folder Structure</h3>
<p>A messy project makes it hard for contributors to navigate your code.</p>
<p><strong>Solution:</strong> Explain your folder structure under “Repository Structure.” Include short descriptions of what each folder does.</p>
<h3 id="heading-problem-forgetting-to-version-your-project">Problem: Forgetting to Version Your Project</h3>
<p>If you don’t track changes, it’s hard to know what was updated or fixed.</p>
<p><strong>Solution:</strong> Use <strong>Semantic Versioning</strong> (<code>1.0.0</code>, <code>1.1.0</code>, and so on) and keep a simple <strong>CHANGELOG.md</strong> file.</p>
<h3 id="heading-problem-no-testing-before-deployment">Problem: No Testing Before Deployment</h3>
<p>Beginners often deploy without testing—and later find bugs in production.</p>
<p><strong>Solution:</strong> Run your tests locally first. Automate them using <strong>GitHub Actions</strong> so that every code change is verified.</p>
<p>By addressing these simple issues early, you’ll build reliable, professional-looking projects that others can understand and contribute to easily.</p>
<h2 id="heading-what-you-can-learn-from-this">💡 What You Can Learn from This</h2>
<p>A good README file saves you from:</p>
<ul>
<li><p>Wasting hours debugging setup issues</p>
</li>
<li><p>Confusing collaborators or testers</p>
</li>
<li><p>Forgetting your own logic months later</p>
</li>
</ul>
<p>It also makes your project look professional to employers and recruiters.</p>
<h2 id="heading-final-words">Final Words</h2>
<p>When I finally embraced writing detailed README files, everything changed. New collaborators understood my projects faster. Deployment became smoother. And most importantly—I never had to “learn the hard way” again.</p>
<p>So if you’re just starting out, take my advice: <strong>Before you write your next line of code, write your README file.</strong></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Build Successful Low-Code Apps: The Power of Knowledge Transfer in Development Teams ]]>
                </title>
                <description>
                    <![CDATA[ Low-code models, such as Microsoft's Power Platform, make it simple for anyone to start creating applications. The barriers to entry are relatively low, as users need only a work or school email to ge ]]>
                </description>
                <link>https://www.freecodecamp.org/news/low-code-knowledge-transfer/</link>
                <guid isPermaLink="false">66d87a73191c724ea0c7ef03</guid>
                
                    <category>
                        <![CDATA[ Low Code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ teamwork ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ best practices ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Brandon Wozniewicz ]]>
                </dc:creator>
                <pubDate>Wed, 04 Sep 2024 15:19:15 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1724883531478/4fa7979a-e61a-4268-94dc-a48dfcf17b4b.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Low-code models, such as Microsoft's Power Platform, make it simple for anyone to start creating applications. The barriers to entry are relatively low, as users need only a work or school email to get started. Developers can also quickly release new applications into the wild.</p>
<p>But as this happens, questions arise, such as who supports these applications? And who will make the updates if there is a feature request or bug?</p>
<p>Many low-code applications are often created by a single developer, inherently leading to a single point of failure.</p>
<p>And don't let the advertised simplicity of low-code trick you into thinking anyone can edit the app, fix any issues, and add new features. Low code can still contain complexity, and complex solutions can quickly become a problem for organizations and teams that leverage dozens, if not hundreds, of other low- or non-low-code dependencies.</p>
<p>This doesn't mean that organizations should strictly restrict who can create these applications. Doing so would contradict the very purpose of low code. It's a model that empowers stakeholders themselves to rapidly prototype ideas and develop low-cost solutions to problems that, in traditional development, might cost millions of dollars.</p>
<p>In this low-code world, both organizations and developers need a plan. Developers, specifically, should have a plan to transfer knowledge of their products, whether working in a team or independently.</p>
<h2 id="heading-how-to-simplify-complexity">How to Simplify Complexity</h2>
<p>Our relatively small team has created numerous low-code solutions, primarily leveraging Microsoft's suite of products. Some of these solutions are simple low-code canvas apps, while others contain hundreds of dependencies that are anything but low-code.</p>
<p>We've learned, sometimes the hard way, the importance of ensuring maintainability in our development. This means supporting the applications we build and enabling existing and new team members to support them in the future.</p>
<p>Initially, we found ourselves drawn to the premise of being able to create products that solve problems quickly. Before we knew it, we had our own problem: how do we support the array of these products, ensuring that not just us but new team members could do so as well?</p>
<h3 id="heading-slow-down-to-speed-up">Slow Down to Speed Up</h3>
<p>This might sound contrary to the low-code paradigm, but taking frequent pauses to consider the long-term impacts of your decisions is critical to ensuring the tools you build today can be supported tomorrow.</p>
<p>This does not mean reverting back to the speeds of traditional software development, but you should not consider building low-code products as a race to the finish line.</p>
<h3 id="heading-pair-programming">Pair Programming</h3>
<p>Incorporating traditional software development practices can significantly benefit the low-code movement. Even if your applications involve little to no conventional code, concepts like pair programming can be effectively applied when building low-code products.</p>
<p>Take, for example, the process of building a Power App. Traditionally, only one person could edit an app at a time. Although that limitation has changed—multiple people can now edit an app simultaneously—defining a collaborative process remains crucial.</p>
<p>Our team often employs a primary "driver" approach, where one member leads the development while another observes, providing real-time feedback and suggestions.</p>
<p>This method keeps everyone engaged and helps mitigate the effects of tunnel vision on the product. And this collaborative approach is especially valuable for more complex aspects of the application.</p>
<p>For more straightforward tasks, we often work in parallel but stay closely connected via Teams or Zoom, ready to coordinate and ensure each different component is part of a cohesive whole.</p>
<h3 id="heading-applicationcode-reviews">Application/Code Reviews</h3>
<p>Low code doesn't mean no code. It is challenging to create robust applications with drag-and-drop alone. Even something like Power Apps has its own language called Power FX.</p>
<p>Schedule time each week to walk through or review others' applications to become familiar with their creations. Look for places where things can be improved, and be ready to accept feedback on your creations, too.</p>
<p>If you're using traditional code in your project, some of this can be accomplished with PRs. For purely low-code implementations, keep a document of changes and have a sign-off process to ensure other team members can access new changes.</p>
<p>For example, imagine adding a new screen to a Canvas app, allowing users to update personal settings. That change should be documented as unreviewed until at least one other team member has reviewed and signed off on this new feature.</p>
<h3 id="heading-get-other-team-members-involved">Get Other Team Members Involved</h3>
<p>If you're on a team, each product should involve at least two people to avoid single points of failure. Ensure each product has a primary and secondary developer or product owner. For larger teams, allow that secondary role to rotate, ensuring each member is more intimately involved with the team's products.</p>
<p>One way to get others involved and up to speed is to have other team members add new features or fix bugs in existing products under the guidance of the primary or lead developer. This knowledge transfer will help cultivate ownership in the various products your team supports, leading to higher engagement and motivation.</p>
<p>Additionally, as the workload is distributed more evenly across the team, bottlenecks are reduced, allowing for more expeditious handling of fixing bugs and enhancing products.</p>
<h2 id="heading-when-a-hands-on-approach-isnt-possible">When a Hands-On-Approach isn't Possible...</h2>
<p>Much of what I describe above is an attempt to get others involved with projects. The more we touch these things, the better we will understand them.</p>
<p>Inevitably, however, when this hands-on experience isn't possible, it is essential to have practices that can mitigate the effects of isolated development—that is, a development done by one or just a few people.</p>
<p>The two most important things we can do are create and maintain comprehensive documentation about our products and use standard practices as much as possible. We'll talk about documentation first.</p>
<h3 id="heading-document-document-document">Document, Document, Document</h3>
<p>As you've probably experienced, the low-code movement allows applications to be created quickly. The more applications exist, the fewer touchpoints we have with older ones. While those touchpoints are critical to the knowledge transfer process, relying on them alone isn't enough.</p>
<p>Whether you're on a team or a solo developer, creating documentation that describes each aspect of your products is critical. For small projects, this may be a simple text document. For larger projects, you could utilize a SharePoint site. Of course, as products become even more complex, the various dependencies will likely have their own documentation (for example, Git repositories).</p>
<p>Here is an example of how you might document a product you are building:</p>
<p>Let's say you have an application that allows users to reserve a conference room for meetings. That application consists of a user interface (such as a Canvas app) and custom code that creates a follow-up reminder for the person who reserved the meeting a day before. This reminder could send an email to remind the user about the meeting, and if the meeting is no longer occurring, encourage them to cancel the reservation. Finally, this product could also have a reporting element, where administrators can see conference room utilization over time to better understand demand.</p>
<p>Here is how you might document this project:</p>
<ol>
<li><p>Establish a single source of truth about this project, such as a SharePoint page.</p>
</li>
<li><p>This page briefly describes the project, the product owners, and the lead developers.</p>
</li>
<li><p>The page would also briefly describe this project's components (Canvas app, custom code, and reporting dashboard).</p>
</li>
<li><p>Finally, you would include documentation on any easy-to-overlook aspects or non-standard project implementations (more on standardization later).</p>
</li>
</ol>
<p>The SharePoint page handles the high-level overview of the project and gets you pointed in the right direction. Regarding the individual components, the Canvas app will include comments and notes in the version history, and your custom code will leverage Git and often include a detailed readme.</p>
<p>Documentation can be challenging, but it is critical. While documentation should be comprehensive, it should complement the hands-on knowledge transfer techniques described above.</p>
<h3 id="heading-standardize-as-much-as-possible">Standardize as Much as Possible</h3>
<p>Whether it is low-code or traditional development, it is important to have standard practices. This is even more important when talking about low code because of the speed at which things can be developed and potentially get out of control.</p>
<p>From project planning, design, development, and testing to cross training team members, make time to create standard practices for each phase.</p>
<p>Standardization shouldn't be considered a way to eliminate the need for cross-training and documentation but rather a way to complement those stages and reduce the time needed in those areas.</p>
<p>If you can approach a problem the same way every time, you can spend time discussing those non-standard and easy-to-forget parts of what you're building.</p>
<p>Here are some questions to get you started:</p>
<ol>
<li><p>What big-picture steps will each application require? Who will be involved in those steps?</p>
</li>
<li><p>What tools will you use? (for example, Power Apps, Appian, Pega)</p>
</li>
<li><p>Can you support traditional development? If so, how will that look?</p>
</li>
<li><p>What is your philosophical approach to development? For example, should you design the user interface or business logic first? What database will you use? (for example, SharePoint or Dataverse)</p>
</li>
<li><p>What conventions will you use in your code? (for example, naming conventions for screens and variables)</p>
</li>
<li><p>What does this knowledge transfer or cross-training process look like? Do you have dedicated times each week to review each other's work?</p>
</li>
</ol>
<p>Of course, this list goes on. The more you learn, the more you'll realize what needs to be discussed. Get started by creating a Standard Operating Procedure (SOP), and be prepared to edit it early and often.</p>
<h2 id="heading-what-if-i-am-a-solo-developer">What if I am a Solo Developer?</h2>
<p>If you're a solo developer, it may be easy to think that the recommendations above don't apply. But this couldn't be further from the truth. Creating and maintaining a knowledge-transfer framework is even more critical as a solo developer. While co-developing and pair programming are not directly applicable, the concepts still apply.</p>
<p>For example, take time to meet other developers and ask for feedback. At a minimum, it will be an excellent way to meet other people doing the same thing. And, of course, with AI taking a front row in programming, you can always leverage AI to help you learn new techniques and optimize the things you are building.</p>
<p>Finally, documentation and standard practices are just as necessary for the individual developer. First, if you ever work with others, you'll have a reference for your work. Second, these things will act as an external reminder of how you intend to solve development-related problems in the future.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>While low-code platforms offer incredible speed and flexibility, they can also introduce challenges when it comes to maintenance. Rapid development, if not managed carefully, can lead to issues that undermine the long-term success of your applications.</p>
<p>But by intentionally slowing down and establishing a clear plan for knowledge transfer, you can safeguard the future of your critical products. This approach ensures that applications remain supported and sustainable, both now and for years to come.</p>
<p>Stay curious.</p>
<p>Found this helpful? I write about practical automation, productivity systems, and building smarter workflows — without the jargon. Visit me at <a href="http://brandonwoz.com">brandonwoz.com</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Collaborate with Web Development Teams Using Productivity Tools ]]>
                </title>
                <description>
                    <![CDATA[ By Tarif Kahn If you're a web developer, designer, or project manager, you're likely quite busy these days and have a lot on your plate.  This is partly because the number of websites is growing rapidly, with 71% of all businesses in the world having... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-collaborate-with-web-development-teams-using-productivity-tools/</link>
                <guid isPermaLink="false">66d46149230dff0166905879</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Tue, 21 May 2024 12:52:10 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2024/04/christopher-gower-m_HRfLhgABo-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Tarif Kahn</p>
<p>If you're a web developer, designer, or project manager, you're likely quite busy these days and have a lot on your plate. </p>
<p>This is partly because the number of websites is growing rapidly, with <a target="_blank" href="https://www.forbes.com/advisor/business/software/website-statistics/">71% of all businesses</a> in the world having one. In fact, every three seconds a site is launched!</p>
<p>So software development is a growing field, and developers have many responsibilities when it comes to creating quality websites and web apps. You have to keep up with changing trends while staying productive and organized. And you'll often find yourself working on multiple projects while collaborating with stakeholders.</p>
<p>But don't worry: you can boost your productivity and empower yourself and your team by using the right collaborative tools. In this article, I'll share some of my favorite such tools with you so you can start using them.</p>
<h2 id="heading-what-are-collaboration-tools-in-web-development">What are Collaboration Tools in Web Development?</h2>
<p>Collaborative tools are software apps and platforms that help teams communicate, collaborate, track projects, and do collaborative coding. These tools ensure that team members will be able to work together smoothly, increasing productivity and helping them meet project deadlines.</p>
<p>Different collaboration tools, such as annotation tools, social media platforms, and version control, serve different purposes. They can help you and your team with task tracking or simply keeping everyone updated on the situation. </p>
<p>Some popular ones are GitHub for version control, Slack for real-time communication, Trello for project management, Google Docs for collaborative document editing, Jira for issue tracking, and Asana for task management.</p>
<h2 id="heading-how-to-pick-the-right-collaboration-tool-for-your-needs">How to Pick the Right Collaboration Tool for Your Needs</h2>
<p>It can be challenging to pick a project management tool given all the available options. So here are some important factors you should consider before choosing a tool.</p>
<h3 id="heading-verify-project-requirements">Verify Project Requirements</h3>
<p>Consider the distinctive features of your project in order to determine what functions and features you need. Think about things like task management, code collaboration, communication, and integration of different tools when deciding which tool best suits your requirements. </p>
<p>You can also streamline various tasks using online tools. For instance at my company, we developed an <a target="_blank" href="https://www.logodesign.net/web">online website builder</a> which was a long-term project. Our design and developer teams used collaborative tools like Slack and Git to track progress and final deliverables. </p>
<h3 id="heading-check-integration-and-compatibility">Check Integration and Compatibility</h3>
<p>Collaboration platforms should integrate seamlessly with your existing technology ecosystem. Ensure that the tools you choose are compatible with the development environment and programming language(s) you use.</p>
<p>You should also make sure that your collaboration tool works with any project management software you use, your version control system, and repositories to avoid errors. </p>
<p>For example, GitHub offers a version control platform that integrates smoothly with various development tools and services including project management platforms like Trello and Asana. It also provides continuous integration services like Travis CI and CircleCI, as well as code review tools like Codecov and Code Climate.</p>
<h3 id="heading-choose-user-friendly-tools">Choose User-Friendly Tools</h3>
<p>Try to choose collaboration tools that are simple to use. Your tools should be intuitive and easily adaptable for users with minimal (or no) training. </p>
<p>The best collaborative tools create a good user experience and they should increase your efficiency and productivity. </p>
<p>For example, as a widely used messaging platform, Slack's intuitive interface and simple channel organization make it easy for web development teams to communicate in real-time and share files quickly.</p>
<p>Google Docs is another popular tool that almost everyone is accustomed to or uses. It’s very helpful in sharing written content or any other project documentation.</p>
<h3 id="heading-consider-privacy-and-security">Consider Privacy and Security</h3>
<p>Often, your team's projects under development are built based on confidential information and intellectual property. So you'll want to make sure that you choose the most secure tools, which include encryption and access controls. Industry standards are often a good bet.</p>
<p>For example, <a target="_blank" href="https://www.atlassian.com/software/jira/guides/getting-started/introduction">Jira</a> is a popular collaboration tool for developers and offers options for cloud or self-hosted deployments. It also implements security best practices. Likewise, Microsoft Teams and Slack offer end-to-end encryptions that safeguard sensitive copyrighted and development information.</p>
<h3 id="heading-scalability">Scalability</h3>
<p>The tool's scalability is another factor you should keep in mind. As your projects become more complicated, the tool will need to be able to handle such complexities. You might also need to add members to your team as it grows. </p>
<p>As an example, Hibox provides data privacy features, encrypted communication, and scalability for teams of different sizes.</p>
<h3 id="heading-pricing">Pricing</h3>
<p>You'll want to compare the pricing and subscription plans of various collaboration tools before making your choice. It is important to consider your budget and the value each tool provides. As a result, you will be able to find the most cost-effective option that meets the needs of your team.</p>
<p>Some tools like Skype and Google Docs are free to use for everyone, but they might not fulfill your needs. You can opt for paid ones like <a target="_blank" href="http://monday.com">Monday.com</a> or <a target="_blank" href="https://www.wrike.com/">Wrike</a> which have a basic pricing plan of around $9 to $10 per month that may suit your needs. You can always upgrade to the Pro plan if the basic one is insufficient. </p>
<h2 id="heading-7-best-collaboration-tools-for-web-developers">7 Best Collaboration Tools for Web Developers</h2>
<p>Now you should understand the benefits of using collaboration tools and what to consider when choosing one. </p>
<p>Let's go over 7 of my favorite online collaboration tools you can use to help your team manage complex projects. </p>
<h3 id="heading-webvizio">Webvizio</h3>
<p><a target="_blank" href="https://webvizio.com/">Webvizio</a>, a new player in the market, transforms online communication and collaboration into a visual experience using visual collaboration tools. It is part of a single integrated workspace, and it's one of the best tools for sharing visual feedback, managing web design projects that are going on, finding bugs and fixing them, and iterating on designs without any hassle.</p>
<p>Developers and designers can use this tool to sync their intentions, improve user interfaces and designs, and ensure a smooth transition from design to development.</p>
<p>This tool grants webmasters and designers a broad range of collaborative tools. This is the right tool, especially for teams that seek to optimize their design workflows and improve collaboration, with its visual interface, real-time collaboration tools, and design-specific features.</p>
<h3 id="heading-pros-of-using-webvizio">Pros of Using Webvizio:</h3>
<ul>
<li><p><strong>Collaboration with seamless visuals</strong>. It enables users to add annotations right on top of visuals and forward on problems, or they can upload screenshots and add comments to web pages to give contextual feedback, improve clarity, and reduce mistakes.  </p>
</li>
<li><p><strong>Managing tasks efficiently</strong>. With this tool, users can assign tasks, define deadlines, track productivity, and monitor the project progress effortlessly. This is useful to project managers and web developers for managing the workloads of their teams.</p>
</li>
</ul>
<h3 id="heading-cons-of-using-webvizio">Cons of Using Webvizio:</h3>
<ul>
<li><p><strong>Problems with email invitations</strong>. There have been some reports of users experiencing difficulties accepting email invitations while using this tool, possibly because the invitations did not arrive in their inboxes. Several clients who are less tech-savvy have reported this issue.  </p>
</li>
<li><p><strong>Viewing multi-page PDFs is inconvenient</strong>. Several users have complained about the way that Webvizio displays multi-page PDFs. Reviewers have criticized the lack of a scrollable side-by-side page layout, which appears as a separate tab instead of a side-by-side layout.</p>
</li>
</ul>
<p><img src="https://lh7-us.googleusercontent.com/K_Tn_uCa_OY1kNz-_hQhQkF27clvqyCpZdWHI3kuF0qdd0LbKRp9J4qHdS_3Nj56N0PgU4K6dI2lsD3_U7yjfgORPSdDpikzQ5y4Kw-ag5q02UVeHRlG8U8odP2rMoCUekNTxguKawOGgkf1-ngpA0w" alt="Webvizio dashboard" width="600" height="400" loading="lazy">
<em>Webvizio dashboard screenshot <a target="_blank" href="https://webvizio.com/website-task-management/">Source</a></em></p>
<h3 id="heading-mondaycom"><strong>Monday.com</strong></h3>
<p><a target="_blank" href="http://monday.com">Monday.com</a> is an online tool for managing web development projects that is equipped with several in-house features and is compatible with the best collaboration tools on the market.</p>
<p>In addition to offering a collaborative web development tool, it also offers the following features:</p>
<ul>
<li>Sharing documents</li>
<li>Editing in collaboration</li>
<li>Integration of collaboration tools</li>
<li>Multiple views</li>
<li>Projects and dashboards that are customizable</li>
</ul>
<p>Here, web developers have access to files that can be shared and co-authored in real time using Workdocs. Thanks to seamless third-party integrations, you can continue to use popular collaboration tools like Slack, Microsoft Teams, Dropbox, and so on with Monday.com.</p>
<p>Monday.com also offers multiple views for project management, such as a calendar, timeline, Gantt chart, Kanban board, and more, as well as customizable dashboards and time-tracking features.</p>
<p><strong>Pros of Monday.com:</strong></p>
<ul>
<li><strong>Simple Automation</strong>. Simple tasks can be automated using rules</li>
<li><strong>200 templates Available</strong>. There are more than 200 templates available for projects that users can choose from.</li>
<li><strong>Easy to Understand UX/UI</strong>. User interface that is modern and minimalistic which makes it easy to understand for everyone.</li>
<li><strong>Free Plan</strong>. For solo and duo users, a free plan is available</li>
</ul>
<p><strong>Cons of Monday.com:</strong></p>
<ul>
<li><strong>Filtering tool is restrictive</strong>: Filtering tools can be a bit restrictive when it comes to tasks</li>
<li><strong>My Work section is useless</strong>. There is little use for the "My Work" section</li>
<li><strong>No time tracking in the free plan</strong>. Time tracking is only available in the Pro plan, which is a major disadvantage</li>
<li><strong>Mobile App is not very useful</strong>. There is a lack of functionality in the mobile app</li>
</ul>
<p><img src="https://lh7-us.googleusercontent.com/bEBGRKF1YoFRmYrvzzp-Vf9sibyuHNWTJGUJy8oDUAyrB6sc2L91Wm7FdXqgu9jPgPEeua9hmBQmG5mDjbgnCJPk2w62oriiaSVPCaBtnrsfqSQPwzxcBPR8jjyv1isK_060DDY8DTdru2UYCqupIdE" alt="Monday.com project management dashboard" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://monday.com/">Source</a> Monday.com dashboard</em></p>
<h3 id="heading-gitlabhttpsaboutgitlabcom"><a target="_blank" href="https://about.gitlab.com/">GitLab</a></h3>
<p>GitLab's main goal is to allow software developers to work together in a collaborative setting while working on code. You can use this project management platform for complete software life cycle development. It's also good at complimenting the DevOps process, where teams work together and complete projects as fast as they can.</p>
<p>Whether you are planning or shipping the code, GitLab has many sets of features. You can monitor tasks, write and run code, perform and report on code quality, track issues, and more. Despite all the complexity of the features, developers are still able to communicate with each other, provide comments, manage pull requests, and merge code in real time.</p>
<p>You can sign up for a GitLab account and choose from one of three tiers: free, pro, and ultimate. However, its price is usually higher than that of its main competitor (GitHub), which may be a disadvantage for some users.</p>
<p><strong>Pros of GitLab:</strong></p>
<ul>
<li><strong>An all-encompassing platform</strong>. With GitLab, you can manage version control, issues, continuous integration, and more.</li>
<li><strong>Open-source</strong>. GitHub is an open-source platform that makes it possible for users to interact with and modify the source code.</li>
<li><strong>Ability to collaborate effectively</strong>. With GitLab, teams can collaborate easily, with code reviews, merge requests, and real-time comments.</li>
</ul>
<p><strong>Cons of GitLab:</strong></p>
<ul>
<li><strong>It's a steep learning curve.</strong> For beginners, GitLab can be a complex tool, requiring time and effort to learn.</li>
<li><strong>Integrations with third parties are limited.</strong> Compared to some other platforms, GitLab may have fewer integrations with popular tools.</li>
<li><strong>Issues with performance.</strong> Performance issues have occasionally been reported by some users, especially for large databases.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/05/Gitlab.png" alt="Gitlab Operations dashboard screenshot " width="600" height="400" loading="lazy">
_Operations dashboard screenshot <a target="_blank" href="https://docs.gitlab.com/ee/user/operations_dashboard/img/index_operations_dashboard_with_projects.png">Source</a>_</p>
<h3 id="heading-jira"><strong>Jira</strong></h3>
<p>Jira is a popular software tool that many developers use while working with <a target="_blank" href="https://www.atlassian.com/agile">Agile methodologies</a>. It offers <a target="_blank" href="https://www.atlassian.com/agile/kanban/kanban-vs-scrum">Kanban and Scrum boards</a>, which help team members visualize what tasks must be done, what is in progress, and what is completed.</p>
<p>It also offers roadmaps, which help projects stay on track thanks to their transparency and ease of working together. This tool empowers managers to make team reports that visualize the data and let the them decide where improvements need to be made.</p>
<p>Equipped with more than 3,000 applications, Jira offers seamless collaboration. This tool is free for up to ten users, but for any extra users you'll need to pay. A subscription to the Standard plan costs $8.15, a Premium plan costs $16, and an Enterprise plan costs $24 per month.</p>
<p>Jira is an ideal tool if you are an Agile team that uses Scrum or Kanban methods. It is a program that can help you to run your processes smoothly and efficiently.</p>
<p><strong>Pros of Jira:</strong></p>
<ul>
<li><strong>Customization</strong>. Teams can customize workflows, fields, and issue types with Jira's powerful customization features.</li>
<li><strong>A visual representation of work</strong>. Jira's intuitive layout and clear status indicators allow users to visualize work items effectively.</li>
<li><strong>Limit the amount of work in progress</strong>. Make sure thresholds are set for work items at specific stages in order to prevent bottlenecks and keep tasks flowing smoothly.</li>
</ul>
<p><strong>Cons of Jira</strong></p>
<ul>
<li><strong>The setup is challenging</strong>. A new user of project management tools may find Jira's extensive features and customization options difficult to understand at first, as it has a variety of features and customization options.</li>
<li><strong>There is no feature for managing ideas</strong>. There is no built-in functionality for idea management in Jira, which may force teams to look for other tools to develop ideas and concepts.</li>
<li><strong>It is expensive for small teams</strong>. A small company or startup with a limited budget may find Jira's pricing structure prohibitive.</li>
<li><strong>The query load time is slow</strong>. There have been reports from users that query loading times are slow, affecting efficiency as well as performance, particularly for larger organizations.</li>
</ul>
<p><img src="https://lh7-us.googleusercontent.com/G4S6PLr-id7RBP7UKmrOeANewLJn4AoQuJg9WduZcErBs8dEB42bmsR4RFtgDJg7efOwI5zcH5l9nQm0pwfToG3Q6wzfXgb-U9-v5uN_tlruuviCnHXm1h6E5TTQvgL9WQFpeGmUJIkTpPRVqfrNc8w" alt="Jira teams collaboration dashboard" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://idalko.com/jira-work-management-guide/">Source‌‌</a> Screenshot of Jira dashboard</em></p>
<h3 id="heading-wrike"><strong>Wrike</strong></h3>
<p>Wrike's multiple views, time tracking, and other features have helped it become a top player in project management software. It has the capability of file sharing, proofs, approvals, and proofing.</p>
<p>Team members can edit documents in real-time using a live editor while developers attach files to tasks, projects, and folders on the web. Automatic posts are made in real-time to keep everyone updated.</p>
<p>One of Wrike's primary strengths is collaboration with versatility:</p>
<ul>
<li>Flexible integrations of other apps</li>
<li>Multiple project dashboards on one</li>
<li>Different styles of status views</li>
</ul>
<p>Web developers can collaborate via various channels within the Wrike platform, including Zoom, Slack, and third-party integrations. It also comes with a couple of project management features, including task tracking and automation, real-time monitoring, and more. </p>
<p>For web development project managers who are always looking for multiple ways of visualizing progress, this tool is appealing thanks to its numerous views.</p>
<p><strong>Pros of Wrike:</strong></p>
<ul>
<li><strong>Increased visibility</strong>. Team leaders can use Wrike's reporting tools to understand team members' workloads and the status of projects.</li>
<li><strong>Templates for flexible projects</strong>. It is easier to save time by customizing templates for similar projects rather than starting from scratch every time.</li>
<li><strong>Task management made easy</strong>. Wrike is designed to simplify the process of assigning tasks to team members and involving external partners.</li>
</ul>
<p><strong>Cons of Wrike:</strong></p>
<ul>
<li><strong>There is no note-taking tool available</strong>. An easy-to-use note-taking tool is desired by users who wish to record notes and then access them at any time.</li>
<li><strong>Costly for solo users</strong>. A free plan is available on Wrike, but it only provides a limited range of features. For individuals or small teams, premium plans offer more valuable features.</li>
<li><strong>Some integrations delay notifications</strong>. Integration with apps such as Outlook may cause notifications to be delayed by more than an hour. If users fail to monitor their inboxes and Wrike, critical messages may be missed.</li>
</ul>
<p><img src="https://lh7-us.googleusercontent.com/utb8xQNMcUgkdHgrH4uO5H_yRpb27mzLpitZvPNYuHl53gqZzvPpp4AIVr75Lmwb5EhNu5jeDGQWKNvBk3L6DBFzERjr67plMxvD5PeAfVJqxuNqUbub81fQL2MoLzcvRjYZNCdItBsZ3mUKOAtwCBo" alt="Wrike dashboard" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://www.developer.com/project-management/wrike-tips-tricks/">Source</a> Screenshot of Wrike dashboard</em></p>
<h3 id="heading-hiboxhttpswwwhiboxco"><a target="_blank" href="https://www.hibox.co/"><strong>Hibox</strong></a></h3>
<p>The Hibox ecosystem is a comprehensive suite of apps designed to simplify online collaboration and improve productivity. The tool's customer interface is intuitive and offers a robust feature set that can meet the needs of a variety of business types, from online retailers to sales teams to project managers to web developers.</p>
<p>Hibox offeres a range of features to help web developers collaborate, including managing tasks, sharing files, scheduling sprints, collaborating effectively, and tracking progress.</p>
<h3 id="heading-pros-of-hibox">Pros of Hibox</h3>
<ul>
<li><strong>Easy to use and intuitive</strong>. Its intuitive nature is consistently praised by users, with many reporting that their team members were able to figure out how to use it without assistance. It was more efficient to communicate via chat and create tasks rather than email, which resulted in 90% fewer emails.</li>
<li><strong>Tracking projects effectively</strong>. With Hibox's project tracking feature, users are able to stay organized and see how their projects progressed. They can generate individual reports to evaluate their team's performance.</li>
<li><strong>Collaboration made it easier</strong>. With its chat feature and ability to assign tasks, Hibox makes it easy to collaborate among users.</li>
</ul>
<h3 id="heading-cons-of-hibox">Cons of Hibox:</h3>
<ul>
<li><strong>Integration is difficult</strong>. It has been reported by many users that Hibox has difficulty integrating with the various tools they use in their industries. Some reviewers have found this frustrating and found it hindered their workflow efficiency.</li>
<li><strong>Not easy to understand for new users.</strong> There have been reports of some users experiencing a steep learning curve when they first started using this tool. The platform's initial challenges can make it difficult for users to grasp all of its features and get started.</li>
<li><strong>Synchronization delays</strong>. Many users have reported delays in file synchronization while using it. These delays can slow down workflows and interfere with collaboration.</li>
</ul>
<p><img src="https://lh7-us.googleusercontent.com/VsmHfwSs_jW8cpXgBtTb_3-AzX4nsdAek3CWuf-suVWoSDsV8z9VhfZFxAXmVkHNLpCVKuFRezMjXpmk7vKi_qfta9Al2LMvhtJBnN5sE6MrA8-tU7d7BOk6WllYAP7wosQly0VvI2hP3YXKeLMJVJM" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://startupstash.com/tools/hibox/">Source</a> Screenshot of Hibox task dashboard</em></p>
<h3 id="heading-conceptboardhttpsconceptboardcom"><a target="_blank" href="https://conceptboard.com/">Conceptboard</a></h3>
<p>Conceptboard is a web-based platform that was developed to enable hybrid and distributed teams to work more efficiently. This digital space allows team members to collect inspiration, generate ideas, collaborate, and create visual content.</p>
<p>This powerful tool allows design teams to work in the same room and turn their ideas into actions using features like wireframing, prototyping, and design review.</p>
<h3 id="heading-pros-of-conceptboard">Pros of Conceptboard:</h3>
<ul>
<li><strong>An excellent whiteboarding feature</strong>. The whiteboarding feature has turned out to be an extremely useful tool for users. It's a facilitator of brainstorming sessions, and allows users to use the tool as a virtual whiteboard.</li>
<li><strong>Free templates.</strong> The templates of the tool were also highly praised, with users indicating that they were easy to use and of good quality. Templates have also been experienced to be draggable and droppable to the projects, attributed to the speed of project management.</li>
<li><strong>A valuable tool in the design team's arsenal</strong>. Conceptboard helps design teams with activities like user mapping and workflows in the UI/UX design. For designers who work in different fields, this functionality has proved to be of great value.</li>
</ul>
<h3 id="heading-cons-of-conceptboard">Cons of Conceptboard:</h3>
<ul>
<li><strong>Lack of integration capabilities</strong>. Some users have gotten into trouble integrating this tool with popular developer software like Jira. </li>
<li><strong>There aren't any apps developed for mobile phones</strong>. Other users have faced challenges when using it away from their computers since there is not a mobile app. As such, they can't use the platform conveniently or any time they like without being tied to their desktops.</li>
<li><strong>Changing browser windows causes a loading delay</strong>. Delays due to changing browser windows have been quite irritating to the users. Consequently, these delays hinder the flow of the work and make switching between tasks harder.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/05/hc-board-overview.png" alt="Concepboard dashboard" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://help.conceptboard.com/hc/en-us/articles/205613282-Board-Workflow-and-Mentions">Source</a> Concepboard dashboard sample screenshot</em></p>
<h2 id="heading-summary-of-the-collaboration-tools">Summary of the Collaboration Tools</h2>
<table>
<thead>
<tr>
<th>Tool Name</th>
<th>Pricing</th>
<th>Key Features</th>
</tr>
</thead>
<tbody>
<tr>
<td>Webvizio</td>
<td>Free plan available</td>
<td>Visual collaboration tools - Seamless visuals for feedback - Task management</td>
</tr>
<tr>
<td>Monday.com</td>
<td>Free plan available and basic paid plan starts around $9 and the pro costs around $19</td>
<td>Real-time co-authoring of documents - Integration with popular collaboration tools - Customizable projects and dashboards</td>
</tr>
<tr>
<td>GitLab</td>
<td>Free plan for personal projects and organizations it starts around $29 per month</td>
<td>Complete software life cycle development - Complements DevOps process - Code monitoring, tasks, quality reporting, and collaboration features</td>
</tr>
<tr>
<td>Jira</td>
<td>Free plan for 10 users and paid standard and premium plans cost for 8 are $15 and $16 respectively</td>
<td>Agile project management with Kanban and Scrum boards - Roadmaps for project transparency - Over 3,000 integrations</td>
</tr>
<tr>
<td>Wrike</td>
<td>Free plans are available, Paid plans start at $9.80 per user per month and the business plan costs $25</td>
<td>Multiple views for project management - Real-time collaboration with file sharing and proofing - Integration with over 400 popular programming tools</td>
</tr>
<tr>
<td>Hibox</td>
<td>Starts at $4.99/user/month</td>
<td>Simplified online collaboration - Task management, file sharing, scheduling sprints - Intuitive interface - Project tracking</td>
</tr>
<tr>
<td>Conceptboard</td>
<td>Free plan for individuals but for organizations premium plan starts at $6 and business plan at $9.50</td>
<td>Virtual whiteboarding for brainstorming - Templates for quick project setup - UI/UX design support - Digital space for collaboration and visual content creation</td>
</tr>
</tbody>
</table>


<p>Team collaboration is one of the most important components of web development. Each developer tool listed above encourages team collaboration. </p>
<p>To ensure you pick the right software for your team, compare their features, advantages, disadvantages, and pricing.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Contribute to Open-Source Projects – A Handbook for Beginners ]]>
                </title>
                <description>
                    <![CDATA[ Over the past decade, open-source projects have become the backbone of the technology ecosystem. They power everything from applications to innovations across different fields. These collaborative inventions bring together people with different skill... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-contribute-to-open-source-handbook/</link>
                <guid isPermaLink="false">66b8dbd4abe19f6180038a2b</guid>
                
                    <category>
                        <![CDATA[ beginners guide ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ handbook ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Wed, 06 Sep 2023 15:39:30 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/09/How-to-Contribute-to-Open-Source--with-photo--Cover--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Over the past decade, open-source projects have become the backbone of the technology ecosystem. They power everything from applications to innovations across different fields.</p>
<p>These collaborative inventions bring together people with different skill sets including developers, designers, and tech enthusiasts in general with one goal in mind to build: to improve and share software freely.</p>
<p>The open source movement champions the idea that knowledge should be accessible to all, and fosters a culture of openness, transparency, and cooperation.</p>
<p>Contributing to open source has many benefits not only for those taking part in it but also the community at large.</p>
<p>Now, if you are just a beginner trying to get into the open-source world, you should keep in mind that you are embarking on a journey that will not only improve your technical skills but also open many doors for you and give you multiple opportunities to interact with like-minded individuals.</p>
<p>This is just a portion of what you can achieve. You'll also have an opportunity to:</p>
<ul>
<li><p>Create an impact through your work</p>
</li>
<li><p>Build your portfolio</p>
</li>
<li><p>Network and connect with other devs, and</p>
</li>
<li><p>Give back to the developer community.</p>
</li>
</ul>
<p>This beginner friendly handbook is crafted to be your companion as you begin your journey into the world of open-source. It will cover concepts that will allow a beginner like you to make your mark in the open-source world.</p>
<p>We will start with the fundamentals of open source, and I'll guide you through setting up your development environment, navigating open-source communities, selecting the right projects, and making your first contribution.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-what-is-open-source-software">What is Open-Source Software?</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-characteristics-of-open-source-software">Characteristics of Open-Source Software</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-types-of-open-source-licenses">Types of Open-Source Licenses</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-benefits-of-contributing-to-open-source-projects">Benefits of Contributing to Open-Source Projects</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-get-started-with-open-source-contributions">How to Get Started with Open-Source Contributions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-navigate-open-source-communities">How to Navigate Open-Source Communities</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-understanding-community-dynamics">Understanding community dynamics</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-find-and-join-open-source-communities">How to Find and Join Open-Source Communities</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-etiquette-communication-norms-and-best-practices">Etiquette, Communication Norms, and Best Practices</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-set-up-a-development-environment">How to Set Up a Development Environment</a></p>
<ul>
<li><p><a class="post-section-overview" href="#howtoinstallthenecessarytools">How to Install the Necessary Tools</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-text-editors-and-integrated-development-environments-ides">Text Editors and Integrated Development Environments (IDEs)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-version-control-systems-1">Version control systems</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-fork-clone-and-set-up-projects">How to fork, clone, and set up projects</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-understanding-project-structure-and-workflow">Understanding Project Structure and Workflow</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-make-your-first-contribution">How to Make Your First Contribution</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-step-by-step-guide-to-making-a-contribution">Step-by-Step Guide to Making a Contribution</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-collaboration-within-the-community">Collaboration within the Community</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-beyond-code-non-coding-contributions">Beyond Code: Non-Coding Contributions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-best-practices-for-quality-contributions">Best Practices for Quality Contributions</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-handle-challenges">How to Handle Challenges</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-showcase-your-open-source-contributions">How to Showcase Your Open-Source Contributions</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>
<p>By the end of this guide you will be equipped with the necessary skills to become an active member of the open-source community. This is the beginning of your open source journey where you will get to continuously learn, collaborate with others, and create an impact. Let's get started!</p>
<h2 id="heading-what-is-open-source-software">What is Open-Source Software?</h2>
<p>In simple words, open source can be described as source code and projects that are made available to the public to view, use, modify, and distribute under a permissive license.</p>
<p>Open-source projects are usually developed in a collaborative manner, mostly by a community of volunteers. Unlike proprietary software, which is usually controlled by a single entity, open source promotes transparency, collaboration, and innovation through community support.</p>
<p>Open-source projects don't only empower their users to use the projects themselves, but also gives them an opportunity to understand how the project works, contribute to its growth, and improve it too.</p>
<p>The main idea behind the open-source software is not only to share the code but create communities with a culture of collaboration, transparency and shared learning.</p>
<p>With this approach in mind, the open-source world has given a rise to some of the most innovative and impactful technologies in use today.</p>
<h3 id="heading-characteristics-of-open-source-software">Characteristics of Open-Source Software</h3>
<ul>
<li><p><strong>Free to use</strong> - users can feely use, modify and redistribute the software.</p>
</li>
<li><p><strong>Transparent</strong> - source code is accessible to all. This promotes trust among the users, as well as openness amongst developers who peer review and fix bugs.</p>
</li>
<li><p><strong>Collaborative</strong> - most open source projects promote collaboration, which enables different people from around the world to contribute their skills, ideas, and expertise.</p>
</li>
<li><p><strong>Community-driven</strong> - open-source projects foster and promote the building of strong communities of like minded individuals with common goals.</p>
</li>
<li><p><strong>Diversity</strong> - brings together people from different backgrounds who share a common goal.</p>
</li>
<li><p><strong>Continuous Improvement</strong> - open source software is continuously evolving. This means that bugs are fixed regularly, new features are added often, and updates are released from time to time.</p>
</li>
<li><p><strong>Licensing</strong> - each open source software has a license that protects the rights of both authors and users, enabling the software's continued openness.</p>
</li>
</ul>
<h3 id="heading-types-of-open-source-licenses">Types of Open-Source Licenses</h3>
<p>Open-source licenses protect the rights of both the authors and the users. They also define terms under which the software can be used, modified, and distributed.</p>
<p>Some of the most common licenses are:</p>
<ul>
<li><p><strong>GNU General Public License (GPL)</strong> - this guarantees the end user the freedom to run, study, share and modify the software.</p>
</li>
<li><p><strong>MIT License</strong> - originates from the Massachusetts Institute of Technology (MIT). It permits reuse of proprietary software.</p>
</li>
<li><p><strong>Apache License</strong>- commonly used for projects associated with the Apache software Foundation.</p>
</li>
<li><p><strong>BSD Licenses</strong> - they are a family of free software licenses that impose minimal restrictions on the use and distribution of covered software.</p>
</li>
<li><p><strong>Mozilla Public License (MPL)</strong> - this is a copyleft license that will require the authors to share modifications they make on your code.</p>
</li>
<li><p><strong>Creative Commons Licenses</strong> - most commonly used not only in software but for other creative works, too. Used when an author wants to give other people right to share, use, and build upon their work.</p>
</li>
</ul>
<p>Having an understanding of these licenses at an early stage is really important as they dictate how your contributions can be used and distributed.</p>
<h2 id="heading-benefits-of-contributing-to-open-source-projects">Benefits of Contributing to Open-Source Projects</h2>
<p>Contributing to open source can be a rewarding way to learn, teach, share, and build experience. There are plenty of benefits that extend beyond the contributions you make.</p>
<p>By contributing to open-source projects you can:</p>
<ul>
<li><p><strong>Learn and Grow</strong> - It will open different avenues for you by giving you an opportunity to experience real world development practices, code review processes, problem solving techniques, and so on.</p>
</li>
<li><p><strong>Build a Portfolio</strong> - Your contributions serve as a proof of your skills, which can be helpful when applying for jobs.</p>
</li>
<li><p><strong>Community and Networking</strong> - It gives you the opportunity to engage and interact with like-minded individuals from around the world. It opens doors for mentors and professional contacts who can guide you.</p>
</li>
<li><p><strong>Solving Real Problems</strong> - Some projects are targeted at solving problems faced by many people like security and healthcare. Contributing to them means you are making a direct impact in solving issues that matter.</p>
</li>
<li><p><strong>Improving Software</strong> - The contributions you make may help improve the quality, functionality, and usability of software you use or that's used by millions of people. Each contribution you make, whether it's fixing a bug, typo, or adding code potentially benefits countless users.</p>
</li>
<li><p><strong>Recognition and Respect</strong> - As you work your way into the open-source world and become consistent, you will gain recognition and be celebrated for your work.</p>
</li>
<li><p>Additionally, it's a fun experience and gives you <strong>personal satisfaction</strong>. And hey, you never know who is watching, maybe it's your next employer or partner 🙂.</p>
</li>
</ul>
<h2 id="heading-how-to-get-started-with-open-source-contributions">How to Get Started with Open-Source Contributions</h2>
<p>Before taking a deep dive into the open-source world, it's important to first evaluate your skills and interests.</p>
<p>Reflect on the programming languages you know, your general technical abilities, and your areas of expertise. Identify your strengths and areas where you want to grow.</p>
<p>This self-assessment will help you find projects that align with your skills and passions.</p>
<h3 id="heading-1-setting-up-the-right-mindset">1. Setting Up the Right Mindset</h3>
<p>As you may know, contributing to open-source is not only about code – it's more of collaboration that will promote growth, learning and positive community engagement.</p>
<p>Before getting started, having the right mindset will empower you throughout the journey. For that you will need to:</p>
<ul>
<li><p><strong>Understand the value of open-source</strong> - the key principle behind the success of open-source projects is collaboration. Each contribution made, no matter how small, adds value. These collective contributions add benefits to the global community.</p>
</li>
<li><p><strong>Embrace the learning process</strong> - not knowing everything is okay, and that's why open-source encourages learning through collaboration. Remember to always do your research and then, if needed, seek help when you are stuck. This is a sign of progress and not weakness.</p>
</li>
<li><p><strong>There is more than code</strong> - as much as code is the core of most open-source projects, it's not the only way to get involved. Before making contributions consider your strengths and interests and then explore non-coding avenues, too.</p>
</li>
</ul>
<h3 id="heading-2-choosing-a-programming-languagetechnology">2. Choosing a Programming Language/Technology</h3>
<p>In order for you to make effective contributions, you'll need to decide which programming languages/technologies you feel most comfortable with. And for that you will need to do the following:</p>
<ul>
<li><p><strong>Assess your skillset</strong> - assessing your skillset will help you decide whether to leverage the skills you already have or venture into learning new ones.</p>
</li>
<li><p><strong>Research technologies</strong> - consider technologies used in different projects that you are interested in and whether they align with your interests.</p>
</li>
<li><p><strong>Personal interests</strong> - passion fuels contributions, and contributing to projects that resonate with you can be fulfilling and fun.</p>
</li>
</ul>
<h3 id="heading-3-finding-projects">3. Finding Projects</h3>
<p>Identifying the right open-source projects can really enhance your contribution experience. There are a few different ways you can search for projects. Here are a few highlights on that:</p>
<ul>
<li><p><strong>Use Open-Source Directories</strong> - explore different platforms that list different open-source projects. Websites like <a target="_blank" href="https://github.com/explore">GitHub Explore</a>, <a target="_blank" href="https://gitlab.com/explore">GitLab Explore</a>, <a target="_blank" href="https://opensourcefriday.com/">Open Source Friday</a> and others all list projects, making it easier to search through.</p>
</li>
<li><p><strong>Source code platforms</strong> - platforms such as GitHub and GitLab are central to the open-source world. Search on these platforms using keywords, and filter across different projects to easily find ones that match your interests.</p>
</li>
<li><p><strong>Project activity</strong> - while searching, look for recent commits, open issues, and ongoing discussions. An active community is a positive sign for the success of the project.</p>
</li>
<li><p><strong>Community engagement</strong> - before you begin making contributions, engage with the project's community. This can be through joining forums, a mailing list, or chat channels. Ask questions and interact with others, as this will help you understand the project's dynamics.</p>
</li>
</ul>
<h3 id="heading-4-choosing-the-right-project">4. Choosing the right project</h3>
<p>Ensuring that you pick the right project to work on is important, as it will be the first step to achieving all your goals.</p>
<p>In order to more easily navigate the open-source landscape and find the right project to work on, here are a few thing to consider:</p>
<ul>
<li><p><strong>Interest alignment</strong> - Make sure you look for projects that align with your technical interests and areas of expertise.</p>
</li>
<li><p><strong>Project activity</strong> - Be sure to check how active the project is. A project with a vibrant community with recent issues and commits indicates it's actively maintained.</p>
</li>
<li><p><strong>Friendliness</strong> - If you are beginner getting into open source for the first time, opt for projects with a reputation of welcoming newcomers.</p>
</li>
<li><p><strong>Project goals</strong> - Have an understanding of the project goals and be sure they align with your values.</p>
</li>
</ul>
<p>After you have found the project you want to contribute to, it's time to do a little vetting. Make sure it meets the following criteria so you know it'll be a good project to work on:</p>
<ul>
<li><p>Check out if it has a license file.</p>
</li>
<li><p>Look for the number of contributors.</p>
</li>
<li><p>Check how often people make commits.</p>
</li>
<li><p>Does it have any open issues? If yes, this might be a good sign – you will have a place to begin.</p>
</li>
<li><p>How long does it take for maintainers to respond? You can check and see how often issues are closed and PRs are merged.</p>
</li>
<li><p>Is there an active discussion on an issue?</p>
</li>
<li><p>Are the issues getting closed regularly?</p>
</li>
<li><p>How many open pull requests are there?</p>
</li>
<li><p>How recently was the latest pull requests merged?</p>
</li>
<li><p>Do the maintainers thank people for contributing?</p>
</li>
</ul>
<p>If this vetting process checks out, then you are probably good to go and start your contributions.</p>
<h2 id="heading-how-to-navigate-open-source-communities">How to Navigate Open-Source Communities</h2>
<p>Open-source projects are more than just code repositories. They are communities where developers from around the world collaborate to create something impactful.</p>
<p>In order to contribute effectively, it's essential to understand the dynamics of these communities and engage with them in a meaningful way.</p>
<p>When it comes to building strong, sustainable open-source contributor communities, it's not just about providing robust newcomer support. For many people, getting involved with open-source projects can be intimidating, overwhelming, and frustrating - especially if they lack exposure to and experience with the different tools and workflows commonly used in the open-source world.</p>
<p>But with the right support structures in place, new members can quickly become valuable contributors to any project - bringing fresh perspectives, enthusiasm, and a willingness to learn.</p>
<p>The benefits offered by these communities are 'on another level' as I would say. They have helped people start from scratch and gain new skills, create connections, and even land their dream jobs.</p>
<p>Other benefits include:</p>
<ul>
<li><p>They promote exchange of ideas, solutions, and best practices.</p>
</li>
<li><p>Overcoming challenges is often easier as a community, and can make problem solving more efficient.</p>
</li>
<li><p>Peer review from different contributors ensures code quality, and can help you catch bugs and improve the project in general.</p>
</li>
<li><p>Contributing to open source projects often provides you with networking opportunities.</p>
</li>
</ul>
<h3 id="heading-understanding-community-dynamics">Understanding community dynamics</h3>
<p>Each open source community has its own culture and values. Understanding these dynamics is key to integrating successfully into the project's workflow.</p>
<ul>
<li><p><strong>Project Vision and Goals</strong> - In order for you to make an effective and meaningful contribution, make sure you understand the project's vision and objectives.</p>
</li>
<li><p><strong>Community Norms and Values</strong> - Every community has both written and unwritten rules and values that contributors should respect. These can include coding standards, communication etiquette, and diversity and inclusion principles.</p>
</li>
<li><p><strong>Recognizing Hierarchy and Roles</strong> - Open source projects often have a hierarchy of roles, from maintainers to newcomers. Understand these roles and how decisions are made within the community.</p>
</li>
</ul>
<h3 id="heading-how-to-find-and-join-open-source-communities">How to Find and Join Open-Source Communities</h3>
<p>Finding the right community is an important step to ensure you have a meaningful open-source experience. So here are a few tips you can use to discover and join open-source communities.</p>
<ul>
<li><strong>Research</strong> - use the readily available platforms to search for projects that align with your skillset. As a beginner at first it might not be a walk in the park for you but with enough guidance you will find it easy.</li>
</ul>
<p>For starters, platforms such as GitHub, Gitlab and Bitbucket can be good platforms to search for projects. One similarity that cuts across all this platforms is that you can use the search functionality to find projects by keywords, technologies used or specific topics.</p>
<p>For example, using GitHub if you are interested in finding Python development projects they you can have your search as shown below and additionally from the left panel further filter the search to suit your desires.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/find-project.png" alt="find-project" width="600" height="400" loading="lazy"></p>
<ul>
<li><strong>Forums and mailing lists</strong> - many projects use different ways to communicate. By finding the right one you can easily introduce yourself and ask questions. The communications options you choose will also depend with the kind of info you want to get.</li>
</ul>
<p>If you are interested in just receiving updates and news about a specific project you are interested in, then consider joining the mailing lists which in most cases is weekly, monthly or quarterly. To sign up for a mailing list/newsletter, you can visit either the official site of the project or a related repository.</p>
<p>If you are more into engaging with other contributors, then joining the forum/discussion boards is the right thing to do. These boards enable the maintainers and contributors to have discussions and share knowledge among themselves. Below is section of freeCodeCamp's forum and some of the conversation that take place.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/forum.png" alt="forum" width="600" height="400" loading="lazy"></p>
<p><strong>Note</strong> the freeCodeCamp forum is subdivided into different sub-forums. This is a very common practice for big projects as it makes it easier for different contributors with questions to know where to ask for help</p>
<ul>
<li><p><strong>Social Media</strong> - follow open-source project accounts on platforms such as X (Twitter), LinkedIn, and GitHub to easily get updates. This works best for those who are actively participating on the social media platforms. For quick updates and news regarding a specific project, then this is the right place to get it – plus it also allows you to enage with other people interested with the same project as you.</p>
</li>
<li><p><strong>Meetups and conferences</strong> - start attending local meetups, conferences, and workshops that are related to open-source projects. This may act as a good opportunity to start making connections.</p>
</li>
<li><p><strong>Online communities</strong> - use platforms such as Stack Overflow, Reddit, and Discord to connect with fellow contributors.</p>
</li>
</ul>
<h3 id="heading-etiquette-communication-norms-and-best-practices">Etiquette, Communication Norms, and Best Practices</h3>
<p>Once you've found a community to join, it's important to follow etiquette and communication norms. Here's a guide to best practices:</p>
<ul>
<li><p><strong>Read the guidelines</strong> - Read and understand the community guidelines. They help ensure that everyone feels equal, safe, and respected.</p>
</li>
<li><p><strong>Introduce yourself</strong> - How we introduce ourselves will often be how others remember us. When you introduce yourself, remember to be respectful and concise.</p>
</li>
<li><p><strong>Listen and learn</strong> - Before you begin making any kind of contributions, take some time to first understand the culture of the community.</p>
</li>
<li><p><strong>Ask questions</strong> - whenever you encounter a challenge, feel free to ask a question and be sure to provide some context to indicate you did attempt to find an answer yourself.</p>
</li>
<li><p><strong>Accept feedback</strong> - whenever you receive feedback of any kind, thank the person and accept their opinion. Remember that continuous learning is key.</p>
</li>
<li><p><strong>Don't spam</strong> - Avoid spamming the communication channels with the same questions. Just use appropriate channels for different topics.</p>
</li>
<li><p><strong>Be patient</strong> - remember that the communities have contributors from different time zones, so give them adequate time to respond.</p>
</li>
</ul>
<h2 id="heading-how-to-set-up-a-development-environment">How to Set Up a Development Environment</h2>
<p>A well-configured environment is the foundation not only for open-source contribution but for development in general.</p>
<p>It may sound like a difficult thing to do, but when you are contributing to multiple projects and working on personal projects from your machine, having an environment will be really helpful.</p>
<p>Here are a few things to note when it comes to setting up your development environment:</p>
<h3 id="heading-install-the-necessary-tools">Install the Necessary Tools</h3>
<ul>
<li><p>Local setup - In most projects, they will list all the requirements needed for setup. Just be sure to install them as instructed on the project's documentation.</p>
</li>
<li><p>Consider using a virtual environment, as this will help in isolating project-specific dependencies.</p>
</li>
<li><p>Using Docker is a good option, too, as it ensures consistent environments across different machines you might be working with.</p>
</li>
</ul>
<h3 id="heading-text-editors-and-integrated-development-environments-ides">Text Editors and Integrated Development Environments (IDEs)</h3>
<p>Text Editors and IDEs are the tools that help your write, edit, and manage your code. Depending on your programming language of choice and personal preference, you can choose from different options such as Visual Studio Code, Sublime Text, or JetBrains IDEs like PyCharm or IntelliJ IDEA.</p>
<p>These tools offer features like:</p>
<ul>
<li><p>syntax highlighting,</p>
</li>
<li><p>auto-completion</p>
</li>
<li><p>debugging</p>
</li>
</ul>
<p>These features can help enhance your coding experience.</p>
<p>In addition to the regular installation, be sure to install any necessary extensions that will help make your workflow smoother.</p>
<h3 id="heading-version-control-systems">Version control systems</h3>
<p>Version control is the cornerstone of collaboration in software development. The most commonly known and used one is Git. It allows you as a developer to record changes made to code, create branches to easily add new features without interfering with main code, and allows easy merging of the changes.</p>
<p>But Git by itself can't accomplish all this, so it works together with GitHub.</p>
<p>GitHub is a web-based platform that allows you to host source code in what is referred to as a repository. Together with Git, GitHub offers multiple beneficial features to developers – but the most important one, apart from collaboration, is that it offers a visual interface for managing the repositories. This makes it easier to track issues, merge changes and so on.</p>
<p>You can learn more about the basics of Git and GitHub in this <a target="_blank" href="https://www.freecodecamp.org/news/git-and-github-the-basics/">guide</a>.</p>
<p>Moving forward, just like with any other software, to get started using Git you'll first need to download and set it up. But first make sure that you already have a GitHub account created. If not, you can visit <a target="_blank" href="https://github.com/">github.com</a> and create one, then proceed with the steps below afterwards.</p>
<ul>
<li><p>Step 1: Download Git from the <a target="_blank" href="https://git-scm.com/downloads">official site</a>.</p>
</li>
<li><p>Step 2: Run the executable file to install Git locally. If you are on another OS than Windows, be sure to check the specific commands you can use to install Git from the official site.</p>
</li>
<li><p>Step 3: Configure Git with your details, including your username and email. For that you will need to open the Git terminal and run the commands below:</p>
</li>
</ul>
<pre><code class="lang-python">git config --<span class="hljs-keyword">global</span> user.name <span class="hljs-string">"Your name here"</span>
git config --<span class="hljs-keyword">global</span> user.email <span class="hljs-string">"your_email@example.com"</span>
</code></pre>
<p>For some extra customization, you can run the commands below. The first one will add some color to the output, and the second one will tell Git to use emacs.</p>
<pre><code class="lang-python">git config --<span class="hljs-keyword">global</span> color.ui true
git config --<span class="hljs-keyword">global</span> core.editor emacs
</code></pre>
<p>Now you should be ready to use Git. If you want to learn more and dive in deeper, here's a helpful <a target="_blank" href="https://www.freecodecamp.org/news/how-to-use-git-best-practices-for-beginners/">beginner-friendly Git resource</a> for you.</p>
<p>We will be discussing the most common Git commands later on in the upcoming sections.</p>
<h3 id="heading-how-to-fork-clone-and-set-up-projects">How to fork, clone, and set up projects</h3>
<p>Now we'll cover some of the most important parts of using Git.</p>
<p>First, what is <strong>forking</strong>? Well, it allows you to make a personal copy of a project's repository to your GitHub account. This step is important mostly when you want to make contribution to a project that you don't have direct access to.</p>
<p>In order to fork a repo, on the GitHub repository page, click <code>Fork</code>, usually on the top right corner.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/fork-repo-1.png" alt="fork-repo-1" width="600" height="400" loading="lazy"></p>
<p>This will create a copy of the repository under your account, changing the URL of the project to:</p>
<p><code>https://github.com/&lt;your-user-name&gt;/projectname</code></p>
<p><strong>Cloning</strong> allows you to download a copy of the already forked repo to your own local machine. In order for you to perform this step, you must have Git installed locally in your machine. If you haven't done this yet, check out the <a class="post-section-overview" href="#heading-version-control-systems-1">Version control systems</a> section above.</p>
<p>First, you will need to navigate to your account and locate the forked repo. Then copy the URL directly from the browser or click the <code>Code</code> button to copy the URL. You'll have three option to choose from: HTTPS, SSH, and GitHub CLI. You can choose either of the first two options.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/clone-repo.png" alt="clone-repo" width="600" height="400" loading="lazy"></p>
<p>Next, in your local machine, open the terminal and run this command:</p>
<p><code>git clone https://github.com/&lt;your-user-name&gt;/&lt;projectname&gt;</code></p>
<p>Be sure to navigate to where you need the project to be copied to, for example Downloads, Desktop, and so on:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/git-clone.jpg" alt="git-clone" width="600" height="400" loading="lazy"></p>
<p>Alternatively, you can opt to use the GitHub Desktop application to perform all the above steps. But first you will need to have it <a target="_blank" href="https://desktop.github.com/">installed</a> and fully configured.</p>
<p>Next, instead of copying the URL and pasting it on your terminal, select the option that says <code>Open with GitHub Desktop</code>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/github-desktop.png" alt="github-desktop" width="600" height="400" loading="lazy"></p>
<p>Now you'll need to know how to <strong>set up the project locally</strong>. Navigate to the project directory using the terminal and be sure to install dependencies if there are any that are listed.</p>
<p>To check if everything is set up correctly, run the project locally and ensure that it works as expected.</p>
<h2 id="heading-understanding-project-structure-and-workflow">Understanding Project Structure and Workflow</h2>
<p>Open-source projects come in various shapes and sizes, but what's common among them all is the structure and workflow. By having a clear understanding of the development process, it will make your contributing process easier.</p>
<h3 id="heading-overview-of-a-typical-open-source-project-structure">Overview of a Typical Open-Source Project Structure</h3>
<p>A typical open-source project will have the following people associated with it:</p>
<ul>
<li><p><strong>Author</strong> - Also referred to as Owner. Represents the person who created the project. They have the power to assign new roles to other members to help with the project's maintenance.</p>
</li>
<li><p><strong>Maintainers</strong> - They are responsible for driving the vision and goals of the project. They're usually responsible for the direction of the project and are committed to improving it.</p>
</li>
<li><p><strong>Contributors</strong> - This represents people like you who add/make changes to the project in one way or another. They follow the same code review process, are subject to the same requirements on code style, and so on.</p>
</li>
<li><p><strong>Community Members/Users</strong> - These valuable members of the community can provide feedback about features, bug reports, and more.</p>
</li>
</ul>
<p>In addition the different roles and people, the structure will usually look like this:</p>
<ul>
<li><p>The <strong>Root Directory</strong> will consist of important project files, such as the README, license information, and configuration files.</p>
</li>
<li><p>The <strong>Source Code Directory</strong> houses the main source code of the project. It can be organized by either libraries, modules or components.</p>
</li>
<li><p>The <strong>Documentation Directory</strong> contains user manuals, guides for any APIs to help users and contributors understand the project.</p>
</li>
<li><p>The <strong>Configuration Files</strong> contain files with instructions on how to setup the project's build process, dependencies and other helpful configurations.</p>
</li>
<li><p>The <strong>Assets Directory</strong> contains no-code files like images and other templates used by the project.</p>
</li>
<li><p>The <strong>Scripts Directory</strong> contains automation tools that the project might need.</p>
</li>
</ul>
<p>Below is a section of the freeCodeCamp repository workflow with most of the files listed above:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/workflow-structure.png" alt="workflow-structure" width="600" height="400" loading="lazy"></p>
<h2 id="heading-how-to-make-your-first-contribution">How to Make Your First Contribution</h2>
<p>Before making your first contribution, make sure that you have chosen beginner friendly issues or task to work on. To help you find good beginner friendly issues/tasks, here are a few tips:</p>
<ul>
<li><p>Browse through project issues trackers on platforms such as GitHub. During the search, look for projects labeled "beginner-friendly," "good first issue," or "help wanted." This are usually designed for beginners. <a target="_blank" href="https://www.freecodecamp.org/news/how-to-find-good-first-issues-on-github/">Here's a guide</a> that shares more info on this topic.</p>
</li>
<li><p>Make sure you understand the issue's description before you begin working on the task. This will help you choose a task that aligns with your skills and interests.</p>
</li>
<li><p>If you are completely new with no prior knowledge, check for projects that offer mentorships to beginners.</p>
</li>
</ul>
<p>For a detailed guide on <a target="_blank" href="https://www.freecodecamp.org/news/github-search-tips/">how to search for issues and repos on GitHub, check out this guide</a>.</p>
<h3 id="heading-step-by-step-guide-to-making-a-contribution">Step-by-Step Guide to Making a Contribution</h3>
<p>Now that you know how to search for a beginner friendly project – and assuming you have already gotten one that aligns with your skills – the next step is making your contributions.</p>
<p>For a demo, I will be making a non-code contribution (and I'll discuss more about this later).</p>
<ul>
<li><p>Step 1: Fork the repository</p>
</li>
<li><p>Step 2: Clone the repo onto your local machine.</p>
</li>
<li><p>Step 3: Create a new branch</p>
</li>
</ul>
<p>To create a branch, run the below command and remember to give your branch a descriptive name:</p>
<p><code>git checkout -b descriptive name</code></p>
<p>This will create the branch and switch to it automatically.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/branch-name.jpg" alt="branch-name" width="600" height="400" loading="lazy"></p>
<ul>
<li><p>Step 4: Make the necessary changes – this can be fixing typos, fixing a bug, and so on – it all depends with the issue you have chosen.</p>
</li>
<li><p>Step 5: After making your changes, it's time to add the new changes into the main branch. You can see all changes made by running: <code>git status</code></p>
</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/git-status.jpg" alt="git-status" width="600" height="400" loading="lazy"></p>
<p>You can choose to add each file modified individually using <code>git add file-name</code> or you can add the modified files all at once using: <code>git add *</code></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/git-add.jpg" alt="git-add" width="600" height="400" loading="lazy"></p>
<p>You will notice that the changes are no longer highlighted in red but instead in green. This means that they are ready to be committed.</p>
<p>To make a commit, we move on to the next step which is adding a commit message. This basically explains the changes we have made: <code>git commit -m "&lt;message here&gt;"</code>.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/commit-message.jpg" alt="commit-message" width="600" height="400" loading="lazy"></p>
<ul>
<li>Step 6: We need to regularly sync the forked repo with the original repo. This incorporates all the changes made by other contributors. To do this, run the commands below one after the other:</li>
</ul>
<pre><code class="lang-python">git fetch upstream
git rebase upstream/main
</code></pre>
<ul>
<li>Step 7: Push the changes to GitHub Now that everything is set, it's time to let our maintainer know what we have added. You do this by pushing the changes with this command: <code>git push origin descriptive-branch-name</code>.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/git-push.jpg" alt="git-push" width="600" height="400" loading="lazy"></p>
<ul>
<li>Step 8: This is the last step, where we submit a PR. For this step you will need to go back to GitHub under the repo you had forked earlier. You should be able to see a pop-up with a button saying <code>Compare &amp; pull request</code> – click on it.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/pull-request.png" alt="pull-request" width="600" height="400" loading="lazy"></p>
<p>Clicking this will allow you to give your PR a name, add a description of what you have done, mark the checklist (if there is one) to ensure that you have fulfilled all the requirements, and then finally clicking on the <code>Create pull request</code> button which is slightly below the description box.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/08/create-pr.png" alt="create-pr" width="600" height="400" loading="lazy"></p>
<p>Then the maintainer will merge all your changes into the master branch of this project (unless they need you to make updates first). You will get a notification email once the changes have been merged.</p>
<h2 id="heading-collaboration-within-the-community">Collaboration Within the Community</h2>
<p>Being part of a new community or environment in any kind of setting isn’t easy – and more so for people who refer to themselves as introverts.</p>
<p>When it comes to open-source communities, newcomers often face various challenges that can deter them from feeling comfortable and affect their contributions.</p>
<p>The first step in fixing a problem is to identify it. This will bring you closer to finding a solution. Some of the most common challenges faced by newcomers in OS communities include:</p>
<ul>
<li><p>Feeling overwhelmed/intimidated by the expertise of other community members.</p>
</li>
<li><p>Struggling to understand the project structure and codebase.</p>
</li>
<li><p>Lack of clear understanding of the contribution guidelines.</p>
</li>
<li><p>Encountering an unwelcoming community.</p>
</li>
<li><p>Lack of recognition and appreciation of contributions.</p>
</li>
<li><p>Struggling to find tasks that matches your skills/expertise</p>
</li>
</ul>
<p>By addressing the above challenges, we will be one step closer to creating supportive communities which are comfortable for all. As we know collaboration is key for the success of any open-source project and community engagement can play a major role on your career while at the same time shaping you to become a better contributor.</p>
<p>There are different ways to address these common challenges while at the same time engaging with the community to ensure the project's success:</p>
<ol>
<li><p>Participating in discussions and forums</p>
</li>
<li><p>Giving and receiving feedback on contributions</p>
</li>
<li><p>Learning from the experienced contributors</p>
</li>
<li><p>Mentoring other contributors and taking part in pair programming.</p>
</li>
<li><p>Attending and being part of community events.</p>
</li>
</ol>
<p>In addition to this remember to be patient, stay humble, listen actively, celebrate others, and take part in discussions about the future of the project.</p>
<h2 id="heading-beyond-code-non-coding-contributions">Beyond Code: Non-Coding Contributions</h2>
<p>The good thing about opens-source projects is that they can often accommodate people with all kinds of skillsets. Contributing extends beyond just writing code. Non-coding skills are also important to the success of the open-source projects.</p>
<p>If you are looking for different ways to get involved in open-source and don't have coding skills, this section is for you.</p>
<h3 id="heading-update-the-documentation">Update the Documentation</h3>
<p>Good documentation is the backbone of any successful project, not only in open-source but even in the real-world products. Clear and detailed documentation will help users and developers understand the project easily.</p>
<p>Some ways you can contribute to the documentation include:</p>
<ul>
<li><p><strong>Writing tutorials</strong> - You can opt to write step-by-step tutorials that will guide users through steps such as installation, setup, usage and troubleshooting.</p>
</li>
<li><p><strong>API Documentation</strong> - Document the project's APIs, and provide code examples for the developers who might want to integrate the project.</p>
</li>
<li><p><strong>User guides</strong> - Write user-friendly guides that break down the complex concepts in simple and easy to understand sections.</p>
</li>
</ul>
<h3 id="heading-contribute-to-the-design-and-user-experience-ux">Contribute to the Design and User Experience (UX)</h3>
<p>Any project that is made for an end user will greatly benefit from a well-designed user interface. If you have some skills in the design field, you can contribute by:</p>
<ul>
<li><p><strong>Improving UI/UX</strong> - improve the project's look by suggesting more user-friendly designs and creating mockups for the same.</p>
</li>
<li><p><strong>Creating Icons and Graphics</strong> - design logos, icons, banners and other visual assets that will help promote the project's branding.</p>
</li>
<li><p><strong>User Testing</strong> - take part in testing the designs and provide feedback.</p>
</li>
</ul>
<h3 id="heading-help-with-translation-and-localization">Help with Translation and Localization</h3>
<p>Many projects are trying to reach a global audience, and as a native speaker of your language you can help with this.</p>
<p>Contribution by translation and localization ensures that the projects can easily be accessible by people from different backgrounds all around the world. As a contributor you can help by:</p>
<ul>
<li><p><strong>Translating Content</strong> - you can translate the documentation, user interface, and any other relevant content.</p>
</li>
<li><p><strong>Cultural Adaptation</strong> - whenever you translate a project, be sure that the content is relevant to the culture and aligns with local contexts.</p>
</li>
</ul>
<h3 id="heading-participate-in-quality-assurance-and-testing">Participate in Quality Assurance and Testing</h3>
<p>It may not seem like much, but testing is crucial for maintaining any good open-source project. The good thing about testing is that even though you are not a developer you can contribute by:</p>
<ul>
<li><p><strong>User Testing</strong> - this involves testing the projects under different use cases and giving feedback on any encountered bugs, glitches, and issues. This feedback will help make the project better for the next development face.</p>
</li>
<li><p><strong>Beta Testing</strong> - this involves being part of testing products before they are officially released. Help identify any issues that the end user might encounter.</p>
</li>
</ul>
<h3 id="heading-engage-with-the-community">Engage with the Community</h3>
<p>Having a strong community creates a safe space where contributors can focus on major things like improving the software's quality and ensuring the long-term sustainability of the project. You can contribute by:</p>
<ul>
<li><p><strong>Moderation</strong> - you can offer to moderate discussion forums, chat rooms, and community platforms to ensure a positive and inclusive environment.</p>
</li>
<li><p><strong>Answering Questions</strong> - you can assist other community members by answering any questions that they may have.</p>
</li>
</ul>
<h3 id="heading-do-marketing-and-outreach">Do Marketing and Outreach</h3>
<p>The more an open source project is visible to the community, the better - and this includes visibility on social platforms. If you have marketing or communication skills you can contribute by:</p>
<ul>
<li><p>Promoting the projects on social media platforms.</p>
</li>
<li><p>Writing tutorials and articles that highlight features offered by different projects, along with their importances and use cases.</p>
</li>
</ul>
<h3 id="heading-help-with-fundraising-and-donations">Help with Fundraising and Donations</h3>
<p>Lack of adequate funds to support the project's growth and sustainability may lead to its collapse before you even know it. A good way to address such a problem is by:</p>
<ul>
<li><p><strong>Fundraising initiatives</strong> - organizing fundraising campaigns to support the project financially.</p>
</li>
<li><p><strong>Sponsorship outreach</strong> - applying for grants, seeking sponsorship, and joining incubator programs.</p>
</li>
</ul>
<h2 id="heading-best-practices-for-quality-contributions">Best Practices for Quality Contributions</h2>
<p>Contributing to open-source is not just about writing code, it's about creating high-quality and valuable contributions that will make the project easily accessible to others.</p>
<p>Here are some best practices that will help you contribute code that is clean, easy to maintain, and follows the industry standards.</p>
<h3 id="heading-write-clean-and-maintainable-code">Write Clean and Maintainable Code</h3>
<p><a target="_blank" href="https://www.freecodecamp.org/news/how-to-write-clean-code/">Clean code</a> can be described as code that is easy to read, understand, and maintain.</p>
<p>By writing clean code you will not only make it easier for others to read through but also for your future self.</p>
<p>When trying to write clean code, here are some key best practices:</p>
<ul>
<li><p>Use meaningful variable, function, and class names.</p>
</li>
<li><p>Break down the code into smaller managable sections.</p>
</li>
<li><p>Make use of comments to provide additional context.</p>
</li>
<li><p>Maintain consistency in your coding style.</p>
</li>
<li><p>Don't Repeat Yourself (DRY)</p>
</li>
</ul>
<h3 id="heading-test-and-document-your-code">Test and Document Your Code</h3>
<ul>
<li><p>Always write unit tests, integration tests, and end-to-end tests to ensure that the code works correctly.</p>
</li>
<li><p>Remember to always document your development progress. This includes the code's purpose, usage instruction, and so on.</p>
</li>
</ul>
<h2 id="heading-how-to-handle-challenges">How to Handle Challenges</h2>
<p>Being a new person in any field, you are bound to encounter different challenges that may make you question your desire to contribute.</p>
<p>But you can also see the challenges as stepping stones rather than roadblocks, preparing you to be a better contributor.</p>
<h3 id="heading-how-to-handle-rejection-and-criticism">How to handle rejection and criticism</h3>
<p>Rejection and criticism can be tough to handle, especially for beginners. Not everyone in a community can be as welcoming as we'd like, but just remember – this experience is still an opportunity of focus and improvement.</p>
<p>In case you encounter rejection and criticism, here are a few things to help you overcome them:</p>
<ul>
<li><p><strong>Maintain a growth mindset</strong> - approach the rejection with an open mind and view it as a chance for you to learn and improve on your skills.</p>
</li>
<li><p><strong>Ask for feedback</strong> - in a case you have made a contribution and it has been rejected, always ask for feedback. This will help guide your future contributions while at the same time improving your skills</p>
</li>
<li><p><strong>Learn from others</strong> - before making your contributions, take time to learn from what other experienced contributors are doing. This can help you know how to structure your code, write documentation, and how to address issues. In return you will be on the safe side while making your contributions.</p>
</li>
<li><p><strong>Be persistent</strong> - use rejection as a motivation to refine your work and resubmit again.</p>
</li>
</ul>
<h3 id="heading-how-to-ask-for-help">How to ask for help</h3>
<p>Many beginners, not only in the open-source world but in other fields as well, may be hesitant to ask for help. This is often because they don't want to appear to be inexperienced.</p>
<p>If you find yourself feeling this way, you may be forgetting that you're new to the field, and asking for assistance is part of the learning process. Even if you're a more seasoned contributor, you may still feel insecure at times (imposter syndrome, anyone?) - and this is ok. Everyone has their doubts at times. Just keep pushing forward.</p>
<p>As a beginner in open-source, to ensure that you receive the help you need, here are some tips:</p>
<ul>
<li><p><strong>Do your research</strong> - attempt to solve the issue by yourself first before seeking help. This demonstrates your commitment to learning and problem solving skills.</p>
</li>
<li><p><strong>Be specific</strong> - provide detailed info about the problem you are facing. This can include mentioning the steps you have taken so far, the result you have gotten, highlighting the errors you faced, and so on. The more detailed the question, the easier it is for others to help you.</p>
</li>
</ul>
<h3 id="heading-strategies-for-overcoming-common-challenges">Strategies for Overcoming Common Challenges</h3>
<ol>
<li><p>Time management - balancing between open-source and personal work can be challenging sometimes. Be sure to set realistic goals and avoid overcommitting.</p>
</li>
<li><p>Impostor syndrome - this is where you feel inadequate despite there being solid evidence of your skills. Remember that we all begin somewhere – just try to appreciate your learning journey and focus on your progress.</p>
</li>
<li><p>Large code bases can be overwhelming to beginners. As a good practice, start small and work your way up as you gain more confidence and familiarize yourself with the codebase.</p>
</li>
<li><p>Burnout prevention - prioritize self-care, take breaks when necessary, and always remember that making small steps is more valuable than overwhelming yourself with a task.</p>
</li>
</ol>
<h2 id="heading-how-to-showcase-your-open-source-contributions">How to Showcase Your Open-Source Contributions</h2>
<p>Just like in any other field of work, you need to market yourself. And one of the best ways to do that is by showcasing your projects and contributions online. It's time to shine a spotlight on your work.</p>
<p>In return, this may attract potential employers, collaborators, and give you recognition in the broader tech ecosystem.</p>
<h3 id="heading-build-an-online-portfolioprofile">Build an online portfolio/profile</h3>
<p>The most common way to showcase any form of work online is through personal portfolio and here is how you can achieve this to showcase your open-source contributions:</p>
<p>Begin by selecting a platform that best works for you. This might include GitHub pages, your personal website, and platforms like Behance or Dribbble for designer-related projects.</p>
<p>Now that you have a platform, organize you your work in categories including a brief description, role played, and any challangages you might have encountered.</p>
<p>Remember to add code samples for different projects you have wokred on and a brief explanation of what the project/code does.</p>
<p>Finally, add a short bio that highlights your passion for open source and technology. Make it engaging and relatable.</p>
<h3 id="heading-highlight-your-contributions-on-your-resumesocial-media-platforms">Highlight your contributions on your résumé/social media platforms</h3>
<p>This is mostly helpful when potential employers are reviewing your résumé or GitHub/LinkedIn profile. Your contributions may set you apart from other applicants.</p>
<p>Here is how you can utilize this to stand out:</p>
<ul>
<li><p>Have a dedicated section where you can list all your open-source contributions and a brief description of your involvement.</p>
</li>
<li><p>Quantify the impact that you contribution played to the success of the project.</p>
</li>
<li><p>Highlight the skills you gained through contributing to open-source.</p>
</li>
<li><p>If you have an online profile, be sure to include a link of it on your resume, this will help recruiters explore your contribution in depth.</p>
</li>
</ul>
<h3 id="heading-networking">Networking</h3>
<p>Networking can open doors and connect you with multiple opportunities.</p>
<p>Here is how you can leverage your open-source experience for networking purposes:</p>
<ul>
<li><p>Talk about your contributions to open-source projects. This can be through sharing insights, asking questions, and so on.</p>
</li>
<li><p>Attend meetups and conferences related to technologies you have worked with or have experince in.</p>
</li>
<li><p>Connect with fellow contributors on platforms such as GitHub.</p>
</li>
<li><p>Take part in hackathons, workshops, mentorships and collaborative coding events with people os same interest.</p>
</li>
<li><p>Share your thought by writing tutorials about your open-source experiences, challenges you've overcome, and lessons you've learned.</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>As you come to the end of this guide, take a moment to reflect on the journey. You have gained valuable insights while at the same time discovering how impactful you contributions can be no matter how small they are.</p>
<p>If you have contributed to open-source before, think back to when you first began your open-source journey. Remember the joy you felt when your first PR was merged, the satisfaction you had when you solved that bug, wrote that line of code, resolved that issue, or updated that documentation.</p>
<p>All this has left a mark on the projects you have worked on. Be proud of yourself 😊.</p>
<p>Remember that the open-source community thrives on diversity, and every contribution, no matter how small, adds value. By participating in open source, you're contributing to a global movement that values transparency, cooperation, and the free exchange of knowledge.</p>
<p>Here's to your continued success in open-source contributions, learning, and making a difference.</p>
<p>Happy coding! 🚀🌍</p>
<h2 id="heading-additional-resources">Additional Resources</h2>
<ul>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/open-source-projects-every-dev-should-know/">Open Source Projects Every Developer Should Know About</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/automate-open-source-projects-with-github-actions/">How to Use GitHub Actions to Automate Open-Source Projects</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/github-search-tips/">GitHub Search Tips – How to Search Issues, Repos, and More Effectively on GitHub</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/how-to-write-a-good-readme-file/">How to Write a Good README File for Your GitHub Project</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/developer-communities-to-join-to-grow-your-career/">Developer Communities to Join to Help You Grow Your Tech Career</a></p>
</li>
<li><p><a target="_blank" href="https://www.freecodecamp.org/news/how-to-contribute-to-open-source-projects-beginners-guide/">How to Contribute to Open Source Projects – A Beginner's Guide</a></p>
</li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git Pull Remote Branch – How To Fetch Remote Branches in Git ]]>
                </title>
                <description>
                    <![CDATA[ Git is a popular version control system that's used by millions of developers to manage their codebases. One of the most powerful features of Git is its ability to work with remote repositories. When working on a project with multiple collaborators, ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/git-pull-remote-branch-how-to-fetch-remote-branches-in-git/</link>
                <guid isPermaLink="false">66d45f8038f2dc3808b790d3</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                    <category>
                        <![CDATA[ version control ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Joel Olawanle ]]>
                </dc:creator>
                <pubDate>Thu, 04 May 2023 14:27:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/05/cover-template--12-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Git is a popular version control system that's used by millions of developers to manage their codebases. One of the most powerful features of <a target="_blank" href="https://kinsta.com/knowledgebase/install-git/">Git</a> is its ability to work with remote repositories.</p>
<p>When working on a project with multiple collaborators, you must be able to fetch changes from the remote repository and merge them with your local repository. This article will teach you how to fetch remote branches in Git.</p>
<h2 id="heading-what-is-a-remote-branch">What is a Remote Branch?</h2>
<p>Before diving into how to fetch remote branches, let's define a remote branch.</p>
<p>A remote branch is a branch that exists on a remote repository, such as <a target="_blank" href="https://kinsta.com/knowledgebase/git-vs-github/">GitHub</a>, GitLab, or Bitbucket.</p>
<p>When you clone a repository, Git automatically creates a "<strong>remote</strong>" that points to the original repository. You can then use this remote to fetch changes made by other collaborators on the project.</p>
<h2 id="heading-how-to-fetch-remote-branches-in-git">How to Fetch Remote Branches in Git</h2>
<p>When you clone a repository, you can access all its remote branches. You can verify this using the <code>git branch</code> command alongside the <code>-r</code> option:</p>
<pre><code class="lang-bash">git branch -r
</code></pre>
<p><img src="https://paper-attachments.dropboxusercontent.com/s_4A23CAD3B56D51AD7DA85730E428F7A2E6F6289B6BB197975176BE233B3F0EA9_1682869187912_image.png" alt="s_4A23CAD3B56D51AD7DA85730E428F7A2E6F6289B6BB197975176BE233B3F0EA9_1682869187912_image" width="2074" height="188" loading="lazy"></p>
<p>You can checkout to any of these branches using the <code>git checkout</code> command.</p>
<p>When you are working with a group of people, one contributor creates a new branch remotely. You may need to fetch this remote branch into your project. You can do this with the <code>git fetch</code> command.</p>
<p>The <code>git fetch</code> command goes out to your remote project and pulls down all the data from that remote project that you don’t have yet. After you do this, you should have references to all the branches from that remote, which you can merge in or inspect at any time.</p>
<pre><code class="lang-bash">git fetch
</code></pre>
<p>You can attach the remote repository name, which by default is <code>origin</code>:</p>
<pre><code class="lang-bash">git fetch origin
</code></pre>
<p>It is important to understand that when you use the <code>git fetch</code> command, it only downloads the changes made in the remote repository to your local repository without automatically merging them with your work or modifying what you are currently working on. You will need to merge the changes manually when you are ready.</p>
<p>To access the fetched content, you need to use the <code>git checkout</code> command. This ensures that fetching is a safe way to review commits before integrating them into your local repository.</p>
<p>If you want to fetch remote branches and merge them with your work or modify your current work, you can use the <code>git pull</code> command. To achieve this, use the following command:</p>
<pre><code class="lang-bash">git pull --all
</code></pre>
<p>You can then run the <code>git branch -r</code> to verify if the remote repository has been added.</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>Fetching remote branches in Git is a crucial aspect of collaboration in a development environment.</p>
<p>By following the steps outlined in this article, you can fetch changes made by other collaborators on remote branches and merge them with your local repository. This enables you to work on different branches of a Git repository and collaborate effectively with other developers.</p>
<p>Embark on a journey of learning! <a target="_blank" href="https://joelolawanle.com/contents">Browse 200+ expert articles on web development</a>. Check out <a target="_blank" href="https://joelolawanle.com/posts">my blog</a> for more captivating content from me.</p>
<p>Have fun coding!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Developer Interview Prep – How to Use a Collaborative Approach to Problem-Solving ]]>
                </title>
                <description>
                    <![CDATA[ By Alberto Gonzalez Rosales No matter how experienced of a developer you are, being interviewed for a new job is always stressful. This is certainly true from my own experience.  In my case, I have been working professionally as a Software Developer ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/collaborative-problem-solving-with-python/</link>
                <guid isPermaLink="false">66d45d5b55db48792eed3f03</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ interview questions ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Interview tips ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 19 Apr 2023 21:14:37 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/04/michal-czyz-ALM7RNZuDH8-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Alberto Gonzalez Rosales</p>
<p>No matter how experienced of a developer you are, being interviewed for a new job is always stressful. This is certainly true from my own experience. </p>
<p>In my case, I have been working professionally as a Software Developer for two and a half years, and I've had to face developer interviews five times already.</p>
<p>I have seen people focus too much on learning specific algorithmic problems, or training in online platforms specialized in interview challenges. But there is another side to interviews which I think is as important – and people pay less attention to it.</p>
<p>So, if you want to know how I think you should focus your training for interviews, grab a cup of coffee and get comfortable.</p>
<p>It's going to be a bit of a ride ride (but don't worry – Python examples included!).</p>
<h2 id="heading-heres-what-well-cover">Here's what we'll cover:</h2>
<ol>
<li><a class="post-section-overview" href="#heading-do-algorithms-and-data-structures-matter-for-interviews">Do algorithms and data structures matter for interviews?</a></li>
<li><a class="post-section-overview" href="#heading-focus-on-a-collaborative-approach">Focus on a collaborative approach</a></li>
<li><a class="post-section-overview" href="#heading-try-doing-a-mock-interview">Try doing a mock interview</a><br>– <a class="post-section-overview" href="#heading-the-initial-example-interview-problem">The initial example interview problem</a><br>– <a class="post-section-overview" href="#heading-the-second-example-interview-problem">The second example interview problem</a><br>– <a class="post-section-overview" href="#heading-the-hardest-example-interview-problem">The hardest example interview problem</a></li>
<li><a class="post-section-overview" href="#heading-final-words">Final words</a></li>
</ol>
<p>Let's dive in.</p>
<h2 id="heading-do-algorithms-and-data-structures-matter-for-interviews"><strong>Do Algorithms and Data Structures Matter for Interviews?</strong></h2>
<p>The short answer is <strong>Yes</strong>.</p>
<p>Knowing about Data Structures and Algorithms will often help you get a job. Also, the benefits of having a solid algorithmic background include the capacity to make better decisions when faced with a challenging problem.</p>
<p>In real life, algorithmic problems won't appear like the statements in the academic exercises you might study. Still, the more trained you are the most likely you are to be able to recognize an application of a Balanced Binary Tree or a Shortest Path algorithm in disguise.</p>
<p>With this in mind, I would recommend not training Data Structures and Algorithms solely for the interviews that you want to excel at. The design of algorithms and how to use the right data structures are topics beautiful enough to be studied just for the pleasure of knowing.</p>
<p>The scope of an interview is very limited. Instead, focus on the problem-solving part of the issue. Try to understand how to use an algorithm (or variations of it) for similar tasks. Study all the variants, and learn to recognize them in different situations. This will help you face new tasks with an open mind.</p>
<p>Also, don't memorize solutions. It won't take you anywhere. It is very easy for an experienced developer to ask the right questions that will put you on display if you only train for very specific topics.</p>
<p>Take a problem and try to solve it using different methods. Try to solve harder problems every time. Get out of your comfort zone.</p>
<p>It will pay off.</p>
<h2 id="heading-focus-on-a-collaborative-approach"><strong>Focus on a Collaborative Approach</strong></h2>
<p>Most people train for their interviews on websites like <a target="_blank" href="https://leetcode.com/">Leetcode</a>. There is no problem with that. These websites are good for training your problem-solving skills.</p>
<p>I have been participating in Competitive Programming contests for the last eight years at least, and I have always benefited from these online resources.</p>
<p>But there is one thing that's hard to understand for most software engineers wanting to perform well in an interview. They don't train for the most important aspect of software development: <strong>Collaboration</strong>.</p>
<p>Usually, when you are faced with a problem in an online platform, it comes with some constraints on the maximum values for some input. It also might have some time and memory limits that require you to adjust your solutions to be more or less efficient. But this is not how it will be in real life.</p>
<p>It is not obvious how to map these constraints to real-life scenarios. They usually come in the form of very specific requests from a client, or very specific characteristics of the team.</p>
<p>In a real project, the team will <strong>collaborate</strong> to determine what these constraints will be. You have to analyze your use cases, the time you have for the task, who is the final user, how many people will be working on it, and so on...</p>
<p>After a series of discussions, you will reach a consensus and finally start implementing a solution that suits your needs. And this solution doesn't even have to be the more efficient in some cases, but the fastest to implement, for example.</p>
<p>This is what interviewers want to see from candidates during the interviews as well.</p>
<p>You don't jump straight to implementing the best solution you know for the problem you are facing. Instead, you should use your interviewers as a valuable resource, treat them as if they were your teammates (in the end, you want them to be). Ask questions about how the team prefers the solution for the problem to be implemented.</p>
<p>This will lead to a very fruitful discussion where you can showcase your coding abilities and your collaborative skills. You could start proposing simple solutions and walk your interviewers through the process of how the solution can be improved using the best Aces up your sleeve.</p>
<p>As a final note on online training, I would recommend doing individual and team training. Use websites such as <a target="_blank" href="https://codeforces.com/">Codeforces</a> or <a target="_blank" href="https://atcoder.jp/">AtCoder</a>, which have a huge set of interesting (and challenging) problems, and try to compete against yourself every day.</p>
<p>Don't focus on your rating. I have done that before, and it only holds you back.</p>
<h2 id="heading-try-doing-a-mock-interview"><strong>Try Doing a Mock Interview</strong></h2>
<p>If you reached this point in the article, I would like to propose a little exercise. Let's have a mock interview where I will act as the interviewer. I will tell you how I think the candidate (you) should answer every question and perform each task.</p>
<p>Of course, we will focus only on the programming challenge part. Other aspects of interviews, such as talking about previous experiences, are also important, but we will try to cover that in another article.</p>
<p>So, if you feel ready enough, let's go!</p>
<h3 id="heading-the-initial-example-interview-problem">The Initial Example Interview Problem</h3>
<p>Let's start with the task that you will be solving. Keep in mind that if you and I are ever in this situation, I won't be using this same example, but of course, I will be using the same methodology 😉.</p>
<p>The statement of the problem is the following:</p>
<blockquote>
<p>"Given an integer number <code>X</code>, find out if it is a prime number."</p>
</blockquote>
<p>You might be tempted to go for the best solution you know to solve this problem. I think that this approach, as I explained before, isn't always correct.</p>
<p>Instead, what I would like to know are the different approaches to solving this problem. Also, I would like you to ask about the requirements for this task. Something like:</p>
<ul>
<li>Should we aim for performance or to solve it faster?</li>
<li>Should we make a solution that is easy to understand for other developers?</li>
</ul>
<p>Usually, some aspects to consider when creating the first solution for a problem are:</p>
<ul>
<li>Easy vs Hard: Should we make an easy-to-implement solution even if it is not perfect, or should we go for a more robust solution that will be difficult to implement?</li>
<li>Naïve vs Efficient: Should we deliver a working, naïve solution first and then a more efficient one, or should we go straight to efficient?</li>
</ul>
<p>Evaluate what your team wants to optimize for. Reach a consensus, and implement the agreed solution.</p>
<p>In my case, I would be glad if you proposed the easiest, fastest-to-implement, correct solution that you can think of and then guide me through the process of how to improve that solution. </p>
<p>An example of a very good initial solution to this problem is something like the following:</p>
<pre><code class="lang-python"><span class="hljs-comment"># naive.py</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">x: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">1</span>]:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, x):
        <span class="hljs-keyword">if</span> x % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
</code></pre>
<p>As you can see, this function is correct. Since a prime number is an integer only divisible by the number <code>1</code> and itself, it makes sense to iterate from <code>2</code> to <code>x - 1</code> looking for a divisor of <code>x</code>. If we find one, we can immediately return <code>False</code>. Otherwise, we return <code>True</code>. As edge cases, the numbers <code>0</code> and <code>1</code> are not prime by definition.</p>
<p>This is a good starting point!</p>
<p>Now, before diving into optimizing this method, you can discuss the style of the code. Is it Pythonic enough? Do we care about it? Is it readable?</p>
<p>All these questions might not seem important at first but, since we work as a team, they do matter. Having a coding style is important because it makes it easier for every team member to understand each other's code, and it will speed up reviews and refactoring. Also, the code is more often read than written, so readability counts!</p>
<p>You might be tempted to show off your Python skills and rewrite the previous function as follows:</p>
<pre><code class="lang-python"><span class="hljs-comment"># pythonic_naive.py</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">x: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span> <span class="hljs-keyword">if</span> x <span class="hljs-keyword">in</span> {<span class="hljs-number">0</span>, <span class="hljs-number">1</span>} <span class="hljs-keyword">else</span> all(x % i != <span class="hljs-number">0</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, x))
</code></pre>
<p>I think this is a good, pythonic way to write this function. But, since the team is the most important thing here, this change should be discussed.</p>
<p>It might be the case that some team members are not so skilled in Python. Maybe, in this case, we should optimize for readability instead and keep the function as we first wrote it.</p>
<p>A more interesting addition, before getting into performance, would be adding docstrings to the function. As I said before, this code is most likely to be read by your team members in the future. It is important, then, to make it easier for them (and your future self) to understand what this function is doing.</p>
<p>Maybe changing the function to something like the following will add more value:</p>
<pre><code class="lang-python"><span class="hljs-comment"># naive.py</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">x: int</span>) -&gt; bool:</span>
    <span class="hljs-string">"""This function takes an integer `x` as
    argument and checks whether is prime or not.

    Args:
        x (int): The integer number to test for primality.

    Returns:
        bool: True if the number `x` is prime, False otherwise.
    """</span>
    <span class="hljs-keyword">if</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">1</span>]:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, x):
        <span class="hljs-keyword">if</span> x % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
</code></pre>
<h4 id="heading-first-optimization">First Optimization</h4>
<p>Until this point, we have an initial solution that works. We have discussed important topics such as code styling, readability, and documentation for developers. These are all important things to consider when working as a team.</p>
<p>But we still haven't talked about the performance of the solution! So, it's probably time for that.</p>
<p>At this moment, you should probably bring up that this function can be implemented so it runs much faster. And now is when you showcase all that algorithmic knowledge inside you.</p>
<p>The previous solution has a time complexity of <code>O(x)</code>, where <code>x</code> is the input integer the function takes as an argument. This can be optimized to <code>O(sqrt(x))</code> with the following code:</p>
<pre><code class="lang-python"><span class="hljs-comment"># sqrt.py</span>

<span class="hljs-keyword">import</span> math

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">x: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">1</span>]:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">2</span>, int(math.sqrt(x)) + <span class="hljs-number">1</span>):
        <span class="hljs-keyword">if</span> x % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
</code></pre>
<p>Or even like this, without importing the <code>math</code> library:</p>
<pre><code class="lang-python"><span class="hljs-comment"># sqrt.py</span>

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_prime</span>(<span class="hljs-params">x: int</span>) -&gt; bool:</span>
    <span class="hljs-keyword">if</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">1</span>]:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
    i = <span class="hljs-number">2</span>
    <span class="hljs-keyword">while</span> i**<span class="hljs-number">2</span> &lt;= x:
        <span class="hljs-keyword">if</span> x % i == <span class="hljs-number">0</span>:
            <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
        i += <span class="hljs-number">1</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
</code></pre>
<p>I would be ok with either alternative.</p>
<p>I omitted the docstrings in the previous implementation for the sake of making the actual code changes clearer. But, it would be great to include the time complexity of the function in the documentation for developers. The more information you can give about your code, the better it will be for your team members and yourself.</p>
<p>You are doing great so far. Let's continue!</p>
<h3 id="heading-the-second-example-interview-problem">The Second Example Interview Problem</h3>
<p>So far, I have been able to evaluate that you have the necessary collaborative skills to take on easy tasks with the team. Now it's time to complicate things a little.</p>
<p>This is the statement of the second problem I would propose:</p>
<blockquote>
<p>"Given two integer numbers <code>L</code> and <code>R</code>, count how many prime integers are in the interval <code>[L, R]</code>."</p>
</blockquote>
<p>Once again, I would recommend discussing what priorities the team has set regarding this task. Start simple and walk through the process of improving an initial solution. Emphasize that premature optimization is not a good practice.</p>
<p>Also, discuss the possibility of using the solution that you implemented for the previous task to solve this one. It makes sense that if we have a function that tells whether an integer is a prime number or not we can use it for every number in a range.</p>
<p>And this is something that you will have to do in real life. Usually, when a new task shows up, the team should look into the maintained projects to see what can be reused to speed up the implementation process. If you don't do this, you might end up coding duplicated functionalities.</p>
<p>That being said, a good initial solution for this task could be something like this:</p>
<pre><code class="lang-python"><span class="hljs-comment"># range_primes.py</span>

<span class="hljs-keyword">from</span> sqrt <span class="hljs-keyword">import</span> is_prime

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">count_primes</span>(<span class="hljs-params">l: int, r: int</span>) -&gt; int:</span>
    primes = <span class="hljs-number">0</span>
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(l, r + <span class="hljs-number">1</span>):
        <span class="hljs-keyword">if</span> is_prime(i):
            primes += <span class="hljs-number">1</span>
    <span class="hljs-keyword">return</span> primes
</code></pre>
<p>This is perfectly fine, and you have shown that you can reuse previous functionality to build new ones. As in the first example, you might be tempted to show off your Python skills and write this function like this:</p>
<pre><code class="lang-python"><span class="hljs-comment"># range_primes.py</span>

<span class="hljs-keyword">from</span> sqrt <span class="hljs-keyword">import</span> is_prime

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">count_primes</span>(<span class="hljs-params">l: int, r: int</span>) -&gt; int:</span>
    <span class="hljs-keyword">return</span> sum(bool(is_prime(i)) <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(l, r + <span class="hljs-number">1</span>))
</code></pre>
<p>I recommend not going for this Pythonic implementation as your first option. Leave it for discussion, evaluate the readability of the code, and maybe analyze the differences in performance. Don't forget the docstrings!</p>
<p>The next section is when things get interesting. Keep reading. We are on the final step...</p>
<h3 id="heading-the-hardest-example-interview-problem">The Hardest Example Interview Problem</h3>
<p>Remember when I said previously that the constraints present in competitive programming websites are hard to map to real-life requirements?</p>
<p>Here is how I would present a difficult challenge for you to determine those constraints and implement the best solution that you can:</p>
<blockquote>
<p>"Suppose a client wants us to provide the functionality of calculating prime numbers in a range as a service. They want the focus to be on performance because they plan to use this service very often. How would you implement it?"</p>
</blockquote>
<p>If you have been practicing your algorithmic skills for interviews, you have probably solved problems similar to this one a few times. The main difference here is the change in context.</p>
<p>Instead of giving you precise instructions, numeric constraints, and input or output formats, I gave you a broader description of the task. And my goal here is the same as before: get you to interact with me as if we were teammates figuring out how to solve this problem from the little information we know.</p>
<p>Hopefully, after exchanging a few questions and answers, we can translate the previous, more ambiguous statement into something much more familiar:</p>
<blockquote>
<p>"Given a set of queries of the form <code>[L, R]</code>, answer, for each query, how many integer numbers inside that range are prime."</p>
</blockquote>
<p>And this makes sense because the client wanted to use this service very often, as stated in the description.</p>
<p>We want to focus on performance. That should be our main concern when implementing the solution. But still, the best way to get to an optimal solution is to start with a simple one, analyze if we meet our performance requirements, and keep improving gradually. Let's see the entire example.</p>
<p>We could start by using the solution we implemented in the previous step. Is it good enough?</p>
<p>Let's assume that the maximum range of numbers we will have as an argument to our function is <code>[1, 10^6]</code>. Also, realistically, let's assume that the number of queries our service will answer per minute is around <code>10^5</code>.</p>
<p>Our previous solution has a time complexity of <code>O(sqrt(n))</code> to determine if a number is a prime. If we were to do that for every number in the range, the complexity goes up to <code>O(n * sqrt(n))</code>. On top of that, if we do that for every query, we will end up with an even higher time complexity of <code>O(q * n * sqrt(n))</code>.</p>
<p>Substitute the previous variables with the highest possible values they can have, and you will get that this solution will take around <code>10^14</code> operations to answer all the queries. Assuming that a computer can perform around <code>10^8</code> elementary operations per second, it will take approximately <code>10^6</code> seconds to complete all of them.</p>
<blockquote>
<p>Note: Convert 10^6 seconds to days. You will be amazed 🤯.</p>
</blockquote>
<p>This solution is unfeasible if the goal is to prioritize the performance of our solution. Let's see how we can improve it.</p>
<p>At this point, what I would expect is for you to take out the best of the training that you've had on all those online platforms, and show me an impressive solution. This is the time to showcase all your analytical and algorithmic skills.</p>
<p>But only now, because I know that you are a team player.</p>
<h4 id="heading-the-final-solution">The Final Solution</h4>
<p>Since this is a mock interview, I am very interested in knowing your approach to solving this last problem efficiently. Let me know how you would implement the solution or share your code on GitHub – don't be shy.</p>
<p>I guarantee you one thing: if you can make it to this point in real interviews, probably it won't matter too much if you don't know the optimal solution to this problem. It doesn't mean that you shouldn't try your best to solve it, but rest assured that you have done a very good job already.</p>
<p>That's it! Now I want to see your code.</p>
<h2 id="heading-final-words"><strong>Final Words</strong></h2>
<p>In this article, I tried to summarize some of the aspects I consider to be the most important in coding interviews. I placed special emphasis on the collaborative part because I think most people underestimate how important this skill is. It is a must, especially if you want to work on a team with other developers.</p>
<p>I tried to guide you through a mock interview where I explained the thought process I would follow when faced with a standard coding task in an interview. I hope this exercise was useful and that it can help you in your next interview (as a candidate or as an interviewer).</p>
<p>Share your thoughts on this mock interview, and let's start a fruitful discussion.</p>
<p>See you soon! 👋</p>
<h2 id="heading-sources"><strong>Sources</strong></h2>
<ul>
<li>Code examples used in the article can be found <a target="_blank" href="https://github.com/albexl/a-problem-solving-oriented-approach">here</a>.</li>
<li>Hint for the last problem: implementation of the <a target="_blank" href="https://github.com/albexl/data-structures-for-teaching/blob/dev/algorithms/number_theory/eratosthenes_sieve.py">Sieve of Eratosthenes</a> algorithm.</li>
</ul>
<p>👋 Hello, I'm Alberto, Software Developer at <a target="_blank" href="https://dowhile.se/">doWhile</a>, Competitive Programmer, Teacher, and Fitness Enthusiast.</p>
<p>🧡 If you liked this article, consider sharing it.</p>
<p>🔗 <a target="_blank" href="https://bio.link/albexl">All links</a> | <a target="_blank" href="https://twitter.com/albe_xl">Twitter</a> | <a target="_blank" href="https://www.linkedin.com/in/albexl/">LinkedIn</a></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Practical Skills for Open Source Maintainers – How to Effectively Maintain OSS ]]>
                </title>
                <description>
                    <![CDATA[ Open source software is used by organizations large and small around the world. And it's become very popular in the tech industry. Many people want to be involved in this open side of tech, and luckily there are many different ways to contribute. Sti... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/practical-skills-for-open-source-maintainers/</link>
                <guid isPermaLink="false">66d4608d47a8245f78752aa1</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                    <category>
                        <![CDATA[ skills ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Njong Emy ]]>
                </dc:creator>
                <pubDate>Mon, 14 Nov 2022 14:51:31 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/11/Purple-Minimal-We-Are-Hiring-Twitter-Post--9-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Open source software is used by organizations large and small around the world. And it's become very popular in the tech industry.</p>
<p>Many people want to be involved in this open side of tech, and luckily there are many different ways to contribute.</p>
<p>Still, open source can be scary at first sight. My first official contribution was during Hacktoberfest 2021, and even after that, it took me while to really feel welcome.</p>
<p>The open source community helped a ton, and it's the route I would advise any new techie to take – get involved with the community around a project you care about.</p>
<p>In addition to being a contributor – making updates to open source code bases, updating documentation, and so on – you can also eventually become a project maintainer. Maintainers are responsible for the thrill you experience when your pull requests get merged.</p>
<p>As daunting as it is to become a first time contributor, it is also quite scary becoming a first time maintainer. So in this article, I'll discuss some of the soft skills project maintainers should cultivate to be successful.</p>
<h2 id="heading-a-little-background">A Little Background</h2>
<p>After open sourcing a project very close to my heart, I was lucky enough to gain some much needed experience. I also held a Twitter space with some amazing folks, and they had much to share as well. Hence, this article.</p>
<p>I won't say I am an expert, but to successfully scale an open source project, no matter how big or small, there are certain skills you need to have. And some of these I didn't pick up until after I had been a maintainer for a while.</p>
<h2 id="heading-skills-you-need-to-maintain-an-open-source-project">Skills You Need to Maintain an Open Source Project</h2>
<h3 id="heading-develop-good-time-management-skills">Develop Good Time Management Skills</h3>
<p>On day one of releasing the project, my email was flooded with GitHub notifications.</p>
<p>I was happy people where checking the project out, but it was too much for me to handle. I was putting off work to attend to issues, assigning, labeling, merging pull requests, fixing conflicts... It quickly became too much to manage. I needed to allocate time and set boundaries.</p>
<p>If you are running a big project, notifications are probably nothing new. If you're running the project alone (like I was at that point), it is way worse.</p>
<p>Putting aside specific time to attend to GitHub tasks was the best way out. It could be in the morning before work, or after work, or only on weekends, depending on what works for you and the project.</p>
<h3 id="heading-be-patient">Be Patient</h3>
<p>I hear people advise contributors that they shouldn't spam maintainers if those maintainers can't attend to their issues/pull requests in time. This level of understanding should go both ways.</p>
<p>Contributors also have lives. If a contributor claims an issue, it is important to give them time to actually submit a pull request. Open source is fun (we've agreed on that already, but just for emphasis), but some people can only contribute in their spare time.</p>
<p>If a claimed issue is taking too long to address, a subtle reminder is fine. Constantly reminding a contributor that they need to submit a pull request could be off-putting, and it isn't a good look for you or your project.</p>
<p>On some rather large projects, however, a time frame is given to contributors who claim issues. I've seen cases where a contributor has about seven days to raise a pull request. While this is understandable because of the fast paced nature of these projects, I personally feel that it's too much pressure, especially for new contributors.</p>
<h3 id="heading-be-empathetic">Be Empathetic</h3>
<p>For me, this is the most important skill. I can remember my first open source contribution. The joy I felt when my pull request got merged and the immense support from the community were wonderful.</p>
<p>Think of this when you merge pull requests. It could be the contributor's first time too. I try to close off pull requests with a message other than just 'LGTM'. It can be as simple as throwing in a bomb emoji, and thanking them.</p>
<p>People come back to a place where they feel welcome.</p>
<h3 id="heading-be-firm">Be Firm</h3>
<p>This can be hard, but it's also important. You won't merge every pull request that is opened, and that's a fact. But abruptly closing off a pull request without justification isn't exactly good practice either.</p>
<p>If a pull request is too big, or it doesn't add to the project like you would've wanted, it is okay to close it. But do not be afraid to kindly explain to the contributor why it can't be merged. Don't leave a pull request open forever because you feel guilty about closing it.</p>
<p>People can be more understanding than you think if you give them simple common courtesy.</p>
<h3 id="heading-work-on-communication-skills">Work on Communication Skills</h3>
<p>Collaboration is the basic foundation of open source as a whole. And to collaborate effectively, you need to be a good communicator.</p>
<p>Having people come in and work with you on your project is cool and all – but if you can't properly communicate with these people, you'll end up with a closed open source project (if that makes sense).</p>
<p>Collaboration doesn't have to be you spinning up some huge discord server for the project. It could just be you sharing messages in your code reviews.</p>
<p>If the comment sections under your issues are too small, then GitHub has a discussion tab for each repository. This is a great place to spin up new ideas and start some great connections.</p>
<p>You never know whom you might meet!</p>
<h3 id="heading-listen-and-learn">Listen and Learn</h3>
<p>After open sourcing my app, I've probably learnt more React than I would've if I was watching tutorials and building in private.</p>
<p>Smart people will come along and open your eyes to ideas that you couldn't have thought of on your own. My project has improved so much, mainly because I wasn't afraid to try out new things.</p>
<p>The community wants to help – so let them.</p>
<h3 id="heading-cultivate-a-community-spirit">Cultivate a Community Spirit</h3>
<p>Someone recently reached out to me, saying they wanted to get involved in reviewing pull requests because it was fun. They aren't officially a maintainer, but I would like to think that they enjoy being a part of the project.</p>
<p>Building an open source project is a community effort. And as a maintainer, you will need that community spirit.</p>
<p>You need to be excited with what you do. Collaboration should be fun. You are happy that the contributor added something, but let them also be happy that they contributed.</p>
<p>People love good, honest feedback. And it also helps you build up your little community.</p>
<h3 id="heading-be-responsible">Be Responsible</h3>
<p>If the open source project is your idea, then you're the pioneer. If you decide to be the lead maintainer, be the lead maintainer. Be reliable, and most importantly, be present.</p>
<p>Even if you are a supporting maintainer for some big project, it is good to show that you know what you're doing and that you're committed to the project.</p>
<p>Some projects go stale because the maintainers stop responding to issues and pull requests. It's true that life catches up to us sometimes. If you decide to commit to a project, though, it's important to always show that the project is alive.</p>
<p>But how? Well, everything leads back to collaboration. Keep your collaborators involved and they'll help you out.</p>
<h3 id="heading-be-nice-and-welcoming">Be Nice and Welcoming</h3>
<p>People are coming from different backgrounds to check out your project. Whoever they are, they won't come back if their first experience was a mean maintainer, whose project had poor documentation.</p>
<p>No matter how easy you make things, expect questions. Be ready to answer these questions. Point people to the right resources, no matter how obvious the solution could be.</p>
<p>If a contributor is having a hard time, check your documentation. Most times, it's not them, it's us (pun intended). The README might've skipped some steps, or a screenshot wasn't clear enough. Instead of telling them off, point them in the right direction and update your docs if need be.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>All in all, being a maintainer is hard work. Whether you're going solo on your project, or working with other maintainers, the goal is the same: collaborating to build great products.</p>
<p>Projects with poorly structured management and responses are one of the main reasons some people feel discouraged when it comes to contributing to open source.</p>
<p>The skills I've covered here are mostly based on personal experience, but I hope they help anyone maintaining a project, or thinking of being an open source maintainer.</p>
<p>If you want to check out my open source project, you can do so <a target="_blank" href="https://github.com/Njong392/Abbreve">here</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Open Source? How to Contribute to OSS Projects ]]>
                </title>
                <description>
                    <![CDATA[ In this article, we'll talk about open source software. Open source software is often considered free software.  In this article, I'll give a high-level explanation of what open source software (OSS) really is, its advantages in the modern technologi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-open-source-software/</link>
                <guid isPermaLink="false">66b906c853c4132f77b5c305</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ FOSS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Destiny Erhabor ]]>
                </dc:creator>
                <pubDate>Tue, 16 Aug 2022 20:23:53 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/08/pexels-ben-taylor-109998.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In this article, we'll talk about open source software. Open source software is often considered free software. </p>
<p>In this article, I'll give a high-level explanation of what open source software (OSS) really is, its advantages in the modern technological world, how to use it, and some best practices to follow when using or contributing to an OSS project. </p>
<p>You will learn about widely used tools and techniques like GitHub and continuous integration, as well as what license to choose and how to promote diversity in open source projects.</p>
<p>You will also get to make your first open source contributions if you haven't done so already.</p>
<p>Both maintainers and contributors to open source projects should read this article.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><a class="post-section-overview" href="#heading-what-is-oss">What is OSS</a>?</li>
<li><a class="post-section-overview" href="#heading-what-is-proprietary-software">What is Proprietary Software</a>?</li>
<li><a class="post-section-overview" href="#heading-open-source-governance-models">Open Source Governance Models</a></li>
<li><a class="post-section-overview" href="#heading-why-use-open-source-projects-advantages">Why Use Open Source Projects (Advantages)</a>?</li>
<li><a class="post-section-overview" href="#heading-how-to-work-on-an-oss-project">How to Work on an OSS Project</a></li>
<li><a class="post-section-overview" href="#heading-how-to-contribute-to-open-source-projects">How to Contribute to Open Source Projects</a></li>
<li><a class="post-section-overview" href="#heading-helpful-contribution-tips">Helpful Contribution Tips</a></li>
<li><a class="post-section-overview" href="#heading-continuous-integration-and-delivery">Continuous Integration and Delivery</a></li>
<li><a class="post-section-overview" href="#oss-licenses-and-legal-issues">OSS Licenses and Legal Issues</a></li>
<li><a class="post-section-overview" href="#how-to-chose-a-license-for-your-oss-project">How to Choose a License for Your OSS Project</a></li>
<li><a class="post-section-overview" href="#heading-how-to-build-better-open-source-software-projects">How to Build Better Open Source Software Projects</a></li>
<li><a class="post-section-overview" href="#heading-understand-that-leadership-is-not-control">Understand that Leadership is Not Control</a></li>
<li><a class="post-section-overview" href="#heading-why-many-oss-projects-fail">Why Many OSS Projects Fail</a></li>
<li><a class="post-section-overview" href="#heading-diversity-in-oss">Diversity in OSS</a></li>
<li><a class="post-section-overview" href="#heading-how-to-use-github-for-hosting-oss-projects">How to Use GitHub for Hosting OSS Projects</a></li>
</ul>
<h1 id="heading-what-is-oss">What is OSS?</h1>
<p>OSS stands for Open Source Software. This type of software has freely accessible source code under a license that lets you examine, modify, and use that code without restriction.</p>
<h1 id="heading-what-is-proprietary-software">What is Proprietary Software?</h1>
<p>As opposed to OSS, many companies use proprietary software instead. Only the owners of proprietary software have complete access to the source code. Trusted partners can inspect the code once they've signed a non-disclosure agreement.</p>
<p>When using proprietary software, you must agree to a license that limits your ability to share the product.</p>
<h1 id="heading-open-source-governance-models">Open Source Governance Models</h1>
<p>Any organization that wants to succeed needs to be organized. It's important to carefully consider how the organization make decisions and who makes them. </p>
<p>Establishing a Governance Model helps determine how you can accomplish this. Let's talk about some of these models now.</p>
<h3 id="heading-company-led-governance-model">Company-led Governance Model</h3>
<p>In this model, software development and release management is handled by a single entity. </p>
<ul>
<li>External contributions may or may not be requested.</li>
<li>Plans and release dates may not be publicly disclosed, and unofficial conversations may not be made public.</li>
<li>Software is in the open (that is, it's public) when it is released. </li>
<li>An example of this model is Android by Google.</li>
</ul>
<h3 id="heading-benevolent-dictatorship-governance-model">Benevolent Dictatorship Governance Model</h3>
<p>In this model, one individual has a dominant influence over the software – hence the term "dictator" (but in a much more positive sense here).</p>
<ul>
<li>The quality and effectiveness of the project are greatly influenced by the dictator's intelligence and managerial ability</li>
<li>As a project matures, the maintainer writes less code, which can cut down on discussions and speed up progress.</li>
<li>An example of this type of governance is Wikipedia</li>
</ul>
<h3 id="heading-board-of-governors-governance-model-tighter-regulation">Board of Governors Governance Model (Tighter Regulation)</h3>
<ul>
<li>All discussions are public via mailing lists, and collective choices are taken.</li>
<li>The governing board decides who may contribute and whether new software is accepted.</li>
<li>Releases are sometimes made less frequently, but they are carefully debugged. </li>
<li>Examples are Debian and FreeBSD</li>
</ul>
<h1 id="heading-why-use-open-source-projects-advantages">Why Use Open Source Projects (Advantages)</h1>
<p>There are quite a few advantages of going into open source development. Here are some of them:</p>
<ul>
<li>You collaborate with other contributors and often get better results</li>
<li>The source code is often more secure and higher quality </li>
<li>Using OSS best practices helps developers become better</li>
<li>It reduces the development cost</li>
<li>It decreases the time to market</li>
<li>Customers can trust the quality because there are no secrets and they know what they are getting</li>
<li>You'll have access to a vast array of inexpensive or free instructional aids for education and learning</li>
<li>It's a good way to introduce beginners to the workplace</li>
</ul>
<h1 id="heading-how-to-work-on-an-oss-project">How to Work on an OSS Project</h1>
<h2 id="heading-how-to-contribute-to-open-source-projects">How to Contribute to Open Source Projects</h2>
<p>Before contributing to open source projects, you should do some research around the project. Here are some ways to prepare:</p>
<h3 id="heading-investigate-the-project">Investigate the project</h3>
<p>Before you start working on a project, you'll want to learn more about it. First, you should identify and understand the project workflow and styles it uses. Second, you should figure out the scope and nature of the work that needs doing.</p>
<h3 id="heading-learn-about-its-communication-methods">Learn About its Communication Methods</h3>
<p>Identify how the project maintainers communicate, either through study archives, a mailing list, or some online groups or chat platform.</p>
<h3 id="heading-figure-out-how-contributions-are-submitted">Figure Out How Contributions Are Submitted</h3>
<p>Contributions to the OSS project can be in the form of a mailing list, email, or – perhaps most commonly – through the Git version control system.</p>
<h3 id="heading-study-the-projects-previous-history">Study the Project's Previous History</h3>
<p>Studying the history of the project is always a great idea so you know how it started and how it's been developed. Check if the project offers veteran contributors as mentors.</p>
<h3 id="heading-be-the-janitor-at-first">Be the Janitor at First</h3>
<p>Offer your services for testing, finding bugs, and so on before you begin to submit code. This is healthy for beginners and people new to the OSS lifestyle. It's meant to be a temporary stage.</p>
<h3 id="heading-understand-the-projects-language">Understand the Project's Language</h3>
<p>People frequently get interested in learning new programming languages by participating in open source projects that use those languages. But don't use the project as a way to <strong>learn the language</strong>.</p>
<p>Before thinking about making a software contribution, you should have some familiarity with the language. Most maintainers want qualified contributions only – they likely don't have time to teach you Python or JavaScript, for example. </p>
<p>So make sure you are proficient in the programming language(s) the project uses before contributing. Don't begin learning with a project.</p>
<h3 id="heading-be-respectful">Be Respectful</h3>
<p>Being polite and respectful is an integral part in the OSS community as it involves diverse people. Always avoid flaming and trolling, as they have no place in the open source community.</p>
<h3 id="heading-find-a-balance">Find a Balance</h3>
<p>Try to achieve a balance between asking for feedback and suggestions early in the process and delaying your requests too long and overloading maintainers with a bunch of work at once.</p>
<h3 id="heading-study-and-understand-the-projects-structure-dna">Study and Understand the Project's Structure (DNA)</h3>
<p>Most likely, the project already has a formal or informal leadership structure and a community-established culture.</p>
<p>Look into the project's purpose and the impetus behind it. Learn about how big or small the contributions typically are, how vibrant the community is, and what kind of license is being used.</p>
<h2 id="heading-helpful-contribution-tips">Helpful Contribution Tips</h2>
<p>To successfully make contributions to open source projects, there are some best practices you can follow.</p>
<p>First, you'll want to identify the maintainers, their work, and their techniques‌‌. There are projects with a single maintainer or many maintainers for individual subsystems.‌‌ </p>
<p>Maintainers have various responsibilities as well. They need to be able to understand and review all submissions and verify that they do not add unnecessary complexity or defects. They should also make sure that these changes don't conflict with existing code.</p>
<p>You can develop a rapport with project maintainers and help them with debugging, reviewing, and other tasks as needed.</p>
<p>It's also important when you're working on a project to get input early and work in the open.</p>
<p>Here are some other quick tips to keep in mind:</p>
<ol>
<li>The project probably has a lot of history, so check to make sure your issue hasn't already been resolved or someone else hasn't submitted a pull request to fix it. Your proposal might be a dated one.</li>
<li>Don't propose a fresh idea and have someone else carry it out. This shows that you're not committed to contributing.</li>
<li>If you are uncomfortable having other people look at your work often, OSS might not be the best fit for you. However, it could be an opportunity to learn how to take feedback and constructive criticism.</li>
<li>Contribute a little bit at a time – don't make a large code dump all at once.</li>
<li>Leave your ego at the door. You will sometimes get hash reviews and you need to be able to calmly internalize the feedback.</li>
<li>Do not discriminate against others.</li>
<li>Be patient and work to develop long-term professional relationships with others in the OSS community.</li>
</ol>
<h2 id="heading-continuous-integration-and-delivery">Continuous Integration and Delivery</h2>
<p>When you're working on an OSS project, there will probably be established guidelines for the codebase to prevent conflicts, since many contributors will be working together on it. Testing can also help make sure the code works as it should.</p>
<h3 id="heading-what-is-continuous-integration">What is Continuous integration?</h3>
<p>Continuous integration techniques help ensure that testing is done often and that any issues won't go undiscovered for long. CI also helps make sure that scattered developers remain in sync, even if they're collaborating remotely all over the world.</p>
<p>The different stages of continuous integration are Integration, Delivery, and Deployment.</p>
<ul>
<li><strong>Continuous Delivery</strong>: Translates to the practice of having a speedy and automatic delivery or release process once charges have been merged, and it is released to build clients.</li>
<li><strong>Continuous Deployment</strong>: When the product is actually released to clients</li>
</ul>
<p>Examples of some continuous integration tools are:</p>
<ul>
<li>Jenkins</li>
<li>CircleCI</li>
<li>GitLab</li>
<li>Travis</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/cd.png" alt="continuous integration and delivery" width="600" height="400" loading="lazy">
<em><strong>Continuous integration and delivery process</strong>. credits: <a target="_blank" href="https://substack.com/profile/2655972-ronak-kumar-samantray">Ronak Kumar Samantray</a></em></p>
<h3 id="heading-what-benefits-do-cicd-have-for-oss">What Benefits Do CI/CD Have for OSS?</h3>
<p>When a bunch of contributors are working on various aspects of a project from various perspectives and places, it must come together and not be in conflict. Additionally, fixing one issue shouldn't lead to the emergence of new issues elsewhere. </p>
<p>To accomplish all this, you must use some automated testing. So when testing, you should take into account many factors, such as:</p>
<ul>
<li>Whether you may implement modifications that overlap at the same time.</li>
<li>Whether there are any conflicts.</li>
<li>If the project is still able to compile after the changes are applied.</li>
<li>If you make all the necessary changes, can you ship it?</li>
<li>Does it work on all possible targets?</li>
</ul>
<p>By ensuring that testing is constant, automated, and performed regularly, any problems that arise are swiftly fixed, and developers and users remain on the same page. And <strong>Continuous integration</strong> makes sure that any of these issues are minimized.</p>
<h2 id="heading-oss-licenses-an-legal-issues">OSS Licenses an Legal issues</h2>
<h3 id="heading-what-is-an-open-source-license">What is an Open Source License?</h3>
<p>An open-source license is a sort of license for software that permits the use, modification, and/or sharing of the source code, blueprint, or design under specific terms and conditions. </p>
<p>Then end users or developers can review and modify the source code, blueprint, or design for their own use cases, curiosity, or troubleshooting requirements. Although it is not always the case, open-source licensed software is typically offered free of charge.</p>
<p>There are two types of software licenses that OSS projects generally use:</p>
<ul>
<li><strong>Restrictive</strong> – the software remains open, but it has strict restrictions on any attempts to create proprietary closed goods. Changes to the code are also made available to future recipients, such as the GPL License.</li>
<li><strong>Permissive</strong> – these licenses don't demand updates and alterations to be publicly accessible, such as BSD and Apache fences.</li>
</ul>
<p>Companies should consult with lawyers, either internal or external, to ensure that they do not violate copyrights and licenses when using code from open source projects. </p>
<p>There are many different licenses, so be careful. But once an organization establishes proper standard operating procedures, they must follow them for every project. </p>
<p>OSS Licenses help gives contributors a better idea about how to use and contribute to the source code.</p>
<h3 id="heading-most-common-licenses">Most Common Licenses</h3>
<ul>
<li>GNU General Public License (GPL) </li>
<li>MIT license</li>
<li>Apache License 2.0</li>
<li>BSD 3-Clause "New" or "Revised" license</li>
<li>BSD 2-Clause "Simplified" or "FreeBSD" license</li>
<li>GNU Library or "Lesser" General Public License (LGPL)</li>
<li>Mozilla Public License 2.0</li>
<li>Common Development and Distribution License</li>
</ul>
<h3 id="heading-how-to-choose-a-license-for-your-oss-project">How to Choose a License for Your OSS Project</h3>
<p>This is a crucial choice that has to be carefully considered because it may be difficult or even impossible to switch to a different license later in the project's existence.</p>
<p>Here are some things to consider when choosing one for your project:</p>
<ul>
<li>If you need a simple and permissive license, the MIT License is succinct and direct. It gives users practically unlimited access to your project. Examples of projects that use the MIT License include .NET and Rails.</li>
<li>If you are more concerned about sharing improvements, almost everything can be done with your project under the GNU GPLv3, with the exception of disseminating closed source versions. Examples of projects employing this license include Ansible and Bash.</li>
</ul>
<p>Read more about choosing the best license for your project suit <a target="_blank" href="http://oss-watch.ac.uk/apps/licdiff/">here</a> and <a target="_blank" href="https://choosealicense.com/">here</a>.</p>
<h1 id="heading-how-to-build-better-open-source-software-projects">How to Build Better Open Source Software Projects</h1>
<h2 id="heading-understand-that-leadership-is-not-control">Understand that Leadership is not Control</h2>
<p>An effective leader allows and encourages all participants to speak up and share their ideals while contributing. This often leads to more creative, high-quality work. So remember: loosen the reins when you can.</p>
<p>According to the well-known leadership paradigm known as the "Benevolent Dictator for Life" (BDFL), a project's controllers can only do so much if they take without giving back via teaching and moderating.</p>
<p>Also, if you're a maintainer, make sure you go through some training to learn how to be a good leader. Having a good mentor, for example, is vital in helping you acquire the information and skills required to become a good maintainer.</p>
<p>If the maintainer isn't helpful or supportive, new project participants will often move on to another project if they can't connect with an experienced contributor.</p>
<p>And finally, remember that an open-source project cannot succeed without trust. Reputations are built up over time, and new members should be cognizant of the past.</p>
<h2 id="heading-why-many-oss-projects-fail">Why Many OSS Projects Fail</h2>
<p>Most successful open source projects started off small and grew slowly. It's often hard to predict which projects will be successful and which won't.</p>
<p>Some of the reasons OSS project fail are:</p>
<ol>
<li>They try to do the same thing as more mature programs.</li>
<li>They don't have good leadership.</li>
<li>There's a general lack of interest in their product/service.</li>
<li>They don't have enough developers</li>
<li>They don't have the correct license.</li>
</ol>
<p>To combat these issues, here are some things to keep in mind:</p>
<ul>
<li>Make sure you have good and effective leadership, because this leads to more creative, high-quality work.</li>
<li>Make sure your project has a well-defined governance structure and license.</li>
<li>Encourage developers working on your project by providing resources and information to help them start contributing.</li>
</ul>
<h2 id="heading-diversity-in-oss">Diversity in OSS</h2>
<p>The word "Open" in open source software (OSS) may be taken to mean a welcome, friendly environment. But this may only be a false promise if the project doesn't cultivate a welcoming atmosphere.</p>
<p>There are various forms of diversity, such as nationality and race, sex and gender identity, regional or geographic location, politics and belief systems, and so on.</p>
<p>It's important to respect and foster diversity in whatever ways you're able to do so. Some ways to foster diversity in the OSS space include:</p>
<ul>
<li>Respecting peoples beliefs and religions</li>
<li>Not being biased against contributors for any reasons relating to race, sex, gender identity, location, beliefs, and so on.</li>
<li>Valuing the contributors of all your contributors and engaging with them whenever possible.</li>
</ul>
<h2 id="heading-how-to-use-github-for-hosting-oss-projects">How to Use GitHub for Hosting OSS Projects</h2>
<p>Before GitHub, projects needed their own servers to host repositories. They also needed developers with extensive technical skills to set up, manage, and protect the repositories' integrity.</p>
<p>Developers can now primarily concentrate on the code by using GitHub or other Git hosting services like GitLab or Bitbucket.</p>
<h3 id="heading-types-of-repositories">Types of Repositories</h3>
<p>There are two types of repositories on Git:</p>
<ul>
<li><strong>Public Repositories</strong> that are accessible to everyone on the internet.</li>
<li><strong>Private Repositories</strong>, which are only accessible to you, people you explicitly share access with, and, for organization repositories, certain organization members.</li>
</ul>
<h3 id="heading-hands-on-practice-using-github-for-collaboration">Hands-on practice using GitHub for collaboration</h3>
<p>Now we'll go through some basic steps, which, when you get them down, will provide you with the ultimate superpower in effective collaboration.</p>
<p>We will understand more fully by building a name biography website. So let's dive in:</p>
<p><strong>Here's the</strong> <a target="_blank" href="https://github.com/Caesarsage/OSS-Contribution-Beginer.git"><strong>Project Repo</strong></a> <strong>so you can follow along.</strong></p>
<h4 id="heading-step-1-fork-the-repository">Step 1 – Fork the repository</h4>
<p>This is to create a copy of the repository of the project in your gitHub account for more accessibility.</p>
<p>Then, click on the <strong>project link above</strong> and then fork the repository. To fork a repository, click the fork button at the top right corner of the GitHub website of the repo.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/fork.jpg" alt="fork repository" width="600" height="400" loading="lazy">
<em>fork repository</em></p>
<h4 id="heading-step-2-clone-the-repository">Step 2 – Clone the repository</h4>
<p>Cloning is creating a copy of the code online (your repository) on your local computer so you can work on it from there.</p>
<p>Cloning the repository on your computer is sometimes referred to as using a "<strong>local repository</strong>".</p>
<p>Click the code tab on the forked project on your GitHub and then click the copy code icon as show below:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/clone.jpg" alt="clone repository" width="600" height="400" loading="lazy">
<em>clone repository</em></p>
<p>Now let’s go to your local computer. Open your favorite code editor (mine is VSCode) and open the inbuilt terminal. Then paste the code you copied after a 'git clone' command to clone this project repository to your local computer as shown below:</p>
<pre><code class="lang-git">git clone &lt;your-copy-code&gt;
</code></pre>
<p>Now in your terminal, move to the generated project folder with the code below:</p>
<pre><code class="lang-git">cd OSS-Contribution-Beginer
</code></pre>
<h4 id="heading-step-3-create-a-branch-from-your-local-repository">Step 3 – Create a branch from your local repository</h4>
<p>Branches allow you to make changes without affecting other contributors' code and the main branch. it is always good to create your own branch when contributing to projects.</p>
<p>To do this is simple – just write the following code:</p>
<pre><code class="lang-git">git branch ‘name-of-the-branch-you-want

e.g git branch caesar-name
</code></pre>
<p>Then you can switch to the branch you just created:</p>
<pre><code class="lang-git">git checkout caesar-name
</code></pre>
<h4 id="heading-step-4-make-changes-to-the-repository">Step 4 – Make changes to the repository</h4>
<p>In this scenario, our problem is to change the <a target="_blank" href="http://README.md">README.md</a> to include your name, social media handle, and preferred emoji (you can browse how to get markdown emoji).</p>
<p>Scroll to the bottom of the <a target="_blank" href="http://README.md">README.md</a> file. Add your name, social handles, and emoji to the list. Then save the changes.</p>
<h4 id="heading-step-5-add-and-commit-your-changes">Step 5 – ADD and COMMIT your changes</h4>
<p>Adding and committing your changes is a way to save the changes you made into your local Git repository.</p>
<p>To achieve this, in your terminal run the following commands:</p>
<pre><code class="lang-git">git add .
</code></pre>
<p>Then commit the code:</p>
<pre><code class="lang-git">git commit –m “added my name bio”
</code></pre>
<h4 id="heading-step-6-push-it-online">Step 6 – Push it online</h4>
<p>All we did in <strong>step five</strong> has been on your local computer or repository. Now it's time to push it to the original online repository on GitHub.</p>
<p>You can do this with the few lines of code below:</p>
<pre><code class="lang-git">git push origin –u ‘your branch name’
i.e
git push origin –u caesar-name
</code></pre>
<p><strong>Step 7 –  Make a pull request (PR)</strong></p>
<p>You can let people know about changes you've pushed to a branch in a GitHub repository by making a pull request.</p>
<p>Before your modifications are merged into the main branch, you can examine and validate the prospective changes with collaborators and the maintainer after you submit a pull request. You can even add follow-up contributions.</p>
<p>Go to your forked repository in GitHub online, see your resent changes that you just pushed, and click on compare and pull. Then click the create pull request button.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/github-comparepr.png" alt="pull request" width="600" height="400" loading="lazy">
<em>Pull request</em></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/08/open-a-pull-request_crop.jpg" alt="pull request" width="600" height="400" loading="lazy">
<em>pull request</em></p>
<p>Hurray! Congratulations. 🔥💡 You've successfully made your first open source contribution.</p>
<h1 id="heading-summary">Summary</h1>
<p>The open source ecosystem is a wide and interesting one, and you can benefit a lot from collaborating with others and making contributions.</p>
<p>In this article, you learned how open source projects work, what to consider when getting started, how to contribute, and how the different licenses work.</p>
<p>As always, I hope you enjoyed the article and learned something new. If you want, you can also follow me on <a target="_blank" href="https://www.linkedin.com/in/destiny-erhabor">LinkedIn</a> or <a target="_blank" href="https://twitter.com/caesar_sage">Twitter</a>.</p>
<p>Cheers and see you in the next one! ✌️</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Resolve Merge Conflicts in Git – A Practical Guide with Examples ]]>
                </title>
                <description>
                    <![CDATA[ Git is an open-source distributed version control system. It helps you manage your project files easily using local branching, staging, and workflows.  Many developers use Git today. And they're usually familiar with basic Git concepts like: How to ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/resolve-merge-conflicts-in-git-a-practical-guide/</link>
                <guid isPermaLink="false">66be00182c7c89a851b3763a</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                    <category>
                        <![CDATA[ version control ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Tapas Adhikary ]]>
                </dc:creator>
                <pubDate>Mon, 09 May 2022 23:09:43 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/05/freeCodeCamp-Cover-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><code>Git</code> is an open-source distributed version control system. It helps you manage your project files easily using local branching, staging, and workflows. </p>
<p>Many developers use Git today. And they're usually familiar with basic Git concepts like:</p>
<ul>
<li>How to initiate a repository.</li>
<li>How to create branches.</li>
<li>How to stage/unstage changes.</li>
<li>How to commit changes.</li>
<li>How to push commits to remote.</li>
</ul>
<p>However, many developers are confused about concepts like <code>merging</code> and <code>resolving merge conflicts</code>. In this article, we will learn how to resolve merge conflicts in a practical way. This means you will read, understand, and try it out while going through this article.</p>
<p>If you like to learn from video content as well, this article is also available as a video tutorial here: 🙂</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/OulZeVtZhZQ" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p>If you are new to Git and want to learn all the basic concepts, <a target="_blank" href="https://www.youtube.com/watch?v=vWtu4mzUgQo">here is a helpful crash course</a>.</p>
<h2 id="heading-what-are-devs-saying-about-merge-conflicts">What are Devs Saying about "Merge Conflicts"?</h2>
<p>Recently I conducted a poll on Twitter, LinkedIn, and YouTube, asking if developers are comfortable with resolving merge conflicts in Git. Guess what I found? </p>
<p>70%-80% of developers shared that they find it challenging to resolve a merge conflict in Git. So this means that "Resolving Merge Conflicts" is an important topic of discussion.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/05/poll.png" alt="Image" width="600" height="400" loading="lazy">
<em>Poll Results - Are you comfortable resolving merge conflicts in Git?</em></p>
<h2 id="heading-what-is-git-merge-and-what-are-merge-conflicts">What is Git Merge and What are Merge Conflicts?</h2>
<p><code>Git</code> is a version control system that keeps a history of all your file versions. You can go back to any of the versions at any time and retrieve an older version.</p>
<p>Suppose you have created a file called <code>abc.txt</code> and pushed it to a Git repository. At this point, the file has its current version associated with it. Now, if your co-worker changed the same file and pushed it back to the repository, the file has a new version associated.</p>
<p><code>Git Merge</code> is a feature that allows you to keep the file's current content in sync with other previous versions. This is essential because anyone at any point in time should be working on the most recent content of the file without overriding any changes from the previous versions. </p>
<p>Git <code>merge</code> helps you merge changes from other developers before pushing a new change to the same file.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/05/image-46.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>In the case of Git merge, we need to be aware of two things:</p>
<ol>
<li><strong>Changes</strong>: What type of operations occurred between two versions of a file? New content is added or removed, or existing content is updated.</li>
<li><strong>Possibilities</strong>: There are two possibilities. The changes happened in the <code>different regions</code> of the file or the changes happened in the <code>same region</code> of the file. Same region means that developers have made changes around the same place (for example, paragraphs, lines, and so on) of a file.</li>
</ol>
<p>Fortunately, Git automatically takes care of most of these cases using the <code>auto-merge</code> strategy. But when the changes have occurred in the <code>same region</code> of the file, Git won't perform an auto-merge. Instead, it leaves it to you to <code>Resolve the Merge Conflicts</code>.</p>
<h2 id="heading-git-merge-conflicts-a-horror-story">Git Merge Conflicts: A Horror Story</h2>
<p>Let's understand the above situations with a story of two developers, Alex and Tina. </p>
<p>One fine day,</p>
<ul>
<li>Alex pulled changes from the remote repository to his local repository.</li>
<li>He changed the file called <code>abc.txt</code>, staged it, committed it, and finally pushed it back to the remote repository.</li>
<li>In the meantime, Tina, unaware of Alex's changes in the <code>abc.txt</code> file, made some changes in the <code>same region</code> of the file and tried pushing it to the remote repository.</li>
<li><code>Git</code> is a version control system, so it warned Tina that she had changed the version older than what it was in the remote (as Alex's changes were already in the remote).</li>
<li>Now, Tina needs to first pull the changes from the remote, update the file, and then try pushing again.</li>
<li>Tina did this. However, in her wildest nightmare, she got the warning that <code>auto-merge</code> failed, and so she needs to now <code>Resolve the merge conflicts</code>.</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/05/image-45.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Does this story ring any bells? Is the above story related to you? There's a chance that you've been in Tina's shoes in the past. If not, you will get there eventually! So, let's understand how Tina has to deal with this situation efficiently.</p>
<h2 id="heading-how-to-resolve-merge-conflicts-in-git">How to Resolve Merge Conflicts in Git</h2>
<p>Resolving merge conflicts is not as tricky as it may sound. In 90% of cases, it is easier once you have a clear understanding of the changes and a peaceful mind.</p>
<h3 id="heading-thought-process">Thought Process</h3>
<p>Once Tina pulls the changes, Tina's local file has her changes plus Alex's changes. Now Tina can do one of these four things:</p>
<ul>
<li>She can keep Alex's changes and remove hers.</li>
<li>She can remove Alex's changes and keep hers.</li>
<li>She can keep both Alex's and her changes.</li>
<li>She can remove both Alex's and her changes.</li>
</ul>
<p>Alright, but which one she should be doing? That is entirely dependent on the project's needs and the use-cases. Tina will understand the <code>incoming</code> changes and do whatever is relevant to the situation.</p>
<p>So, what are <code>incoming</code> changes? How's Tina going to identify that? How does Tina make the changes? I know you have got many such questions. Let's get the answers to all of them by taking a couple of real-life examples in the section below.</p>
<h2 id="heading-steps-to-resolve-merge-conflicts-in-git">Steps to Resolve Merge Conflicts in Git</h2>
<p>Let's take a couple of real-life examples of merge conflicts, and learn how to resolve them. </p>
<p>At any point in time, if you want to learn these concepts interactively, please check out <a target="_blank" href="https://www.youtube.com/watch?v=OulZeVtZhZQ&amp;t=397s">this section of the video</a> I have mentioned at the beginning of this article.</p>
<h3 id="heading-example-1-changes-are-in-the-same-region-of-the-file">Example 1: Changes are in the Same Region of the File</h3>
<p>When Git cannot perform an auto-merge because changes are in the same region, it indicates the conflicting regions with special characters. The character sequences are like this:</p>
<ul>
<li><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code></li>
<li><code>=======</code></li>
<li><code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code></li>
</ul>
<p>Everything between <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code> and <code>=======</code> are your local changes. These changes are not in the remote repository yet. All the lines between <code>=======</code> and <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code> are the changes from the remote repository or another branch. Now you need to look into these two sections and make a decision.</p>
<p>The image below shows the content of a file indicating that auto-merge didn't occur and there is a conflict. The conflict is in the line where we have modified the file locally by adding a line <code>- Sleep</code>. But in the meantime, someone else pushed a change by adding the line <code>- Gym</code> in the same region.</p>
<p>So, the line <code>- Sleep</code> is marked as the local change and <code>- Gym</code> as the incoming changes from the remote repository or another branch.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/05/merge-conflict.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Merge Conflict due to Changes in the Same Region</em></p>
<p>Based on your use case and project needs, you will make the call to resolve the conflict. If you need to keep only the line with <code>- Sleep</code>, you will keep that and remove the rest of the conflicting texts. In that case, the file content becomes:</p>
<pre><code class="lang-bash">- Eat
- Read
- Sleep
</code></pre>
<p>On the contrary, you can keep the line <code>- Gym</code> and remove the <code>- Sleep</code> changes:</p>
<pre><code class="lang-bash">- Eat
- Read
- Gym
</code></pre>
<p>If you need to keep both lines, remove the lines related to the conflict indicators:</p>
<pre><code class="lang-bash">- Eat
- Read
- Sleep
- Gym
</code></pre>
<p>If you think none of the changes are required, remove them all.</p>
<pre><code class="lang-bash">- Eat
- Read
</code></pre>
<p>It is entirely up to you to decide what changes are relevant to the situation. After your changes, you need to make sure that none of the conflict-indicating characters exist (&lt;&lt;&lt;&lt;&lt;&lt;&lt;,  =======, &gt;&gt;&gt;&gt;&gt;&gt;&gt;) in the file. Once you settle with the changes, do the following:</p>
<p>Stage the changes:</p>
<pre><code class="lang-bash">git add &lt;files&gt;
</code></pre>
<p>Commit the changes with a message:</p>
<pre><code class="lang-bash">git commit -m <span class="hljs-string">"Message"</span>
</code></pre>
<p>Finally, push the changes to the remote:</p>
<pre><code class="lang-bash">git push
</code></pre>
<p>That's all there is to it to resolve the merge conflict in this scenario.</p>
<h3 id="heading-example-2-the-file-is-removed-at-the-remoteother-branch">Example 2: The File is Removed at the Remote/Other Branch</h3>
<p>In removed file merge conflicts, a dev deletes a file in one branch while another dev edits the same file in another branch. In this case, you need to decide if you want to keep the file or if it was right to delete it.</p>
<p>To add the deleted file back to your branch, do this:</p>
<pre><code class="lang-bash">git add &lt;file-name&gt;
</code></pre>
<p>To go ahead with the deletion of the file, do this:</p>
<pre><code class="lang-bash">git rm &lt;file-name&gt;
</code></pre>
<p>Then commit your changes with a message:</p>
<pre><code class="lang-bash">git commit -m <span class="hljs-string">"Message"</span>
</code></pre>
<p>Finally, push it:</p>
<pre><code class="lang-bash">git push
</code></pre>
<h2 id="heading-whats-next">What's Next?</h2>
<p>If you learn from the above two examples and practice them, you will be able to take care of most scenarios and resolve your merge conflicts. So, I recommend practicing them a couple of times.</p>
<p>If you face any new scenarios or get stuck in resolving a merge conflict, feel free to post a comment about it in the <a target="_blank" href="https://www.youtube.com/watch?v=OulZeVtZhZQ">comment section of this video</a>. I'll try my best to respond back!</p>
<p>Before we wrap up, a few tips for you:</p>
<ul>
<li>All the examples shown in this article assumes that you're using GitBash or any other Git CLI to resolve merge conflicts. You can use any other GUI tool to do the same.</li>
<li>Always pull from remote/other related branches before you start any new logical work on your code. It will keep your branch up-to-date as much as possible and reduce the chances of conflicts.</li>
<li>Always pull before a push to make sure you will not face any rejections from Git.</li>
<li>Talk to your peers/co-developers when you are unable to make a call on what to keep vs. what to remove. Pair up to resolve any difficult merge conflicts.</li>
</ul>
<p>That's all for now. I hope you found this article informative and insightful to help you with merge conflicts in Git.</p>
<p>Let's connect.</p>
<ul>
<li>Give a <a target="_blank" href="https://twitter.com/tapasadhikary">Follow on Twitter</a> if you don't want to miss the daily dose of Web Development and Programming Tips.</li>
<li>Check out my Opensource projects on <a target="_blank" href="https://github.com/atapas">GitHub</a>.</li>
<li>You can <a target="_blank" href="https://www.youtube.com/tapasadhikary?sub_confirmation=1">SUBSCRIBE</a> to my YouTube channel if you want to learn JavaScript, ReactJS, Node.js, Git, and all about Web Development in a practical way.</li>
</ul>
<p>See you soon with my next article. Until then, please take care of yourself, and stay happy.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Collaborative Coding? Pair Programming, Mob Programming, and How it All Works ]]>
                </title>
                <description>
                    <![CDATA[ By Andrej Kovacevic Coding can be challenging, but it can become a lot easier if you have the right strategies and tools.  After all, as noted software engineer and writer Joel Spolsky says, "it is harder to read code than to write it." One way to ma... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/collaborative-coding-tips/</link>
                <guid isPermaLink="false">66d45d9bc7632f8bfbf1e3d7</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ pair programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ teamwork ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 02 May 2022 20:13:44 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/04/collaborative-coding-tips.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Andrej Kovacevic</p>
<p>Coding can be challenging, but it can become a lot easier if you have the right strategies and tools. </p>
<p>After all, as noted software engineer and writer <a target="_blank" href="http://blogs.perl.org/users/buddy_burden/2013/12/perl-and-me-part-4-a-worthy-program-exceedingly-well-read.html#note1">Joel Spolsky</a> says, "it is harder to read code than to write it."</p>
<p>One way to make your development projects more successful is with collaborative coding. This refers to the process of working on the code with a team or with another developer. In a project that uses collaborative coding, each team member helps build the code and checks it for bugs or errors.</p>
<p>Working in pairs or teams helps finished code contain <a target="_blank" href="https://www.freecodecamp.org/news/how-to-be-a-team-player-in-the-tech-world-c78aa9f4e898/">fewer mistakes</a> and bugs, and this results in better code quality and projects being completed more quickly.</p>
<p>It also enables faster debugging and greater project resiliency, as this setup makes it easier for other developers to take over in case one of the developers has to leave the project.</p>
<p>But collaborative coding won't produce all of these benefits by default. Making them happen comes down to how you implement your collaborative development strategy and how you execute it. Here are four points to consider when doing so.</p>
<h2 id="heading-you-need-a-secure-development-process">You Need a Secure Development Process</h2>
<p>Although having multiple sets of eyes checking a project's code should produce a net benefit for the code's security — it can also introduce a new type of vulnerability into the mix. This is because sharing code through a collaboration platform creates the possibility of a data breach.</p>
<p>Humans, after all, are the weakest link in the cybersecurity chain. So, the larger the team, the greater the odds that someone will make an unforced security error during development. </p>
<p>And things like exposed or stolen login credentials can endanger a project — especially one that is designed to handle sensitive information like banking and personal details.</p>
<p>This means that project managers must choose a collaboration platform that's built with security in mind. Some collaborative coding platforms already have built-in security features, but others do not. And different types of coding projects will call for different feature sets, so there's no one-size-fits-all solution.</p>
<p>There are plenty of collaborative coding platforms that may fit the bill, however. <a target="_blank" href="https://teletype.atom.io/">Teletype</a>, for example, comes with end-to-end encryption and the option to use self-destructing messages. </p>
<p>Another popular option is <a target="_blank" href="https://brackets.io/">Brackets</a>, which comes with data protection when interacting with third-party plugins and has a mechanism for preventing unapproved access and privilege escalation.</p>
<p>Some teams or developers might use established collaboration platforms not specifically designed for coding. Microsoft Teams, for instance, can facilitate casual coding collaboration. And although it's not an inherently insecure system, it has weaknesses that developers can address with an additional <a target="_blank" href="https://www.avanan.com/teams-security">Microsoft Teams Security</a> solution.</p>
<p>These solutions include features like malware protection, URL protection, access control over confidential data, compliance tools, and security alerts – which all improve platform security significantly. </p>
<p>Regardless of the platform you choose, though, it is important to use security tools or to install third-party security solutions that ensure the best possible security for your project.</p>
<h2 id="heading-choose-the-right-platform-for-the-job">Choose the Right Platform for the Job</h2>
<p>It's also important to recognize that security isn't the only consideration when you're choosing a collaborative coding platform. </p>
<p>It's also critical to choose one that will provide every team member with the tools and resources necessary to do their job. The right platform should meet the following criteria:</p>
<h3 id="heading-its-made-for-a-specific-programming-language-or-ecosystem">It's made for a specific programming language or ecosystem</h3>
<p>There are many benefits in using a platform that is created for a specific programming language. First, it most likely has all of the tools necessary to efficiently work on a project in a particular language. And it won't have unnecessary features added to cater to other requirements and preferences.</p>
<p>A language-specific platform is also designed with best practices in mind for developers working with particular languages or frameworks. So, for example, when working with dynamic programming languages such as Go, Ruby, and Python, it is preferable to use a platform like <a target="_blank" href="https://aws.amazon.com/cloud9/">Cloud9</a>.</p>
<h3 id="heading-its-fast-to-setup">It's fast to setup</h3>
<p>Ideally, everyone involved should already be familiar with the collaborative coding platform that you'll use. But if this isn't the case, it's important to choose one that is easy to learn with minimal to no configuration involved. </p>
<p>A platform that requires IDE, server, terminal, codebase, and library configuration along with other setup procedures is not the most suitable option for live coding between pairs or teams of developers.</p>
<h3 id="heading-it-should-have-a-customizable-user-interface">It should have a customizable user interface</h3>
<p>Programming is a heavily detail-driven job and developers tend to have their own preferences when it comes to the user interface so they can work easily and conveniently. </p>
<p>Forcing everyone to use a platform they are not comfortable with is not a good way to proceed with collaborative coding. So it helps to have the option to modify the UI or dashboard to some extent.</p>
<p>The bottom line is that the collaborative coding platform should be easy to use for everyone. Developers may be highly skilled people, but not everyone is a master of everything. Those who are collaborating should agree on a platform and working arrangement that works for everyone.</p>
<h2 id="heading-define-clear-team-roles-at-the-outset">Define Clear Team Roles at the Outset</h2>
<p>We can categorize collaborative coding into three general setups: </p>
<ul>
<li>pair programming</li>
<li>mob programming, and </li>
<li>code sharing. </li>
</ul>
<p>And understanding the inner workings of each of these setups is important, as different coding projects require different setups. </p>
<p>But it's equally important to understand the roles of the team members in each setup and to define them before beginning to code.</p>
<p>As the phrase suggests, <a target="_blank" href="https://www.freecodecamp.org/news/things-ive-learned-from-pair-programming-interviews-35a4db7d7443/">pair programming</a> involves two participants. Usually, one serves as the driver and the other acts as the navigator. The driver writes the code while the navigator reviews the output. </p>
<p>In this setup, the driver is responsible for the tactical aspects of the job while the navigator sets the strategic direction of the code. The two may then switch their roles to have a more thorough look at what they have produced.</p>
<p><a target="_blank" href="https://searchsoftwarequality.techtarget.com/definition/mob-programming">Mob programming</a> is similar to pair programming but involves more than two people. To avoid making it a chaotic or disorganized arrangement, it is also important to have the driver-navigator role assignments. </p>
<p>It is slightly more complicated, though, because there are more than two developers who have to agree on how to assign the driver-navigator roles. This means that clear communication and mutual respect are crucial.</p>
<p>The code-sharing setup does not require a driver-navigator dynamic. Instead, the collaborating developers only share their respective code to allow each other to review, modify, debug, or add to each other's code. </p>
<p>This is the type of collaboration that open source developers tend to rely on because it allows newcomers to participate at will and existing developers to pause their work whenever they need to.</p>
<p>The participants here may work on the code together in real-time or asynchronously. What's important is that they have a reliable system for version control. </p>
<p>That's where version control systems like <a target="_blank" href="https://git-scm.com/">Git</a> excel. They help teams to avoid doing duplicate work and make sure that all developers are reviewing, revising, or adding to the latest version of the code at all times.</p>
<h2 id="heading-create-skill-balanced-teams-for-best-results">Create Skill Balanced Teams for Best Results</h2>
<p>While some would consider collaborative coding as an <a target="_blank" href="https://www.smashingmagazine.com/2020/04/collaborative-coding-ultimate-career-hack/">opportunity to learn</a> from more experienced and proficient coders, that doesn't mean every collaborative project is conducive to that. </p>
<p>This is because for certain types of projects, having too much of a disparity in the skill level of team members can grind the whole project to a halt.</p>
<p>This is a problem that feeds one of the biggest criticisms of collaborative coding as a development method. When team members must contribute as equals but lack the skills to keep up, progress stalls. When time is of the essence, creating a skill-balanced team is the only option.</p>
<p>That said, collaborative coding can be an opportunity for collaborative learning, but only when deadlines aren't involved. In that scenario, team members can take their time to learn from the work of their more experienced peers. And in the end, everyone benefits from the experience.</p>
<p>But if the goal is to make the project a collaborative learning endeavor, it is important to make that clear from the get-go. Otherwise, the more experienced developers could feel like they've been duped into providing training instead of getting the project done. And that never ends well.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>The advantages of collaborative coding are undeniable — but there are drawbacks to consider too. </p>
<p>So, before deciding to go into the collaborative route, it is important to carefully scrutinize the pros and cons as they relate to a specific project. </p>
<p>And for developers who wish to try their hand at collaborative coding, it's a good idea to get familiar with the popular tools and platforms used for such projects beforehand. That way, both the project planners and team members will get the most out of the collaborative process — but without encountering some of the issues that it can entail.</p>
<p><em>Featured photo by snowing 12 - stock.adobe.com</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How We Got 4.5K+ GitHub Stars on Our Open Source Project in 6 Months ]]>
                </title>
                <description>
                    <![CDATA[ By navaneeth pk We launched our open source project in June 2021, and since then we've gotten more than 4500 stars for our repository.  Here are the strategies that worked for us. This is not an article about how to just get more stars for your repos... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-get-more-engagement-with-your-open-source-project/</link>
                <guid isPermaLink="false">66d46040868774922c884ffc</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 26 Jan 2022 14:54:43 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/01/t3.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By navaneeth pk</p>
<p>We launched <a target="_blank" href="https://github.com/ToolJet/ToolJet">our open source project</a> in June 2021, and since then we've gotten <strong>more than 4500 stars</strong> for our repository. </p>
<p>Here are the strategies that worked for us. This is not an article about how to just get more stars for your repository. The article instead explains how to present your project well so that it is helpful for the open-source community. </p>
<p>Some of these points have also helped us get contributions from more developers. We have contributions from more than 100 developers now. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/image-79.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Fun fact: the graph above was generated using an app built with our tool. You can <a target="_blank" href="https://apps.tooljet.com/github-star-history">try it out here</a> to generate a star history chart for your project.</p>
<p>Alright, let's dive into the strategies we used to raise awareness for our project.</p>
<h2 id="heading-write-a-good-readme">Write a Good Readme</h2>
<p>The README is the first thing that a visitor to your repository sees. It should be able to convey what your project does, how to install the project, how to deploy the project (if applicable), how to contribute, and how it works. </p>
<p>You can also use badges that are helpful for developers. We used <a target="_blank" href="https://shields.io/">https://shields.io/</a> for adding badges to our Readme.   </p>
<p>Here is what our Readme looks like:</p>
<p><img src="https://blog.tooljet.com/content/images/2022/01/image-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>And here are some examples of projects with great README files:</p>
<ol>
<li><a target="_blank" href="https://github.com/nestjs/nest">https://github.com/nestjs/nest</a> </li>
<li><a target="_blank" href="https://github.com/typesense/typesense">https://github.com/typesense/typesense</a></li>
<li><a target="_blank" href="https://github.com/airbytehq/airbyte">https://github.com/airbytehq/airbyte</a></li>
<li><a target="_blank" href="https://github.com/strapi/strapi">https://github.com/strapi/strapi</a></li>
</ol>
<h2 id="heading-focus-on-documentation">Focus on Documentation</h2>
<p>We get more traffic to our <a target="_blank" href="https://docs.tooljet.com/">documentation portal</a> than our main website. A well-documented project is always loved by the community. </p>
<p>Open-source projects like <a target="_blank" href="https://github.com/facebook/docusaurus/">Docusaurus</a> make it super easy to build documentation portals that look great just out of the box. Adding links to the repository from the documentation can drive more visitors to your repository.</p>
<h3 id="heading-what-to-include-in-documentation">What to include in documentation</h3>
<h4 id="heading-how-to-installdeploy-the-project">How to install/deploy the project</h4>
<p>If the project has a compiled software as the final product, make sure to add installation instructions. </p>
<p>If the project is the codebase for a library such as an npm package or a Ruby gem, include details on how to import and use the library. </p>
<p>If the project needs to be or can be deployed on platforms like Kubernetes, Docker, Heroku, and others, include separate guides for each of the options. </p>
<h4 id="heading-contributing-guide">Contributing guide</h4>
<p>Apart from the contributing guide doc in the codebase, add one to the documentation, too. It should include guides for setting up a local environment on different platforms like Docker, Mac OS, Ubuntu, Windows, and so on. </p>
<h4 id="heading-tutorials-and-code-examples">Tutorials and code examples</h4>
<p>If this is applicable, it can be really helpful. How to guides on using using the project will show other devs how they can actually get started. It can be code examples if the project is a library. </p>
<h4 id="heading-architecture-reference">Architecture reference</h4>
<p>It will be helpful for the contributors if the documentation has details on different components of the project. </p>
<p>For example, if the project has server and client components, include a diagram on how everything works together. Here is <a target="_blank" href="https://docs.tooljet.com/docs/intro">an example</a> from ToolJet's documentation. </p>
<p>Here are some projects with great documentation:</p>
<ol>
<li><a target="_blank" href="https://docs.nestjs.com/">https://docs.nestjs.com/</a></li>
<li><a target="_blank" href="https://docs.n8n.io/">https://docs.n8n.io/</a></li>
<li><a target="_blank" href="https://guides.rubyonrails.org/">https://guides.rubyonrails.org/</a></li>
<li><a target="_blank" href="https://plotly.com/python/">https://plotly.com/python/</a></li>
<li><a target="_blank" href="https://docs.mapbox.com/">https://docs.mapbox.com/</a></li>
</ol>
<h2 id="heading-drive-visitors-from-your-website-to-github">Drive visitors from your website to GitHub</h2>
<p><img src="https://blog.tooljet.com/content/images/2022/01/image-6.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>A lot of visitors checked out our repository after visiting our website first. Add banners, badges, and other incentives to your website so that visitors will check out your repository. </p>
<p>Add a CTA to your website and blog so that the visitors will check out your repository. Write about topics relevant to your audience. For example, if your project is used for logging errors, it might be a good idea to write about how to track errors in an application. </p>
<p>Publishing articles on platforms like freeCodeCamp, dev.to, Hashnode, and Hackernoon can also help you get more visibility for your blog posts. Some of these platforms allows cross-posting while some others are more suited to exclusive content. </p>
<h2 id="heading-be-active-in-developer-communities">Be active in developer communities</h2>
<p>There are many discord/slack communities, forums, Reddit communities, and so on where developers usually hang out. Be active in these communities without making it look like self-promotion (which can get you banned for obvious reasons).</p>
<p>You can add value to the communities by participating in relevant discussions. For example, if you are building a charting library and if someone is asking a question about plotting charts using React, you can pitch in to help. </p>
<p>Remember, play nice. Do not just try to link to your project if it does not add any value to the discussion. The more you build up relationships by helping people, the more you'll be able to share info about your project in a natural, helpful way.</p>
<h2 id="heading-trending-repositories-on-github">Trending repositories on GitHub</h2>
<p><img src="https://blog.tooljet.com/content/images/2022/01/image-4.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you make it to the <a target="_blank" href="https://github.com/trending?since=daily">list of trending GitHub repositories</a>, it can get your repository a lot more visibility. </p>
<p>When we made it to the trending list, we got more visitors to our repository and website. </p>
<p>There are trending lists for specific languages too. Many Twitter bots and other tools notify developers whenever there is a new repository that has made it to the trending list. </p>
<h3 id="heading-how-to-get-on-githubs-trending-list">How to get on GitHub's trending list</h3>
<p>The general principle should be that repositories with the most activity ( stars, visitors, issues, contributions, and so on ) will be added to the trending list.</p>
<p>GitHub hasn't publicly mentioned the criteria for selecting trending repositories, so we can only assume how it works. </p>
<h2 id="heading-ask-for-feedback-from-relevant-communities">Ask for feedback from relevant communities</h2>
<p><img src="https://blog.tooljet.com/content/images/2022/01/image-5.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Communities such as <a target="_blank" href="https://www.producthunt.com/posts/tooljet">ProductHunt</a>, <a target="_blank" href="https://news.ycombinator.com/item?id=27421408">Hackernews</a>, Reddit communities, and others may find your project useful. This can bring in more visitors and stargazers to your repository. </p>
<p>Target only the relevant communities. If you think the majority of the members won't find your project interesting, it is not a relevant community. Spamming can cause more harm than good. Also, it's just not nice.</p>
<h2 id="heading-grow-a-community-around-your-project">Grow a community around your project</h2>
<p>Start a community on Discord or Slack where your users and contributors can hang out. </p>
<p>Communities can be helpful when the members are stuck with something and if they want to propose something new. If there is an active community, your future posts and announcements might get more reach. </p>
<p>We created the community on Slack since most of the developers have a Slack account. Don't use lesser-known platforms for building your community as it will take an additional step for the person to join the community.</p>
<h2 id="heading-add-a-public-roadmap">Add a public roadmap</h2>
<p>A public roadmap helps your users and contributors understand where your project is headed. It gives an overview of the short-term vision of the project.</p>
<p>There are many tools available for creating public roadmaps, but in most cases GitHub projects will be more than enough for creating a simple yet effective public roadmap. </p>
<p>Public roadmaps should include all major features and changes that are expected to be released in the next few months. Adding minor features and bugs as part of product roadmap can lead to a lot of noise, so avoid it as much as possible. </p>
<p>If you use GitHub projects, link to the relevant issues or discussions so that the community can comment their suggestions. </p>
<p>We have created one using GitHub projects that <a target="_blank" href="https://github.com/ToolJet/ToolJet/projects/2">you can check out here</a>.</p>
<h2 id="heading-be-active-on-twitter">Be Active on Twitter</h2>
<p>Being active on posts related to your projects can create awareness, increase the number of followers on Twitter, and drive more visitors to your repository. </p>
<p>Participate in discussions that are related to your project. For example, if your project is a documentation framework, you can add a lot of value to threads that compare different documentation frameworks. </p>
<p>Make sure to link your repository on the project's Twitter profile. Also, add a tweet button to your GitHub repository. </p>
<p>Again, make sure you add value to the discussions. No one likes a spammer.</p>
<h2 id="heading-respond-to-feedback">Respond to feedback</h2>
<p>Open-source communities are usually very helpful and give a lot of feedback. Respond to all this feedback, as the person has taken their valuable time to help you improve your project. </p>
<p>Positive feedback helps you stay motivated, while negative feedback helps you rethink what you've done so far. </p>
<p>Do not try to avoid or ignore negative feedback. Be open-minded and consider carefully what the person has shared. Work on it if it aligns with your vision, otherwise politely explain. </p>
<h2 id="heading-add-relevant-labels-for-contributors">Add relevant labels for contributors</h2>
<p>Adding labels such as "good first issue" and "up for grabs" can attract more contributors to your repository. </p>
<p>There are many platforms such as <a target="_blank" href="https://goodfirstissue.dev/">https://goodfirstissue.dev/</a> that scan for issues tagged with relevant labels to help contributors discover new repositories and issues to contribute to. </p>
<p>Make sure you respond to contributors quickly. Contributors can be experienced developers as well as developers in the early stages of their careers or students. Try to help the first time contributors so they can onboard easily. </p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>You landed on this article possibly because you have an interesting open-source project. I'd love to see your project. I'm available at navaneeth@tooljet.com and on <a target="_blank" href="https://twitter.com/navaneeth_pk">Twitter</a>.</p>
<p>Hope this article was helpful for you. We would really appreciate it if you can take a moment to <a target="_blank" href="https://github.com/ToolJet/ToolJet">check out our project, ToolJet</a>, and give us any feedback you might have.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Maintain an Open Source Project – Best Practices and Tips ]]>
                </title>
                <description>
                    <![CDATA[ By Prajwal Kulkarni So, now that you've published your first open-source project, what next? If you're new to open source, you might think this is it. But the fun has just begun. In fact, most of the work lies in maintaining your project and making i... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-maintain-an-open-source-project/</link>
                <guid isPermaLink="false">66d4608dc7632f8bfbf1e473</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ open source ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 10 Jan 2022 14:52:54 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/01/tezos-BlKBaiFdNgA-unsplash--1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Prajwal Kulkarni</p>
<p>So, now that you've published your first open-source project, what next? If you're new to open source, you might think this is it. But the fun has just begun.</p>
<p>In fact, most of the work lies in maintaining your project and making it accessible to more users. This is one of the most important steps in the process and it's what enables an open-source project to have a successful run.</p>
<p>Maintaining <a target="_blank" href="https://en.wikipedia.org/wiki/Open-source_software">OSS</a> essentially means keeping the project up-to-date so that it is compatible with the latest version of the various third-party libraries, frameworks, and software that it uses. </p>
<p>It's also important to set up good security measures. Bugs are an inevitable part of any software development life cycle, so fixing bugs that pose a threat to security equally important.</p>
<p>A few days ago, I published my first open-source <a target="_blank" href="https://www.npmjs.com/package/nextportal">project</a>, an npm package. So, now, it is important that I follow some best practices to make it lucrative. </p>
<p>Here, I'll be walking you through some of the steps to help you maintain an open-source project as I learn them.</p>
<p>Throughout this article, I'll be using <a target="_blank" href="https://github.com">GitHub</a> (assuming that most projects are hosted and maintained there).</p>
<p>But if you happen to use any other VCS hosting site, you can still follow these steps to ensure your project's success.</p>
<h2 id="heading-write-good-documentation">Write Good Documentation</h2>
<p>Documentation tells people what the software or code does, how to install it, how they can use it, and it provides a working example and contribution guides.</p>
<p>Note that even though the code is an open-source project, it still needs to have a license to let other people use, alter, or make additions within the defined scope. So, documentation is basically a rulebook or a guide to help people use your software.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/fcc1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>                                                                <a target="_blank" href="https://docs.espressif.com/projects/esp-idf/en/latest/esp32/contribute/documenting-code.html">Source</a></p>
<p>Incomplete documentation will make it difficult for people to get the gist and purpose of your code, making them hesitant to try it out no matter how good your project is. </p>
<p>So just make sure you have well-written documentation, along with any details about all the latest changes you've made to the project.</p>
<h2 id="heading-automate-repetitive-tasks">Automate Repetitive Tasks</h2>
<p>Maintaining an open source project will typically involve many tasks that are repetitive, like scheduled maintenance, periodic updating of dependencies, continuous integration, and so forth. </p>
<p>Since these tasks are time-consuming, repetitive, and require no innovation, you can automate many of them. </p>
<p>Take updating dependencies, for example. It is common to make use of other packages and dependencies in your projects. But, at the same time, you can't afford to compromise your project's security/performance by using a dependency that is obsolete. </p>
<p>One tool that I find useful for this is the free <a target="_blank" href="https://www.whitesourcesoftware.com/free-developer-tools/renovate/">WhiteSource Renovate</a>. It automates dependency updates. So using a tool like Renovate to keep dependencies updated is a crucial task you shouldn't neglect. If you want to learn how to integrate WhiteSource Renovate into your project, continue reading the below section.</p>
<h3 id="heading-automatic-dependency-updating-with-renovate">Automatic dependency updating with Renovate</h3>
<p>Firstly, you'll need to <a target="_blank" href="https://github.com/apps/renovate">integrate Renovate</a> with your GitHub account. Then click install, and follow the steps as instructed. </p>
<p>While configuring, Renovate lets you decide if it should run on all the repositories by default or only on specific repositories. Select the option as you wish. (Note: If you want to Renovate to run on forked repositories, clicking Select All Repositories will skip forked repos by default. In such cases, you’ll have to manually add the forked repo(s)).</p>
<p>Soon after setting up Renovate with the required repositories, an onboarding PR will be submitted by the Renovate bot, which contains information like configuration summary and what packages/dependencies are supposed to be upgraded.</p>
<p>For demonstration purposes, I've forked a repo from my GitHub account that is supposedly a mobile application built on <a target="_blank" href="https://reactnative.dev/">React Native</a>. It is no longer maintained, so it'll serve as a good example to test on.</p>
<p>If you follow the above steps correctly, you should see an onboarding PR similar to this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/fcc2-1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Initial PR</em></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/fcc3-1.png" alt="Image" width="600" height="400" loading="lazy">
<em>Merge PR</em></p>
<p>Once you merge the above pull request, the Renovate bot will start looking for outdated or stale dependencies that need to be updated and submit a PR for each dependency that needs to be updated. </p>
<p>Keep in mind that this tool doesn't trace vulnerabilities or issues, only available updates. But new dependencies often come with bug fixes, security improvements, and newly-added features. </p>
<p>Still, just because there's an update available doesn't mean you have to update it because chances are it might break your existing system due to a compatibility mismatch or something similar. So it's important to review the update before merging the PR. </p>
<p>To help you make sound decisions regarding whether you want to upgrade a package or not, the PR includes details about the adoption rate and test passing rate, which effectively determines the overall confidence level. </p>
<p>It also pulls the latest release notes from the dependency repository, which would otherwise require you to manually navigate to the repo to find what's new.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/fcc4-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/fcc5-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-always-address-issues">Always Address Issues</h2>
<p>One good way to make sure that your project continuously improves is to address issues opened by your peers. </p>
<p>No one will show interest in contributing to an open-source project if it doesn't address potential bugs, security issues, or feature addition. </p>
<p>You can set up a CI script that assigns a label when an issue is opened and then assign it to the contributors maintaining the project accordingly. This will result in issues being reviewed at a rapid rate and will also help contributors find new fixes and/or feature additions.</p>
<h2 id="heading-spread-the-word-about-your-project">Spread the Word About Your Project</h2>
<p>You've published an excellent open source project, yet you don't see anyone using or contributing to the project. The primary reason for this could be that people haven't found out about your project. </p>
<p>To get the ball rolling, you should make sure your project gets all the exposure it can. One effective way to do this is by sharing your work on social media, wherever people are active who might be interested in it. </p>
<p>You can also get involved in discussions on topics related to your projects on Q&amp;A platforms, like Stack Overflow and Reddit. Then sharing your project will be a natural thing to do.</p>
<h2 id="heading-attract-helpful-contributors">Attract Helpful Contributors</h2>
<p>Following the above steps will help you get started. But once your project starts growing, it’ll need more contributors that are willing to maintain the project. </p>
<p>This is only possible when you build up a strong contributor base. To increase the people helping you maintain the project, you can set up rewards for contributions, like giving out swag to people who satisfy certain requirements.</p>
<p>People will also be encouraged to contribute if they feel a sense of pride and ownership of the project. So make sure everyone gets due credit for their contributions, big or small. </p>
<p>Positive actions like this can also potentially enable new contributors to share their work with their friends/colleagues, indirectly helping your project gain more exposure/users/contributors.</p>
<h2 id="heading-wrapping-up">Wrapping up</h2>
<p>At the end of the day, the value your project provides is what determines how many people contribute to and use it. So when you're creating an open-source project, keep usability and impact in the front of your mind. How will your project make others’ lives easier? What problem(s) does it solve? </p>
<p>These are the steps you should to take to successfully maintain an open-source project. Do you recommend any other important practices that can add value to this list? If yes, do share them with me so we can all learn more about the open-source culture. </p>
<p>If you found this article helpful, feel free to share it with your friends and colleagues, you can follow me on <a target="_blank" href="https://twitter.com/mehulmpt">Twitter</a> for more such stuff :)</p>
<p>Cheers!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Write Better Git Commit Messages – A Step-By-Step Guide ]]>
                </title>
                <description>
                    <![CDATA[ When first introduced to Git, it's typical for developers to feel uncomfortable with the process.  You might feel uncertainty when encountering the Git commit message, unsure how to properly summarize the changes you've made and why you've made them.... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-write-better-git-commit-messages/</link>
                <guid isPermaLink="false">66bc4cb17fa38392bfab812e</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                    <category>
                        <![CDATA[ teamwork ]]>
                    </category>
                
                    <category>
                        <![CDATA[ version control ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Natalie Pina ]]>
                </dc:creator>
                <pubDate>Tue, 04 Jan 2022 22:34:45 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/01/gitcommitmessage.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>When first introduced to Git, it's typical for developers to feel uncomfortable with the process. </p>
<p>You might feel uncertainty when encountering the Git commit message, unsure how to properly summarize the changes you've made and why you've made them. But the earlier in your career you can develop good committing habits, the better.</p>
<p>Have you ever wondered how you can improve your Git commit messages? This guide outlines steps to elevate your commit messages that you can start implementing today.</p>
<p>This article assumes you already understand basic Git workflow. If not, I suggest reading through the <a target="_blank" href="https://guides.github.com/introduction/git-handbook/">Git Handbook</a>.</p>
<p>It is also important to note that you should follow your team's conventions first and foremost. These tips are based on suggestions based upon research and general consensus from the community. But by the end of this article you may have some implementations to suggest that may help your team's workflow.</p>
<blockquote>
<p>I think git enters a whole other realm the moment you start working in teams -- there are so many cool different flows and ways that people can commit code, share code, and add code to your repo open-source or closed-source-wise. — <a target="_blank" href="https://syntax.fm/">Scott Tolinski, Syntax.fm</a>.</p>
</blockquote>
<h2 id="heading-why-should-you-write-better-commit-messages">Why should you write better commit messages?</h2>
<p>I challenge you to open up a personal project or any repository for that matter and run <code>git log</code> to view a list of old commit messages. The vast majority of us who have run through tutorials or made quick fixes will say "Yep... I have absolutely no idea what I meant by 'Fix style' 6 months ago." </p>
<p>Perhaps you have encountered code in a professional environment where you had no idea what it was doing or meant for. You've been left in the dark without code comments or a traceable history, and even wondering "what are the odds this will break everything if I remove this line?"</p>
<h3 id="heading-back-to-the-future">Back to the Future</h3>
<p>By writing good commits, you are simply future-proofing yourself. You could save yourself and/or coworkers hours of digging around while troubleshooting by providing that helpful description. </p>
<p>The extra time it takes to write a thoughtful commit message as a letter to your potential future self is extremely worthwhile. On large scale projects, documentation is imperative for maintenance. </p>
<p>Collaboration and communication are of utmost importance within engineering teams. The Git commit message is a prime example of this. I highly suggest setting up a convention for commit messages on your team if you do not already have one in place.</p>
<h2 id="heading-the-anatomy-of-a-commit-message">The Anatomy of a Commit Message</h2>
<h4 id="heading-basic">Basic:</h4>
<p><code>git commit -m &lt;message&gt;</code></p>
<h4 id="heading-detailed">Detailed:</h4>
<p><code>git commit -m &lt;title&gt; -m &lt;description&gt;</code></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/Screen-Shot-2022-01-03-at-10.31.49-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-5-steps-to-write-better-commit-messages">5 Steps to Write Better Commit Messages</h2>
<p> Let's summarize the suggested guidelines:</p>
<ol>
<li>Capitalization and Punctuation: Capitalize the first word and do not end in punctuation. If using Conventional Commits, remember to use all lowercase. </li>
<li>Mood: Use imperative mood in the subject line. Example – <code>Add fix for dark mode toggle state</code>. Imperative mood gives the tone you are giving an order or request.</li>
<li>Type of Commit: Specify the type of commit. It is recommended and can be even more beneficial to have a consistent set of words to describe your changes. Example: Bugfix, Update, Refactor, Bump, and so on. See the section on Conventional Commits below for additional information. </li>
<li>Length: The first line should ideally be no longer than 50 characters, and the body should be restricted to 72 characters.</li>
<li>Content: Be direct, try to eliminate filler words and phrases in these sentences (examples: though, maybe, I think, kind of). Think like a journalist. </li>
</ol>
<h3 id="heading-how-to-find-your-inner-journalist">How to Find Your Inner Journalist</h3>
<p>I never quite thought my Journalism minor would benefit my future career as a Software Engineer, but here we are!   </p>
<p>Journalists and writers ask themselves questions to ensure their article is detailed, straightforward, and answers all of the reader's questions. </p>
<p>When writing an article they look to answer <em>who</em>, <em>what</em>, <em>where</em>, <em>when</em>, <em>why</em> and <em>how.</em>  For committing purposes, it is most important to answer the what and why for our commit messages. </p>
<p>To come up with thoughtful commits, consider the following: </p>
<ul>
<li>Why have I made these changes?</li>
<li>What effect have my changes made?</li>
<li>Why was the change needed?</li>
<li>What are the changes in reference to?</li>
</ul>
<p>Assume the reader does not understand what the commit is addressing. They may not have access to the story addressing the detailed background of the change.</p>
<p>Don't expect the code to be self-explanatory. This is similar to the point above. </p>
<p>It might seem obvious to you, the programmer, if you're updating something like CSS styles since it is visual. You may have intimate knowledge on why these changes were needed at the time, but it's unlikely you will recall why you did that hundreds of pull requests later. </p>
<p>Make it clear <em>why</em> that change was made, and note if it may be crucial for the functionality or not.  </p>
<p>See the differences below:</p>
<ol>
<li><code>git commit -m 'Add margin'</code></li>
<li><code>git commit -m 'Add margin to nav items to prevent them from overlapping the logo'</code></li>
</ol>
<p>It is clear which of these would be more useful to future readers.   </p>
<p>Pretend you're writing an important newsworthy article. Give the headline that will sum up what happened and what is important. Then, provide further details in the body in an organized fashion.   </p>
<p>In filmmaking, it is often quoted "show, don't tell" using visuals as the communication medium compared to a verbal explanation of what is happening.</p>
<p>In our case, "<strong>tell</strong>, don't [just] show" – though we have some visuals at our disposal such as the browser, most of the specifics come from reading the physical code.  </p>
<p>If you're a VSCode user, download the <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=waderyan.gitblame">Git Blame</a> extension. This is a prime example of when useful commit messages are helpful to future developers. </p>
<p>This plugin will list the person who made the change, the date of the changes, as well as the commit message commented inline. </p>
<p>Imagine how useful this could be in troubleshooting a bug or back-tracing changes made. Other honorable mentions to see Git historical information are <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory">Git History</a> and <a target="_blank" href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens">GitLens</a>. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/01/Screen-Shot-2022-01-03-at-10.45.49-AM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-conventional-commits">Conventional Commits</h2>
<p>Now that we've covered basic commit structure of a good commit message, I'd like to introduce Conventional Commits to help provide some detail on creating solid commit messages.   </p>
<p>At D2iQ, we use Conventional Commit which is a great practice among engineering teams. Conventional Commit is a formatting convention that provides a set of rules to formulate a consistent commit message structure like so:</p>
<pre><code>&lt;type&gt;[optional scope]: <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">description</span>&gt;</span>

[optional body]

[optional footer(s)]</span>
</code></pre><p>The commit type can include the following:</p>
<ul>
<li><code>feat</code> – a new feature is introduced with the changes</li>
<li><code>fix</code> – a bug fix has occurred</li>
<li><code>chore</code> – changes that do not relate to a fix or feature and don't modify src or test files (for example updating dependencies)</li>
<li><code>refactor</code> – refactored code that neither fixes a bug nor adds a feature </li>
<li><code>docs</code> – updates to documentation such as a the README or other markdown files</li>
<li><code>style</code> – changes that do not affect the meaning of the code, likely related to code formatting such as white-space, missing semi-colons, and so on.</li>
<li><code>test</code> – including new or correcting previous tests </li>
<li><code>perf</code> – performance improvements</li>
<li><code>ci</code> – continuous integration related</li>
<li><code>build</code> – changes that affect the build system or external dependencies </li>
<li><code>revert</code> – reverts a previous commit </li>
</ul>
<p>The commit type subject line should be all lowercase with a character limit to encourage succinct descriptions. </p>
<p>The optional commit body should be used to provide further detail that cannot fit within the character limitations of the subject line description. </p>
<p>It is also a good location to utilize <code>BREAKING CHANGE: &lt;description&gt;</code> to note the reason for a breaking change within the commit. </p>
<p>The footer is also optional. We use the footer to link the JIRA story that would be closed with these changes for example: <code>Closes D2IQ-&lt;JIRA #&gt;</code> .</p>
<h4 id="heading-full-conventional-commit-example">Full Conventional Commit Example</h4>
<pre><code>fix: fix foo to enable bar

This fixes the broken behavior <span class="hljs-keyword">of</span> the component by doing xyz. 

BREAKING CHANGE
Before <span class="hljs-built_in">this</span> fix foo wasn<span class="hljs-string">'t enabled at all, behavior changes from &lt;old&gt; to &lt;new&gt;

Closes D2IQ-12345</span>
</code></pre><p>To ensure that these committing conventions remain consistent across developers, commit message linting can be configured before changes are able to be pushed up. <a target="_blank" href="https://commitizen-tools.github.io/commitizen/">Commitizen</a> is a great tool to enforce standards, sync up semantic versioning, along with other helpful features.</p>
<p>To aid in adoption of these conventions, it's helpful to include guidelines for commits in a contributing or README markdown file within your projects.</p>
<p>Conventional Commit works particularly well with semantic versioning (learn more at <a target="_blank" href="https://semver.org/">SemVer.org</a>) where commit types can update the appropriate version to release.  You can also <a target="_blank" href="https://www.conventionalcommits.org/en/v1.0.0/">read more about Conventional Commits here</a>.</p>
<h2 id="heading-commit-message-comparisons">Commit Message Comparisons</h2>
<p>Review the following messages and see how many of the suggested guidelines they check off in each category.</p>
<h4 id="heading-good">Good</h4>
<ul>
<li><code>feat: improve performance with lazy load implementation for images</code></li>
<li><code>chore: update npm dependency to latest version</code></li>
<li><code>Fix bug preventing users from submitting the subscribe form</code></li>
<li><code>Update incorrect client phone number within footer body per client request</code></li>
</ul>
<h4 id="heading-bad">Bad</h4>
<ul>
<li><code>fixed bug on landing page</code></li>
<li><code>Changed style</code></li>
<li><code>oops</code></li>
<li><code>I think I fixed it this time?</code></li>
<li>empty commit messages</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Writing good commit messages is an extremely beneficial skill to develop, and it helps you communicate and collaborate with your team. Commits serve as an archive of changes. They can become an ancient manuscript to help us decipher the past, and make reasoned decisions in the future.</p>
<p>There is an existing set of agreed-upon standards we can follow, but as long as your team agrees upon a convention that is descriptive with future readers in mind, there will undoubtedly be long-term benefits.</p>
<p>In this article, we've learned some tactics to level up our commit messages. How do you think these techniques can improve your commits?</p>
<p>I hope you've learned something new, thanks for reading! </p>
<p>Connect with me on Twitter <a target="_blank" href="https://twitter.com/ui_natalie">@ui_natalie</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Write a Good README File for Your GitHub Project ]]>
                </title>
                <description>
                    <![CDATA[ When I was first introduced to GitHub, I had no idea what it was or what it could do. Between you and me, I created the account because I was told every developer should have one where they push their code.  For the longest time as a beginner I ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-write-a-good-readme-file/</link>
                <guid isPermaLink="false">66b8dbe26ebbe64e37d83849</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ documentation ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ version control ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Hillary Nyakundi ]]>
                </dc:creator>
                <pubDate>Wed, 08 Dec 2021 22:59:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/04/uide-to-writting-a-good-readme-file--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>When I was first introduced to GitHub, I had no idea what it was or what it could do. Between you and me, I created the account because I was told every developer should have one where they push their code. </p>
<p>For the longest time as a beginner I did nothing with my account. But then, becuase of my passion in tech, I started following other developers and checking out their work on GitHub. And I noticed something they had in common: they all had cool projects and contributed to open source, but their projects also had detailed <strong>README files</strong>. </p>
<p>So my interest in what a README was grew, and I decided to try and add one in my projects, too. I won't lie – I did it in a hurry without any knowledge of how it should be done. And honestly it wasn't great at all. Check it out <a target="_blank" href="https://github.com/larymak/ToDo-list-App/tree/v1.0">HERE</a>.</p>
<p>And that was how it stayed for a period of time. But with practice and continuous learning I was able to change to some better documentation like <a target="_blank" href="https://github.com/larymak/Python-project-Scripts">THIS</a>, which improved engagement with the project and helped other devs get involved. </p>
<p>It is also important to note that a good README will help you stand out among the large crowd of developers who put their work on GitHub.</p>
<p>In this article, we'll learn more about what a README file is and how to write one. First let's understand what we mean by a README file.</p>
<h2 id="heading-what-is-a-readme-file">What is a README File?</h2>
<p>In simple words, we can describe a README file as a guide that gives users a detailed description of a project you have worked on. </p>
<p>It can also be described as documentation with guidelines on how to use a project. Usually it will have instructions on how to install and run the project. </p>
<p>It is essential for you as a developer to know how to document your project by writing a README because:</p>
<ul>
<li>It is the first file a person will see when they encounter your project, so it should be fairly brief but detailed.</li>
<li>It will make your project standout from a bunch of others. Also be sure your project is good too.</li>
<li>It will help you focus on what your project needs to deliver and how.</li>
<li>It will improve your writing skills, just as Friedrich Nietzsche said:<blockquote>
<p>A good writer possesses not only his own spirit but also the spirit of his friends. </p>
</blockquote>
</li>
</ul>
<p>While working on a project, keep in mind that you will need other developers to understand your code and what it does. So accompanying it with an extra guide will be really helpful. </p>
<p>For instance, my earlier shared example of my <a target="_blank" href="https://github.com/larymak/ToDo-list-App/tree/v1.0">first project</a> does not have a good README. And even though the project was amazing, it would've been hard for a beginner to understand exactly what was expected when they cloned my repo. Who knows maybe it could've even been a coded virus. </p>
<p>With a project like this on GitHub, no matter how amazing it is, other devs won't be eager to work on it and try to figure it out without a good README. </p>
<p>Now, have a look at this <a target="_blank" href="https://github.com/larymak/Html-Css-Recap">project</a>. Here, you are able to understand what the project does, what it entails, and how to get started if you need to use or want to contribute to the project. </p>
<p>You see, that's how powerful a well written README is and how it can change you project. </p>
<p>So, let's get started on how to write one for you too.</p>
<h2 id="heading-how-to-write-a-good-readme-a-step-by-step-guide">How to Write a Good README – a Step by Step Guide</h2>
<p>A very important thing to note is that there's not one right way to structure a good README. But there is one very wrong way, and that is to not include a README at all. </p>
<p>From research and studying various README files, for sure there are some best practices that I have found. And that's what I will be sharing. As I usually tell my self: </p>
<blockquote>
<p>Every day is a learning day. </p>
</blockquote>
<p>So as you progress and advance in your career, you will develop your own ideas about what makes a good README and how to improve on it. Perhaps you'll even come up with your own unique guide. </p>
<p>Before we get started, it is also important to note that when you're writing your project's README, it should be able to answer the <strong>what</strong>, <strong>why</strong>, and the <strong>how</strong> of the project. </p>
<p>Here are some guide questions that will help you out: </p>
<ul>
<li>What was your motivation?</li>
<li>Why did you build this project?</li>
<li>What problem does it solve?</li>
<li>What did you learn?</li>
<li>What makes your project stand out? 
If your project has a lot of features, consider adding a "Features" section and listing them here. </li>
</ul>
<h2 id="heading-what-to-include-in-your-readme">What to Include in your README</h2>
<h3 id="heading-1-projects-title">1. Project's Title</h3>
<p>This is the name of the project. It describes the whole project in one sentence, and helps people understand <strong>what</strong> the main goal and aim of the project is.</p>
<h3 id="heading-2-project-description">2. Project Description</h3>
<p>This is an important component of your project that many new developers often overlook. </p>
<p>Your description is an extremely important aspect of your project. A well-crafted description allows you to show off your work to other developers as well as potential employers. </p>
<p>The quality of a README description often differentiates a good project from a bad project. A good one takes advantage of the opportunity to explain and showcase: </p>
<ul>
<li>What your application does,</li>
<li>Why you used the technologies you used,</li>
<li>Some of the challenges you faced and features you hope to implement in the future. </li>
</ul>
<h3 id="heading-3-table-of-contents-optional">3. Table of Contents (Optional)</h3>
<p>If your README is very long, you might want to add a table of contents to make it easy for users to navigate to different sections easily. It will make it easier for readers to move around the project with ease. </p>
<h3 id="heading-4-how-to-install-and-run-the-project">4. How to Install and Run the Project</h3>
<p>If you are working on a project that a user needs to install or run locally in a machine like a "POS", you should include the steps required to install your project and also the required dependencies if any. </p>
<p>Provide a step-by-step description of how to get the development environment set and running. </p>
<h3 id="heading-5-how-to-use-the-project">5. How to Use the Project</h3>
<p>Provide instructions and examples so users/contributors can use the project. This will make it easy for them in case they encounter a problem – they will always have a place to reference what is expected.</p>
<p>You can also make use of visual aids by including materials like screenshots to show examples of the running project and also the structure and design principles used in your project. </p>
<p>Also if your project will require authentication like passwords or usernames, this is a good section to include the credentials.</p>
<h3 id="heading-6-include-credits">6. Include Credits</h3>
<p>If you worked on the project as a team or an organization, list your collaborators/team members. You should also include links to their GitHub profiles and social media too.</p>
<p>Also, if you followed tutorials or referenced a certain material that might help the user to build that particular project, include links to those here as well. </p>
<p>This is just a way to show your appreciation and also to help others get a first hand copy of the project. </p>
<h3 id="heading-7-add-a-license">7. Add a License</h3>
<p>For most README files, this is usually considered the last part. It lets other developers know what they can and cannot do with your project. </p>
<p>We have different types of licenses depending on the kind of project you are working on. Depending on the one you will choose it will determine the contributions your project gets. </p>
<p>The most common one is the GPL License which allows other to make modification to your code and use it for commercial purposes. If you need help choosing a license, use check out this link: https://choosealicense.com/</p>
<p>Up to this point what we have covered are the minimum requirements for a good README. But you might also want to consider adding the following sections to make it more eye catching and interactive. </p>
<h2 id="heading-additional-readme-sections">Additional README Sections</h2>
<h3 id="heading-8-badges">8. Badges</h3>
<p>Badges aren't necessary, but using them is a simple way of letting other developers know that you know what you're doing. </p>
<p>Having this section can also be helpful to help link to important tools and also show some simple stats about your project like the number of forks, contributors, open issues etc... </p>
<p>Below is a screenshot from one of my projects that shows how you can make use of badges: </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/11/check.png" alt="badges" width="600" height="400" loading="lazy"></p>
<p>The good thing about this section is that it automatically updates it self.</p>
<p>Don't know where to get them from? Check out the badges hosted by <a target="_blank" href="https://shields.io/">shields.io</a>. They have a ton of badges to help you get started. You may not understand what they all represent now, but you will in time. </p>
<h3 id="heading-9-how-to-contribute-to-the-project">9. How to Contribute to the Project</h3>
<p>This mostly will be useful if you are developing an open-source project that you will need other developers to contribute to. You will want to add guidelines to let them know how they can contribute to your project. </p>
<p>Also it is important to make sure that the licence you choose for an open-source projects is correct to avoid future conflicts. And adding contribution guidelines will play a big role.</p>
<p>Some of the most common guidelines include the <a target="_blank" href="https://www.contributor-covenant.org/">Contributor Covenant</a> and the <a target="_blank" href="https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/setting-guidelines-for-repository-contributors">Contributing guide</a>. Thes docs will give you the help you need when setting rules for your project. </p>
<h3 id="heading-10-include-tests">10. Include Tests</h3>
<p>Go the extra mile and write tests for your application. Then provide code examples and how to run them. </p>
<p>This will help show that you are certain and confident that your project will work without any challenges, which will give other people confidence in it, too </p>
<h3 id="heading-extra-points">Extra points</h3>
<p>Here are a few extra points to note when you're writing your README:</p>
<ul>
<li>Keep it up-to-date - It is a good practise to make sure your file is always up-to-date. In case there are changes make sure to update the file where necessary.</li>
<li>Pick a language - We all come from different zones and we all speak different languages. But this does not mean you need to translate your code into vernacular. Writing your README in English will work since English is a globally accepted language. You might want to use a translator tool here if your target audience isn't familiar with English.</li>
</ul>
<h2 id="heading-wrap-up">Wrap Up</h2>
<p>There you have it, everything you need to improve your README files, or even get you started with writing your first one. </p>
<p>At this point I am confident that you are in a position to add an interactive and inforamative guide to your next project or even an existing one and make your project standout. </p>
<p>There are many tools which you can also use to automatically generate a README for your project, but it's always a good practice to try it on your own before moving to automation. In case you want to check them out, they include: </p>
<ul>
<li><a target="_blank" href="https://www.makeareadme.com/">Make a README</a></li>
<li><a target="_blank" href="https://rahuldkjain.github.io/gh-profile-readme-generator/">README Generator</a></li>
<li><a target="_blank" href="https://github.com/kefranabg/readme-md-generator">README</a> </li>
</ul>
<p>If you have read this far I really appreciate it. If you enjoyed this article and found it helpful, please share it so you can help another developer improve their projects.</p>
<p>I would love to see your newly crafted README file. Be sure to share a link with me via any of the links below:</p>
<p>Connect With me at <a target="_blank" href="https://twitter.com/larymak1">Twitter</a> | <a target="_blank" href="https://www.youtube.com/channel/UCrT1ARRZfLOuf6nc_97eXEg">YouTube</a> | <a target="_blank" href="https://www.linkedin.com/in/hillary-nyakundi-3a64b11ab/">LinkedIn</a> | <a target="_blank" href="https://github.com/larymak">GitHub</a></p>
<p>Do share your valuable opinion, I appreciate your honest feedback!</p>
<p>Enjoy Coding ❤</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
