The secret sauce: How does Codealike track developers’ time?

What do we track?

The current version of Codealike supports Visual Studio and Eclipse IDEs.

For Visual Studio, Codealike works monitoring the following set of Events:

  • DocumentFocus
  • DocumentEdit
  • OpenSolution
  • CloseSolution
  • BuildSolutionFailed
  • BuildSolutionSucceeded
  • BuildSolutionCancelled
  • BuildProject
  • BuildProjectFailed
  • BuildProjectSucceeded
  • BuildProjectCancelled

In the case of Eclipse, Codealike makes a mapping from the available events in that IDE to the previous list of events. But since the concept of Solution doesn’t exist in Eclipse, the solution’s related events are associated with those for projects.

By listening at these events we defined a set of main and derived states which model the user’s activities while interacting with the IDE.

Main States

  • Coding:  this state is active when the IDE has focus and it’s not in a debug or build mode:
  • Debugging: the IDE has focus and it is under a debug mode
  • Building: the IDE has focus and the developer is building a solution.
  • Idle: this state occurs when after a period of coding, debugging or building activities, the user leaves the IDE. This state tries to model an intermediate state when we presume that the developer can be still set on a coding mode but we are not sure about it.

Derived States

  • Reading: user is in a coding or debugging state but haven’t edited the file
  • Editing: user is modifying a file inside the IDE.

For the main states we consider a tolerance threshold to smooth activities transitions. When the user goes outside the IDE during a short interval (less than 1 minute) and then he backs to the previous state, we ignore the transition and consider it as a continuous interval. During these short interruptions we assume that the mental state (short term memory) is not affected by context switching.

We also apply a threshold for the maximum Idle state duration. In the current implementation it’s set to 7 minutes. When the user is out of the IDE during a time longer than that threshold, we consider an inactive state.

The following figure shows the states machine for the defined model.


What’s the level of detail of the tracked data?

The current Codealike implementation supports Visual Studio and Eclipse IDEs. But in each of these environments not all the languages have the same level of detail on the recorded data.

For most of the languages supported by these IDEs Codalike records the data at the level of file names. So the information displayed at Codealike Code Tree, or Code Usage show states of debugging, building and coding to that level.

Beside this basic language support, for some languages there is an Advanced Language Support. That support means that the captured data also includes namespaces, class names and method names. Advanced Language support includes C# and VB.Net for the Visual Studio environment and Java for Eclipse.


What do we track from Visual Studio?

Tracked Information File Namespace Class Method



Eclipse[1]What do we track from

Tracked Information File Package Class Member

Let us know your thoughts and suggestions. Send us your feedback.

Leave a Reply