Supporting Developer Workflows

Developer Productivity
HASEL
Papers
Personal Analytics
Research

One of the biggest impediments to a software developer’s productivity in today’s work environments is that developers switch frequently between tasks, applications and artifacts (and constantly need to (re)locate, understand and integrate several pieces of information. These context switches and broad information needs result in a high fragmentation of work, and incur a high cost, including decreased focus, higher cognitive costs, slower overall performance, long task resumption lags, increased stress, and a higher error and software defect rate.

Little is known about how to best detect and integrate relevant information and context from various artifacts and applications to better support the cross-application, cross-artifact, and multi-tasking nature of development work.

Our work focuses on software developers’ workflows and task context to reduce the cost of context switches and increase productivity. In particular, our work focuses on smoothing developers’ cross-application workflows, on helping developers to curate and rediscover tacit task context, and on (semi-automatically) detecting and labeling developer tasks.

Developers’ are experiencing frequent context switches, resulting in a high fragmentation of work:

One example of the high price of context switching:

The high price of context switching for developers & ways to avoid it

Selected Publications

Semi-Automatic, Inline and Collaborative Web Page Code Curations

Developer Productivity
HASEL
Papers
Personal Analytics
Research
Software developers spend about a quarter of their workday using the web to fulfill various information needs. Searching for relevant information online can be time-consuming, yet acquired information is rarely systematically persisted for later reference. In this work, we introduce SALI, an approach for semi-automated linking web pages to source code locations inline with the source code. SALI helps developers naturally capture high-quality, explicit links between web pages and specific source code locations by suggesting links for curation within the IDE. Through two laboratory studies, we examined the developer’s ability to both curate and consume links between web pages and specific source code locations while performing software development tasks. The studies were performed with 20 subjects working on realistic software change tasks from widely-used open-source projects. Results showed that developers continuously and concisely curate web pages at meaningful locations in the code with little effort. Additionally, we showed that other developers could use these curations while performing new and different change tasks to speed up relevant information gathering within unfamiliar codebases by a factor of 2.4.

Identifying and Describing Information Seeking Tasks

Developer Productivity
HASEL
Papers
Personal Analytics
Research
A software developer works on many tasks per day, frequently switching between these tasks back and forth. This constant churn of tasks makes it difficult for a developer to know the specifics of when they worked on what task, complicating task resumption, planning, retrospection, and reporting activities. In a first step towards an automated aid to this issue, we introduce a new approach to help identify the topic of work during an information seeking task — one of the most common types of tasks that software developers face — that is based on capturing the contents of the developer’s active window at regular intervals and creating a vector representation of key information the developer viewed. To evaluate our approach, we created a data set with multiple developers working on the same set of six information seeking tasks that we also make available for other researchers to investigate similar approaches. Our analysis shows that our approach enables: 1) segments of a developer’s work to be automatically associated with a task from a known set of tasks with average accuracy of 70.6%, and 2) a word cloud describing a segment of work that a developer can use to recognize a task with average accuracy of 67.9%.

Detecting Developers’ Task Switches and Types

Developer Productivity
HASEL
Papers
Personal Analytics
Research
Developers work on a broad variety of tasks during their workdays and constantly switch between them. While these task switches can be beneficial, they can also incur a high cognitive burden on developers, since they have to continuously remember and rebuild the task context–the artifacts and applications relevant to the task. Researchers have therefore proposed to capture task context more explicitly and use it to provide better task support, such as task switch reduction or task resumption support. Yet, these approaches generally require the developer to manually identify task switches. Automatic approaches for predicting task switches have so far been limited in their accuracy, scope, evaluation, and the time discrepancy between predicted and actual task switches. In our work, we examine the use of automatically collected computer interaction data for detecting developers’ task switches as well as task types. In two field studies–a 4h observational study and a multi-day study with experience sampling–we collected data from a total of 25 professional developers. Our study results show that we are able to use temporal and semantic features from developers’ computer interaction data to detect task switches and types in the field with high accuracy of 84% and 61% respectively, and within a short time window of less than 1.6 minutes on average from the actual task switch. We discuss our findings and their practical value for a wide range of applications in real work settings.

Developers’ Code Context Models for Change Tasks

Developer Productivity
HASEL
Papers
Personal Analytics
Research
To complete a change task, software developers spend a substantial amount of time navigating code to understand the relevant parts. During this investigation phase, they implicitly build context models of the elements and relations that are relevant to the task. Through an exploratory study with twelve developers completing change tasks in three open source systems, we identified important characteristics of these context models and how they are created. In a second empirical analysis, we further examined our findings on data collected from eighty developers working on a variety of change tasks on open and closed source projects. Our studies uncovered, amongst other results, that code context models are highly connected, structurally and lexically, that developers start tasks using a combination of search and navigation and that code navigation varies substantially across developers. Based on these findings we identify and discuss design requirements to better support developers in the initial creation of code context models. We believe this work represents a substantial step in better understanding developers’ code navigation and providing better tool support that will reduce time and effort needed for change tasks.