TL;DR:

  • If you don’t write code your score will decrease because of the score aging, so write code frequently to avoid score aging.
  • Add more sources that you use (GitLab, StackOverflow, etc.).

What do we measure?

The goal of our scoring algorithm is to measure the experience of the developers. It means if somebody has a higher score she is probably more experienced than someone else with less score.

Our scoring algorithm tries to solve the regular “years of experience” problem by measuring weekly productivity.

What is wrong with the “X years of experience”?

Experience is not just a number of years. Somebody who started to code 5 years ago in Java and usually writes code only once a weekly is most likely less experienced than someone who started 3 years ago but writes code every day. 

Moreover, assume there are 2 developers, both with 5 years of experience, but one of them stopped coding 5 years ago. In this case, the second developer who is still active is probably more experienced than another developer whos knowledge might get rusty during the last 5 inactive years.  

When we calculate your experience we consider the following factors:

  • how long have you been using a given technology,
  • how active you are,
  • how much you forgot,
  • did you have a chance to learn from others?

How do we evaluate different sources?

StackOverflow

We connect to the StackOverflow API to get the questions and answers you have written. Based on the answers’, questions’ tags we merge the scores to the given technology. E.g. you answered a question that has PHP and Laravel tags. That answer will increase your scores in PHP and Laravel.

Repositories

We can evaluate any Git repository. Currently, we have integration with GitHub and GitLab repositories. It means you just have to link your Github or GitLab account (by OAuth or access token), and we will find and evaluate all the repos you committed into.

However, if you have a repository stored other than these, you can still upload a repository manually.

How does it work?

As a first step, we extract some data from the git repository. Such as

  • imported libraries, frameworks,
  • changed files,
  • the used programming language, 
  • the hash of the author’s name and email.

The export looks like this:

 {
    "numberOfTags": 0,
    "localUsernames": [
        "Peter Karakas -> karakas.peter@gmail.com",
        "P\u00e9ter Karakas -> peter.karakas@codersrank.io"
    ],
    "primaryRemoteUrl": "f7e6b0731310030d9c28d286ae4961e7",
    "commits": [
        {
            "authorEmail": "8348206855e2e23e3832481d65e1c3c4",
            "isDuplicated": false,
            "authorName": "22e8173f806cfa407c4a7acef9ebaf03",
            "parents": [
                "1f2c3a2fe6c06e37fa2cd0fca896727bc4da5f99"
            ],
            "commitHash": "84e79f5785479abd441d59f60d1e04cad4821d01",
            "isMerge": false,
            "changedFiles": [
                {
                    "deletions": 1,
                    "insertions": 1,
                    "language": "Go",
                    "fileName": "fad58de7366495db4650cfefac2fcd61.go"
                }
            ],
            "createdAt": "2018-11-06 22:41:22"
        },
        …
    ],
    "remotes": {
        "origin": "f7e6b0731310030d9c28d286ae4961e7"
    },
    "repoName": "user",
    "numberOfBranches": 11
}

Many things are hashed. Basically, when we calculate the score, we don’t have to know the name of the author, we just have to know which changes belong to the same user.

The same is true for the file names. We don’t need the exact file name, just the programming language of the file. We are living in a world where data might be very sensitive, and knowing less makes us comfortable.

You are interested can see how our extracting algorithm works in GitHub: https://github.com/codersrank-org/repo_info_extractor

Here you can also see the currently supported libraries: https://github.com/codersrank-org/libraries. Feel free to contribute.

Refreshing your scores

Every week we regenerate the scores by default for everybody who registered. But if you want to refresh your scores you can do it manually too.

Just go to your profile and press the refresh button under the Total Score number.

Conclude

We know this scoring isn’t flawless. However, we are constantly improving it. If you have any questions or feedback feel free to discuss it on Reddit or join our Slack community.

Author

CMO@ CodersRank.io | Our goal is supporting CODERS growth by their always up to date, professional CodersRank profile.

1 Comment

Write A Comment