# US 10,310,853 B2 · Coding velocity

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,310,853 B2
- Document ID: US10310853B2
- Status: Granted
- Kind: B2
- Application number: 15/489,441
- Filed: 2017-04-17
- Published: 2018-10-18
- Granted: 2019-06-04
- Earliest claimed: 2017-04-17
- Assignees: Semmle Limited
- Applicants: Semmle Limited
- Inventors: Ian Paul Wright
- Web page: https://patentgrep.com/patent/US10310853B2

## CPC

- G06F 8/77: Software metrics
- G06Q 10/06334: {using forecasting or predicting}
- G06Q 10/06398: {Performance of employee with respect to a job function}
- G06Q 10/0633: Workflow analysis
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- G06Q: INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR

## Abstract

Methods, systems, and apparatus, including computer programs encoded on computer storage media, for computing coding velocity. One of the methods includes receiving a definition of one or more individual source code developers belonging to a target developer entity. Coding-velocity samples for each individual source code developer belonging to the target developer entity are generated, wherein each coding-velocity sample represents a measure of coding activity by the individual source code developer over a respective time duration. The coding-velocity samples are aggregated according to the definition of the target developer entity. A coding-velocity model for the target developer entity is generated from the aggregated coding-velocity samples of the target developer entity. A value of a particular coding-velocity attribute for the target developer entity is computed using the coding-velocity model.

## Claims

### Claim 1

A computer-implemented method comprising:
receiving a definition of a target developer entity, the definition specifying (i) one or more individual source code developers in a population of source code developers and (ii) one or more code bases to which one or more of the one or more individual source code developers have committed source code;
obtaining data representing source code contributions attributed to individual source code developers belonging to the target developer entity, the source code contributions occurring in respective commits by the individual source code developer to the one or more code bases;
obtaining data representing source code contributions attributed to individual source code developers belonging to the population of source code developers;
generating respective coding-velocity samples for each individual source code developer belonging to the target developer entity and for each individual source code developer belonging to the population of source code developers, including computing, for each commit of one or more commits by the individual source code developer to the one or more code bases:
(i) a measure of coding activity for one or more source code contributions in the commit, and
(ii) a time duration between (a) the commit to the one or more code bases by the individual source code developer and (b) a previous commit to any code base by the individual source code developer;
aggregating the coding-velocity samples generated for individual source code developers belonging to the target developer entity according to the definition of the target developer entity including determining which coding-velocity samples generated for each individual source code developer were generated from commits to the one or more code bases specified by the definition of the target developer entity;
aggregating the coding-velocity samples generated for individual source code developers belonging to the population of source code developers according to a same principle of aggregation as the definition of the target developer entity to generate one or more prior developer entities;
generating a coding-velocity model for the target developer entity from the aggregated coding-velocity samples of the target developer entity and the aggregated coding-velocity samples of the one or more prior developer entities, including:
generating, from the aggregated coding-velocity samples for the one or more prior developer entities, a prior distribution that assigns a likeliness to each combination of model parameters for a particular model type,
generating a coding-velocity posterior distribution for the target developer entity, wherein the coding-velocity posterior distribution assigns a likeliness for each combination of model parameters according to the aggregated coding-velocity samples for the one or more prior developer entities and the aggregated coding-velocity samples for the target developer entity,
generating the coding-velocity model from the aggregated coding-velocity samples of the target developer entity and the coding-velocity posterior distribution, wherein the coding-velocity model assigns a likeliness to values of one or more coding-velocity attributes for the target developer entity; and
computing a value of a particular coding-velocity attribute for the target developer entity using the coding-velocity model.

### Claim 2 (depends on 1)

The method of claim 1, wherein computing the value of the particular coding-velocity attribute for the target developer entity using the coding-velocity model comprises computing: (i) a representative coding velocity for the target developer entity, (ii) a coding-velocity range for the target developer entity, (iii) estimated working hours supplied by the target developer entity for a particular time period, or (iv) standard coding hours provided by the target developer entity.

### Claim 3 (depends on 1)

The method of claim 1, wherein generating the coding-velocity model for the target developer entity comprises selecting a single representative set of model parameters from the coding-velocity posterior distribution.

### Claim 4 (depends on 1)

The method of claim 1, wherein generating the coding-velocity model for the target developer entity comprises weighting a plurality of possible models according to the coding-velocity posterior distribution by a likeliness of each possible model according to the coding-velocity posterior distribution.

### Claim 5 (depends on 1)

The method of claim 1, further comprising selecting the population of developers including selecting developers who contributed to projects having one or more matching characteristics of a project for the target developer entity.

### Claim 6 (depends on 1)

The method of claim 1, further comprising selecting developers for the population of developers from a plurality of different code bases.

### Claim 7 (depends on 1)

The method of claim 1, wherein generating coding-velocity samples for individual source code developers of the target developer entity comprises collapsing, into a single commit, multiple commits by a same individual source code developer occurring within a particular time interval.

### Claim 8 (depends on 1)

The method of claim 1, wherein coding velocity is measured in terms of total or net lines of code added, churn, or estimated standard effort per each unit of time.

### Claim 9 (depends on 1)

The method of claim 1, further comprising:
computing, for each developer entity of a plurality of developer entities including the target developer entity, a score using a respective coding-velocity model for the developer entity.

### Claim 10 (depends on 9)

The method of claim 9, wherein computing the score using the respective coding-velocity model for the developer entity comprises computing a coding-velocity point estimate.

### Claim 11 (depends on 10)

The method of claim 10, wherein the coding-velocity point estimate is a mean, median, or mode of the coding-velocity model.

### Claim 12 (depends on 10)

The method of claim 10, further comprising:
ranking the target developer entity relative to one or more other developer entities of the plurality of developer entities based on the coding-velocity point estimate for each developer entity.

### Claim 13 (depends on 12)

The method of claim 12, wherein ranking the target developer entity relative to one or more other developer entities of the plurality of developer entities based on the coding-velocity point estimate for each developer entity comprises ranking each developer entity of the plurality of developer entities according to a measure of stochastic dominance of the respective coding-velocity models for the plurality of developer entities.

### Claim 14 (depends on 13)

The method of claim 13, further comprising computing the measure of stochastic dominance as an approximation of stochastic dominance indicated by sampling the coding-velocity models of each of the plurality of developer entities.

### Claim 15 (depends on 12)

The method of claim 12, wherein ranking the target developer entity relative to one or more other developer entities of the plurality of developer entities based on the coding-velocity point estimate for each developer entity comprises computing a relative coding velocity for each developer entity of the plurality of developer entities, the relative coding velocity being a measure of the coding-velocity point estimate compared to that of a standard developer.

### Claim 16 (depends on 15)

The method of claim 15, further comprising generating a user interface presentation having a scatter plot that plots total estimated working hours versus standard coding hours, wherein the standard coding hours is based on the coding-velocity point estimate and the estimated working hours for each developer entity.

### Claim 17 (depends on 1)

The method of claim 1, further comprising generating a user interface presentation that presents a respective score for each of one or more developer entities or a ranking of a plurality of developer entities.

### Claim 18 (depends on 17)

The method of claim 17, wherein the user interface presentation includes, for each developer entity, one or more coding-velocity ranges that indicate ranges of coding velocity within a particular credibility interval.

### Claim 19 (depends on 1)

The method of claim 1, further comprising generating a user interface presentation that presents a probability distribution for the coding-velocity model of the target developer entity.

### Claim 20 (depends on 1)

The method of claim 1, further comprising:
computing respective representative coding velocities for the target developer entity for each of multiple time periods; and
generating a user interface presentation that plots a change of representative coding velocity over time for the target developer entity.

### Claim 21 (depends on 20)

The method of claim 20, further comprising generating, within the user interface presentation, an illustration of a number of individual source code developers within the target developer entity over time.

### Claim 22 (depends on 1)

The method of claim 1, further comprising:
receiving a request to compute an estimated number of hours required to implement a particular feature requiring a particular amount of code changes; and
using the coding-velocity model to compute the estimated number of hours required to implement the particular feature.

### Claim 23

A system comprising:
one or more computers and one or more storage devices storing instructions that are operable, when executed by the one or more computers, to cause the one or more computers to perform operations comprising:
receiving a definition of a target developer entity, the definition specifying (i) one or more individual source code developers in a population of source code developers and (ii) one or more code bases to which one or more of the one or more individual source code developers have committed source code;
obtaining data representing source code contributions attributed to individual source code developers belonging to the target developer entity, the source code contributions occurring in respective commits by the individual source code developer to the one or more code bases;
obtaining data representing source code contributions attributed to individual source code developers belonging to the population of source code developers;
generating respective coding-velocity samples for each individual source code developer belonging to the target developer entity and for each individual source code developer belonging to the population of source code developers, including computing, for each commit of one or more commits by the individual source code developer to the one or more code bases:
(i) a measure of coding activity for one or more source code contributions in the commit, and
(ii) a time duration between (a) the commit to the one or more code bases by the individual source code developer and (b) a previous commit to any code base by the individual source code developer;
aggregating the coding-velocity samples generated for individual source code developers belonging to the target developer entity according to the definition of the target developer entity including determining which coding-velocity samples generated for each individual source code developer were generated from commits to the one or more code bases specified by the definition of the target developer entity;
aggregating the coding-velocity samples generated for individual source code developers belonging to the population of source code developers according to a same principle of aggregation as the definition of the target developer entity to generate one or more prior developer entities;
generating a coding-velocity model for the target developer entity from the aggregated coding-velocity samples of the target developer entity and the aggregated coding-velocity samples of the one or more prior developer entities, including:
generating, from the aggregated coding-velocity samples for the one or more prior developer entities, a prior distribution that assigns a likeliness to each combination of model parameters for a particular model type,
generating a coding-velocity posterior distribution for the target developer entity, wherein the coding-velocity posterior distribution assigns a likeliness for each combination of model parameters according to the aggregated coding-velocity samples for the one or more prior developer entities and the aggregated coding-velocity samples for the target developer entity,
generating the coding-velocity model from the aggregated coding-velocity samples of the target developer entity and the coding-velocity posterior distribution, wherein the coding-velocity model assigns a likeliness to values of one or more coding-velocity attributes for the target developer entity; and
computing a value of a particular coding-velocity attribute for the target developer entity using the coding-velocity model.

### Claim 24 (depends on 23)

The system of claim 23, wherein computing the value of the particular coding-velocity attribute for the target developer entity using the coding-velocity model comprises computing: (i) a representative coding velocity for the target developer entity, (ii) a coding-velocity range for the target developer entity, (iii) estimated working hours supplied by the target developer entity for a particular time period, or (iv) standard coding hours provided by the target developer entity.

### Claim 25 (depends on 23)

The system of claim 23, wherein generating the coding-velocity model for the target developer entity comprises selecting a single representative set of model parameters from the coding-velocity posterior distribution.

### Claim 26

A computer program product, encoded on one or more non-transitory computer storage media, comprising instructions that when executed by one or more computers cause the one or more computers to perform operations comprising:
receiving a definition of a target developer entity, the definition specifying (i) one or more individual source code developers in a population of source code developers and (ii) one or more code bases to which one or more of the one or more individual source code developers have committed source code;
obtaining data representing source code contributions attributed to individual source code developers belonging to the target developer entity, the source code contributions occurring in respective commits by the individual source code developer to the one or more code bases;
obtaining data representing source code contributions attributed to individual source code developers belonging to the population of source code developers;
generating respective coding-velocity samples for each individual source code developer belonging to the target developer entity and for each individual source code developer belonging to the population of source code developers, including computing, for each commit of one or more commits by the individual source code developer to the one or more code bases:
(i) a measure of coding activity for one or more source code contributions in the commit, and
(ii) a time duration between (a) the commit to the one or more code bases by the individual source code developer and (b) a previous commit to any code base by the individual source code developer;
aggregating the coding-velocity samples generated for individual source code developers belonging to the target developer entity according to the definition of the target developer entity including determining which coding-velocity samples generated for each individual source code developer were generated from commits to the one or more code bases specified by the definition of the target developer entity;
aggregating the coding-velocity samples generated for individual source code developers belonging to the population of source code developers according to a same principle of aggregation as the definition of the target developer entity to generate one or more prior developer entities;
generating a coding-velocity model for the target developer entity from the aggregated coding-velocity samples of the target developer entity and the aggregated coding-velocity samples of the one or more prior developer entities, including:
generating, from the aggregated coding-velocity samples for the one or more prior developer entities, a prior distribution that assigns a likeliness to each combination of model parameters for a particular model type,
generating a coding-velocity posterior distribution for the target developer entity, wherein the coding-velocity posterior distribution assigns a likeliness for each combination of model parameters according to the aggregated coding-velocity samples for the one or more prior developer entities and the aggregated coding-velocity samples for the target developer entity,
generating the coding-velocity model from the aggregated coding-velocity samples of the target developer entity and the coding-velocity posterior distribution, wherein the coding-velocity model assigns a likeliness to values of one or more coding-velocity attributes for the target developer entity; and
computing a value of a particular coding-velocity attribute for the target developer entity using the coding-velocity model.

### Claim 27 (depends on 26)

The computer program product of claim 26, wherein computing the value of the particular coding-velocity attribute for the target developer entity using the coding-velocity model comprises computing: (i) a representative coding velocity for the target developer entity, (ii) a coding-velocity range for the target developer entity, (iii) estimated working hours supplied by the target developer entity for a particular time period, or (iv) standard coding hours provided by the target developer entity.

### Claim 28 (depends on 26)

The computer program product of claim 26, wherein generating the coding-velocity model for the target developer entity comprises selecting a single representative set of model parameters from the coding-velocity posterior distribution.

### Claim 29 (depends on 26)

The computer program product of claim 26, wherein the operations further comprise generating a user interface presentation having a scatter plot that plots total estimated working hours versus standard coding hours, wherein the standard coding hours is based on a coding-velocity point estimate and estimated working hours for each developer entity.

### Claim 30 (depends on 26)

The computer program product of claim 26, wherein the operations further comprise generating a user interface presentation that presents a respective score for each of one or more developer entities or a ranking of a plurality of developer entities.

### Claim 31 (depends on 26)

The computer program product of claim 26, wherein the operations further comprise:
computing respective representative coding velocities for the target developer entity for each of multiple time periods; and
generating a user interface presentation that plots a change of representative coding velocity over time for the target developer entity.

### Claim 32 (depends on 31)

The computer program product of claim 31, wherein the operations further comprise generating, within the user interface presentation, an illustration of a number of individual source code developers within the target developer entity over time.

### Claim 33 (depends on 23)

The system of claim 23, wherein the operations further comprise generating a user interface presentation having a scatter plot that plots total estimated working hours versus standard coding hours, wherein the standard coding hours is based on a coding-velocity point estimate and estimated working hours for each developer entity.

### Claim 34 (depends on 23)

The system of claim 23, wherein the operations further comprise generating a user interface presentation that presents a respective score for each of one or more developer entities or a ranking of a plurality of developer entities.

### Claim 35 (depends on 23)

The system of claim 23, wherein the operations further comprise:
computing respective representative coding velocities for the target developer entity for each of multiple time periods; and
generating a user interface presentation that plots a change of representative coding velocity over time for the target developer entity.

### Claim 36 (depends on 35)

The system of claim 35, wherein the operations further comprise generating, within the user interface presentation, an illustration of a number of individual source code developers within the target developer entity over time.
