Share on Facebook Tweet on Twitter Share on LinkedIn Share by email
Human Interactions in Programming
Human Interactions in Programming

Better Development Tools Through User-Centered Design

Overview

Since the earliest days of computing, software development tools have been based on a dangerous stereotype: development is done by a nerd alone in a box. In fact, when one observes modern software development, it's a very social activity! Members of a development team collaborate, cooperate, and learn from one another. Even the nerdiest programmer spends as much time communicating with colleagues as studying code in an editor. The HIP group is creating new software development tools based on the obvious observation that software development is done by people working together.

Themes

Human-centered Software Development Tools

The HIP Group works at the intersection of HCI, CSCW, and Software Engineering. We practice the user-centered design of software development tools. So, we spend half our time studying software development, either through controlled experiments in the lab or hanging out with developers through field studies. The other half is spent in creating new tools to help difficult situations that developers face, like being a newcomer to a team with a lot of existing code or dealing with the interruptions and task switches that break up a developer's day.

These two activities are mutually reinforcing: the studies inspire tools to build; and exploring treatments teaches us more about the problems. 

Empirical Studies of Software Engineering

In order to understand the issues that affect development work, we use a variety of methodologies to study software engineers. Although our research protocol varies from study to study, this pattern is typical:

  1. A short survey for recruitment and gathering initial data;
  2. A deep dive with a few dozen participants, for observations or interviews;
  3. Data analysis from the deep dive to form hypotheses;
  4. A large survey to test our hypotheses.

We've used this approach to study a variety of topics, discussed below.

Distributed Software Development

Microsoft teams vary a lot in the distance of their members. Many teams have members that are all located nearby on the same floor of the same building, but increasingly, teams include members who work at a large spatial or temporal distance from the rest of the team.

This increased distance makes communication and coordination much harder. We're studying research questions like:

  • How can we make distant colleagues seem as "real" as local ones?
  • How can we spread team knowledge despite the distance?
  • How do newcomers join remote teams when they lack face-to-face connections?

Knowledge Flow in Software Development Teams

Developers keep a lot of critical project information only in their heads. As a result, developers' work is often blocked to look for information, and developers frequently interrupt each others' work to ask questions. This approach enjoys certain benefits, like demand-driven production of information that can be tailored to the asker's needs. However, the downsides are also significant: knowledge loss due to team attrition; slow onboarding of new team members; and productivity loss due to information seeking. To encourage better knowledge flow, we have been working on these research questions:

  • What are the most difficult and frustrating questions to find answers to?
  • How much knowledge can we recover from existing team artifacts?
  • How can we encourage more knowledge capture without impacting productivity?
  • How do newcomers to teams learn from their more experienced colleagues?

Coordination and Processes of Software Development Teams

Software development is a highly collaborative activity. Developers work with people on their own team, and teams work with one another to create large-scale software products. Within teams, development is split among people of differing roles such as development, testing and requirements, and is governed by a development lifecycle, historically waterfall, but increasingly Agile. Dependencies between teams require communication, cooperation and coordination for success, but problems in any of these areas lead to conflicts. To understand how teams work well or poorly together, we are looking at these research questions:

  • What are the uses of Agile methods at Microsoft?
  • What are the work practices that help and hurt inter-team collaboration?

Spatial Representations of Code

Because developers are frequently blocked and interrupted in their work, they often have to return to tasks that have been put aside, sometimes for minutes, sometimes for months. Today's development tooks place a large burden on a developer to find the documents they work on by remembering a lot of symbol names -- the names of projects, files, bug reports, classes, methods, and on and on. This memory tax means that developers spend a lot of time searching to find the documents they previously worked on. In one line of our research, we are exploring the use of spatial representations of development documents to allow developers to use spatial memory to find them. We are looking at these research questions:

  • How do developers depict their code when they explain it to others?
  • What are the navigation patterns developers exhibit when working with code?
  • What representations of code and other artifacts best support developers' work?

Internships and Full-time Positions

Are you a PhD student looking to study software development in the beauty of the Pacific Northwest? Our group is always looking for great summer interns! To apply, you should both follow the instructions at the MSR internship page and send email to rob.deline@microsoft.com to let us know your application is in the system. We look forward to hearing from you! We typically evaluate candidates in February for summer positions.

If you are interested in a full-time position, please fill out the online application. Please note that our group interviews only for research positions, and these typically require a PhD in computer science or a related discipline.

Recent Publications

    2014

    2013

    2012

    2011

    2010

    People

  • Rob DeLine - Principal Researcher / Group Manager
  • Gina Venolia - Senior Researcher
  • Andrew Begel - Researcher
  • Kael Rowan - Senior RSDE
  • Associated Research Groups

    • RiSE - Research in Software Engineering
    • ESM - Empirical Software Engineering and Measurement
    • VIBE - Visualization and Interaction for Business and Education

    Research Interns

    2010

    2009

  • Chris Parnin, Georgia Tech
  • David Wang, U Maryland, College Park
  • Ruy Cervantes Fregoso, UC Irvine
  • Ashish Shubham, IIT, Kharagpur
  • 2008

  • Paula Bach, Penn State U
  • Libby Hemphill, U Michigan (now a Postdoc at U Arizona, Phoenix)
  • Jorge Aranda Garcia, U Toronto
  • Medha Umarji, U Maryland, Baltimore County
  • 2007

  • Reid Holmes, U Calgary (now faculty at U Waterloo)
  • Andrew Sutherland, U Saskatchewan
  • Paula Bach, Penn State U (now working at Microsoft)
  • Christopher Poile, U Waterloo (now faculty at U Saskatchewan)
  • Lucas Layman, NCSU (now a scientist at Fraunhofer Center for Experimental Software Engineering at U Maryland)
  • Sushil Bajracharya, UC Irvine
  • 2006

  • Mauro Cherubini, EPFL (now a researcher at Telefonica Research in Barcelona)
  • Andrew Ko, CMU (now faculty at U Washington, School of Information)
  • 2005

  • Thomas LaToza, CMU
  • 2004

  • Amir Khella, U Maryland
  • Tony Tang, U of Calgary (now a PhD candidate at U British Columbia)