Evaluating Cues for Resuming Interrupted Programming TasksChris Parnin, Georgia Institute of TechnologyRobert DeLine, Microsoft Research
INTERRUPTIONSInterruptions force rapid suspension of task memory -- which, for programmers, is large and complex.But for programmers, task memory is so large, even a lunch break can be a problem.
EXAMPLEA programmer makes several changes, one of which contains an error.Goes to lunchRunning code crashes, but forgot “what was changed”?Spends 15 minutes trying to remember.
TASKSManagers100s tasks with few documents.Programmers Few tasks with 100s documents.
DOCUMENTSTypical program with 56 sub-projects.Note: sub-folders not expanded.
RESEARCH GOALWhat do programmers forget and how can we remind them?
RESEARCH APPROACH1) Survey programmers to identify current strategies and new approaches.2) Experimentally evaluate current strategies, and compare with current research approaches.
SURVEY15 questions composed of both fixed and open-responses.371 developers from Microsoft and 42 from various companies responded.
MarkersRemindersTOP PROSPECTIVE MEASURE:NOTE-TAKING
S.H.
RESUMPTION STRATEGIESReturn to last method modified, and navigate to related code to jog your memory. Use markers or notes.View source code difference.Run program and examine its output or UI.
RESUMPTION STRATEGIESReturn to last method modified, and navigate to related code to jog your memory. Use markers or notes.View source code difference.Run program and examine its output or UI.cue-seeking, searching for reminders while reactivating mental context.10-15 minutes before first edit(based on recorded sessions)
HELP!Programmers wanted: Better help for viewing work history: (recent code changes, documents, summaries)Didn’t want as much: Instant replays, task planning tools, smart reminders.
WORK HISTORYvar first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);Record document switches, actions.Record state of document after each action.var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
CURRENT APPROACHvar first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"Uses semantic cues.www.eclipse.org/mylyn
ALTERNATIVE APPROACHvar first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);SAVEUse both episodic and semantic cues.xmlns:d="http://schemas.microsoft.com/expression/blend/2008"var last = line.Points.Last();
EXPERIMENTDo semantic and episodic-based cues from work history help resumption?
PARTICIPANTS15 participants (one female only) Age (range 31 to 56) [39 avg.]Professional developers working in Washington Puget Sound area.
Make block fall all the way down with space key.Make ghosts stop moving when eating power pellet. Make monster reappear if missed shot.TASKS
METHODParticipant in 2 hour session, beginning with training on tools.Programmers use assigned condition to help resume task(could take notes).Programmers interrupted shortly after making edit,moving on to next task.
RESULTSNear 2-to-1 task completion rate (either cues) over notes. (chi, p < 0.1)7,7,4Near 2-to-1 resumption speed (DOI) over notes. (no significance)2.5, 3.5, 4.5 minutes Subjective ratings highest for timeline, notes, then DOI. (t-test, p <0.001)Next slide
RATINGSParticipants completing no tasks, rated notes highest:Experienced programmers create better history.
“There is something wrong, I don’t know what I missed”this.keyUp = keyUpHandler;FORGETTING
5 minutes pass…but too little time to finish.“I remember finding that code, I just can’t remember where it is!”FORGETTING
NOTESNotes restore goals well, but context poorly.
DOI TREEVIEWFast, but incomplete.Seemed to support familiarity memory, clicking on locations without remembering what’s there.“I wouldn’t remember this if I had to come back in 5 minutes”
CONTENT TIMELINESlower, but restorative.Users worked backwards in their task state with this view.Seemed to support restoring episodic and prospective memory.“The history of the [timeline] and diffs are very useful and did the most help in restarting”
COMMENTS AND FEEDBACK“I wouldn’t have to write down the location, just what needs to be done”DOI Treeview should explain how I used item:Edit, Find, Navigation, Debug Step-throughContent Timeline should include:filtering, pinning, annotation, and sharing.
FUTUREBEYONDExcel/Word SummariesSharing Work ExperiencesEpisodic Buffer MonitorPen and multitouch-based interactions and annotationsTemporal and semantic zoomSubvocalization (inner voice)
QUESTIONSEvaluating Cues for Resuming Interrupted Programming TasksChris Parnin, Robert DeLine
Evaluating Cues for Resuming Interrupted Programming TAsks

Evaluating Cues for Resuming Interrupted Programming TAsks

  • 1.
    Evaluating Cues forResuming Interrupted Programming TasksChris Parnin, Georgia Institute of TechnologyRobert DeLine, Microsoft Research
  • 2.
    INTERRUPTIONSInterruptions force rapidsuspension of task memory -- which, for programmers, is large and complex.But for programmers, task memory is so large, even a lunch break can be a problem.
  • 3.
    EXAMPLEA programmer makesseveral changes, one of which contains an error.Goes to lunchRunning code crashes, but forgot “what was changed”?Spends 15 minutes trying to remember.
  • 4.
    TASKSManagers100s tasks withfew documents.Programmers Few tasks with 100s documents.
  • 5.
    DOCUMENTSTypical program with56 sub-projects.Note: sub-folders not expanded.
  • 6.
    RESEARCH GOALWhat doprogrammers forget and how can we remind them?
  • 7.
    RESEARCH APPROACH1) Surveyprogrammers to identify current strategies and new approaches.2) Experimentally evaluate current strategies, and compare with current research approaches.
  • 8.
    SURVEY15 questions composedof both fixed and open-responses.371 developers from Microsoft and 42 from various companies responded.
  • 9.
  • 10.
  • 11.
    RESUMPTION STRATEGIESReturn tolast method modified, and navigate to related code to jog your memory. Use markers or notes.View source code difference.Run program and examine its output or UI.
  • 12.
    RESUMPTION STRATEGIESReturn tolast method modified, and navigate to related code to jog your memory. Use markers or notes.View source code difference.Run program and examine its output or UI.cue-seeking, searching for reminders while reactivating mental context.10-15 minutes before first edit(based on recorded sessions)
  • 13.
    HELP!Programmers wanted: Better help for viewing work history: (recent code changes, documents, summaries)Didn’t want as much: Instant replays, task planning tools, smart reminders.
  • 14.
    WORK HISTORYvar first= line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);Record document switches, actions.Record state of document after each action.var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  • 15.
    CURRENT APPROACHvar first= line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"Uses semantic cues.www.eclipse.org/mylyn
  • 16.
    ALTERNATIVE APPROACHvar first= line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);var first = line.Points.First();var last = line.Points.Last();returnnew Point((first.X + last.X) / 2, (first.Y + last.Y) / 2);SAVEUse both episodic and semantic cues.xmlns:d="http://schemas.microsoft.com/expression/blend/2008"var last = line.Points.Last();
  • 17.
    EXPERIMENTDo semantic andepisodic-based cues from work history help resumption?
  • 18.
    PARTICIPANTS15 participants (onefemale only) Age (range 31 to 56) [39 avg.]Professional developers working in Washington Puget Sound area.
  • 19.
    Make block fallall the way down with space key.Make ghosts stop moving when eating power pellet. Make monster reappear if missed shot.TASKS
  • 20.
    METHODParticipant in 2hour session, beginning with training on tools.Programmers use assigned condition to help resume task(could take notes).Programmers interrupted shortly after making edit,moving on to next task.
  • 21.
    RESULTSNear 2-to-1 taskcompletion rate (either cues) over notes. (chi, p < 0.1)7,7,4Near 2-to-1 resumption speed (DOI) over notes. (no significance)2.5, 3.5, 4.5 minutes Subjective ratings highest for timeline, notes, then DOI. (t-test, p <0.001)Next slide
  • 22.
    RATINGSParticipants completing notasks, rated notes highest:Experienced programmers create better history.
  • 23.
    “There is somethingwrong, I don’t know what I missed”this.keyUp = keyUpHandler;FORGETTING
  • 24.
    5 minutes pass…buttoo little time to finish.“I remember finding that code, I just can’t remember where it is!”FORGETTING
  • 25.
    NOTESNotes restore goalswell, but context poorly.
  • 26.
    DOI TREEVIEWFast, butincomplete.Seemed to support familiarity memory, clicking on locations without remembering what’s there.“I wouldn’t remember this if I had to come back in 5 minutes”
  • 27.
    CONTENT TIMELINESlower, butrestorative.Users worked backwards in their task state with this view.Seemed to support restoring episodic and prospective memory.“The history of the [timeline] and diffs are very useful and did the most help in restarting”
  • 28.
    COMMENTS AND FEEDBACK“Iwouldn’t have to write down the location, just what needs to be done”DOI Treeview should explain how I used item:Edit, Find, Navigation, Debug Step-throughContent Timeline should include:filtering, pinning, annotation, and sharing.
  • 29.
    FUTUREBEYONDExcel/Word SummariesSharing WorkExperiencesEpisodic Buffer MonitorPen and multitouch-based interactions and annotationsTemporal and semantic zoomSubvocalization (inner voice)
  • 30.
    QUESTIONSEvaluating Cues forResuming Interrupted Programming TasksChris Parnin, Robert DeLine

Editor's Notes

  • #2 Fix size
  • #3 Impact? 15 minutes.
  • #4 Impact? 15 minutes.
  • #6 In another study we did on programmers, we found that programmers would typically work each day with between 50-80 methods,which are named sections of a code document. 60% of switches between methods, would require switching to a new document.This creates a frequent pattern of switching and searching: the perfect recipe for disorientation.
  • #7 Impact? 15 minutes.
  • #8 Impact? 15 minutes.
  • #9 Impact? 15 minutes.
  • #11 Here is what one programmer did to cope. S.H.
  • #16 Render recent history as degree-of-interest.
  • #17 Render recent history as episodes (i.e. summaries of content).
  • #26 Writing notes require recreating context: Paper notes referred to code symbols (65% of lines)