SlideShare a Scribd company logo
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

More Related Content

PDF
P&MSP2012 - Unit Testing
PPTX
Are Automated Debugging Techniques Actually Helping Programmers
PDF
Choosel - Modular Web-based Visualizations
PDF
Crowd Documentation - How Programmer Social Communities are Flipping Software...
PPTX
Resumption strategies
KEY
Programmer Information Needs After Memory Failure
PDF
Using psycho physiological sensors to assess task difficulty in software deve...
PDF
Refactoring to Immutability
P&MSP2012 - Unit Testing
Are Automated Debugging Techniques Actually Helping Programmers
Choosel - Modular Web-based Visualizations
Crowd Documentation - How Programmer Social Communities are Flipping Software...
Resumption strategies
Programmer Information Needs After Memory Failure
Using psycho physiological sensors to assess task difficulty in software deve...
Refactoring to Immutability

Similar to Evaluating Cues for Resuming Interrupted Programming TAsks (20)

PDF
Look Mommy, No GC! (TechDays NL 2017)
PPTX
Writing Good Tests
PPTX
Core .NET Framework 4.0 Enhancements
PDF
final project for C#
PDF
Refactoring
PDF
Maze solving app listing
PPTX
What's new in C# 6.0
PPTX
Category theory, Monads, and Duality in the world of (BIG) Data
PDF
Fast and accurate metrics. Is it actually possible?
PDF
Refactor legacy code through pure functions
PDF
Les nouveautés de C# 6
PPT
Exploring Ink Analysis
PPTX
Search and navigation in Visual Studio
PPT
Whats new in_csharp4
PDF
Efficiency and performance
PPTX
Rx workshop
PPTX
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
PPT
Mixing functional and object oriented approaches to programming in C#
PDF
Number 1 I have completed and number 6 is just uploading I .pdf
PPT
Task and Data Parallelism
Look Mommy, No GC! (TechDays NL 2017)
Writing Good Tests
Core .NET Framework 4.0 Enhancements
final project for C#
Refactoring
Maze solving app listing
What's new in C# 6.0
Category theory, Monads, and Duality in the world of (BIG) Data
Fast and accurate metrics. Is it actually possible?
Refactor legacy code through pure functions
Les nouveautés de C# 6
Exploring Ink Analysis
Search and navigation in Visual Studio
Whats new in_csharp4
Efficiency and performance
Rx workshop
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
Mixing functional and object oriented approaches to programming in C#
Number 1 I have completed and number 6 is just uploading I .pdf
Task and Data Parallelism
Ad

More from Chris Parnin (7)

PDF
DESIGNING FOR INTERRUPTION AND LIVENESS
PPT
Building usage contexts from interaction history
PPT
A Catalogue of Code Smell Visualizations
PPTX
Subvocalization -- Towards Hearing the Inner Thoughts of Developers
PPTX
Java Generics Adoption: How New Features are Introduced Championed or Ignored
PPTX
Cognitive Neuroscience of Memory for Software Engineers
PPTX
Code Pad
DESIGNING FOR INTERRUPTION AND LIVENESS
Building usage contexts from interaction history
A Catalogue of Code Smell Visualizations
Subvocalization -- Towards Hearing the Inner Thoughts of Developers
Java Generics Adoption: How New Features are Introduced Championed or Ignored
Cognitive Neuroscience of Memory for Software Engineers
Code Pad
Ad

Recently uploaded (20)

PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Electronic commerce courselecture one. Pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPT
Teaching material agriculture food technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Empathic Computing: Creating Shared Understanding
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
KodekX | Application Modernization Development
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Encapsulation_ Review paper, used for researhc scholars
Per capita expenditure prediction using model stacking based on satellite ima...
Electronic commerce courselecture one. Pdf
Network Security Unit 5.pdf for BCA BBA.
NewMind AI Weekly Chronicles - August'25 Week I
Advanced methodologies resolving dimensionality complications for autism neur...
MIND Revenue Release Quarter 2 2025 Press Release
Teaching material agriculture food technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Reach Out and Touch Someone: Haptics and Empathic Computing
Empathic Computing: Creating Shared Understanding
Unlocking AI with Model Context Protocol (MCP)
Dropbox Q2 2025 Financial Results & Investor Presentation
KodekX | Application Modernization Development
“AI and Expert System Decision Support & Business Intelligence Systems”
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
The AUB Centre for AI in Media Proposal.docx
Programs and apps: productivity, graphics, security and other tools
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Review of recent advances in non-invasive hemoglobin estimation
Encapsulation_ Review paper, used for researhc scholars

Evaluating Cues for Resuming Interrupted Programming TAsks

  • 1. Evaluating Cues for Resuming Interrupted Programming TasksChris Parnin, Georgia Institute of TechnologyRobert DeLine, Microsoft Research
  • 2. 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.
  • 3. 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.
  • 4. TASKSManagers100s tasks with few documents.Programmers Few tasks with 100s documents.
  • 5. DOCUMENTSTypical program with 56 sub-projects.Note: sub-folders not expanded.
  • 6. RESEARCH GOALWhat do programmers forget and how can we remind them?
  • 7. RESEARCH APPROACH1) Survey programmers to identify current strategies and new approaches.2) Experimentally evaluate current strategies, and compare with current research approaches.
  • 8. SURVEY15 questions composed of both fixed and open-responses.371 developers from Microsoft and 42 from various companies responded.
  • 10. S.H.
  • 11. 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.
  • 12. 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)
  • 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 and episodic-based cues from work history help resumption?
  • 18. PARTICIPANTS15 participants (one female only) Age (range 31 to 56) [39 avg.]Professional developers working in Washington Puget Sound area.
  • 19. 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
  • 20. 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.
  • 21. 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
  • 22. RATINGSParticipants completing no tasks, rated notes highest:Experienced programmers create better history.
  • 23. “There is something wrong, I don’t know what I missed”this.keyUp = keyUpHandler;FORGETTING
  • 24. 5 minutes pass…but too little time to finish.“I remember finding that code, I just can’t remember where it is!”FORGETTING
  • 25. NOTESNotes restore goals well, but context poorly.
  • 26. 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”
  • 27. 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”
  • 28. 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.
  • 29. FUTUREBEYONDExcel/Word SummariesSharing Work ExperiencesEpisodic Buffer MonitorPen and multitouch-based interactions and annotationsTemporal and semantic zoomSubvocalization (inner voice)
  • 30. QUESTIONSEvaluating Cues for Resuming 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)