<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alex</title>
    <description>The latest articles on DEV Community by Alex (@warranteng).</description>
    <link>https://dev.to/warranteng</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3947701%2Ffb6a8d51-ce1c-4b28-88ce-2bf9d09fe420.png</url>
      <title>DEV Community: Alex</title>
      <link>https://dev.to/warranteng</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/warranteng"/>
    <language>en</language>
    <item>
      <title>How do you verify GitHub contributions without trusting self-reported skills?</title>
      <dc:creator>Alex</dc:creator>
      <pubDate>Sat, 23 May 2026 13:23:38 +0000</pubDate>
      <link>https://dev.to/warranteng/how-do-you-verify-github-contributions-without-trusting-self-reported-skills-1g1n</link>
      <guid>https://dev.to/warranteng/how-do-you-verify-github-contributions-without-trusting-self-reported-skills-1g1n</guid>
      <description>&lt;p&gt;I've been thinking about a problem that doesn't get talked about enough in hiring: the gap between what someone claims about their work on linkedin and what they actually did.&lt;/p&gt;

&lt;p&gt;Anyone can list "open source contributor" on their resume. Anyone can paste a GitHub repo URL in a portfolio. But without looking at the actual commit history and contributor data — you have no idea if that person wrote 80% of the codebase or merged one typo fix three years ago.&lt;/p&gt;

&lt;p&gt;So I started building a system to verify this properly. Here's what I learned — without giving away the methodology we use, because honestly, the moment you publish your exact algorithm, people optimize for it rather than actually doing the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The naive approach fails immediately
&lt;/h2&gt;

&lt;p&gt;The first instinct is to just check if the person's GitHub handle appears in the contributor list. Simple, right?&lt;/p&gt;

&lt;p&gt;Not quite. Three problems come up immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;People have multiple GitHub accounts.&lt;/strong&gt; Work account, personal account, old account from college. A developer might have significant contributions spread across two or three handles. Checking one handle misses the full picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contribution depth varies wildly.&lt;/strong&gt; Being listed as a contributor could mean 2,000 commits or 1 commit. The contributor list alone doesn't tell you which. You need actual commit counts per author to understand the depth of contribution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Public repos can be submitted by anyone.&lt;/strong&gt; I can submit any famous open source repo to a portfolio system and imply I contributed to it. Without verifying my actual handle against the contributor data, the system has no way to know if I wrote the core architecture or just starred the repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually works — the principles
&lt;/h2&gt;

&lt;p&gt;I'm not going to share the exact scoring formula. But I can share the principles that make verification meaningful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verify account ownership first
&lt;/h3&gt;

&lt;p&gt;Before you can verify contributions, you need to verify identity. The only reliable way to confirm someone owns a GitHub account is OAuth. When someone authenticates via GitHub OAuth, you get a cryptographic proof of ownership — not a claim.&lt;/p&gt;

&lt;p&gt;This is the identity anchor. Every contribution check runs against verified handles only. No claims accepted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Handle the multi-account reality honestly
&lt;/h3&gt;

&lt;p&gt;Developers legitimately use multiple GitHub accounts. A good verification system needs to support this — each additional account verified through its own OAuth flow.&lt;/p&gt;

&lt;p&gt;The critical constraint: one GitHub account should only be linkable to one professional identity. Otherwise the whole system can be gamed by linking someone else's high-signal account to your profile.&lt;/p&gt;

&lt;p&gt;This requires exclusive handle claiming. First claim wins. If a handle is already associated with another profile — it's blocked. No exceptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contribution depth matters more than presence
&lt;/h3&gt;

&lt;p&gt;There's a meaningful difference between someone who authored 40% of a codebase and someone who fixed a typo. Both show up in the contributor list. Only one actually shaped the project.&lt;/p&gt;

&lt;p&gt;The verification system needs to reflect this distinction. Not all verified contributions are equal. Depth matters. History matters. Consistency over time matters more than a spike of activity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unverified doesn't mean worthless — but it means discounted
&lt;/h3&gt;

&lt;p&gt;Not everything can be verified through OAuth. Public repos, old contributions, work done under inaccessible accounts — these are real but can't be fully verified.&lt;/p&gt;

&lt;p&gt;The right approach isn't to ignore unverified sources. It's to discount them heavily and label them clearly. A user should always know what's verified and what isn't. A recruiter should always be able to see the difference at a glance.&lt;/p&gt;

&lt;p&gt;Transparency about what can and can't be verified is more credible than pretending everything is confirmed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gaming prevention is architectural, not cosmetic
&lt;/h3&gt;

&lt;p&gt;If your verification system can be gamed by submitting famous repos you didn't write, it's not a verification system — it's a vanity metric generator.&lt;/p&gt;

&lt;p&gt;The aggregation rules matter as much as the scoring rules. How multiple sources combine, how unverified sources interact with verified ones, how the system handles edge cases — these decisions determine whether the final score means anything.&lt;/p&gt;

&lt;p&gt;We've spent a lot of time on this. The details stay internal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this doesn't solve
&lt;/h2&gt;

&lt;p&gt;No verification system is perfect. Worth being honest about the limitations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit squashing&lt;/strong&gt; — some teams squash all PRs into single commits before merging. A developer who wrote 40 separate commits might appear as 1 in the contributor list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pair programming&lt;/strong&gt; — code written together often gets committed under one person's handle. The other person's contribution is invisible to the API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Private repos&lt;/strong&gt; — everything above works for public repos. Private repos require broader OAuth scope, which is a bigger ask for users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Old accounts&lt;/strong&gt; — significant contributions under an account you no longer have access to can't be verified without OAuth on that account.&lt;/p&gt;

&lt;p&gt;These are real limitations. A verification badge isn't a guarantee — it's evidence. The weight of that evidence depends on the depth and breadth of verified sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters now
&lt;/h2&gt;

&lt;p&gt;LinkedIn profiles are self-reported claims. AI writes perfect ones in 30 seconds. Endorsements come from people who've never seen your code. The entire professional identity system is built on statements that cost nothing to make and nothing to fabricate.&lt;/p&gt;

&lt;p&gt;GitHub commits are different. A three-year commit history with consistent cadence, real collaborators, and downstream ecosystem impact — that can't be generated by a chatbot. That's real signal.&lt;/p&gt;

&lt;p&gt;The question is how to surface that signal in a way that's portable, shareable, and resistant to gaming. That's the problem worth solving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this is heading
&lt;/h2&gt;

&lt;p&gt;I've been building this verification logic into a larger system called Warrant — a proof-of-work portfolio that computes verified scores from GitHub signals rather than letting engineers describe their own skills.&lt;/p&gt;

&lt;p&gt;The exact methodology stays opaque — intentionally. The moment you publish the formula, people optimize for the formula instead of doing real work. We'd rather be the PageRank of professional identity than the ATS keyword game.&lt;/p&gt;

&lt;p&gt;If you're an engineer curious to see what your verified GitHub signals look like, &lt;strong&gt;you can try it at warrant-plum.vercel.app. Free, currently in beta, no credit card&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you've thought hard about contribution verification — I'd genuinely like to hear what edge cases you ran into. The ones I listed above are the ones keeping me up at night.&lt;/p&gt;

</description>
      <category>github</category>
      <category>career</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
