Top Banner
Supporting Developers’ Coordination in The IDE Guzzi, Bacchelli, Riche, van Deursen
63

Supporting Developers’ Coordination in The IDE #cscw2015

Jul 14, 2015

Download

Science

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Supporting Developers’ Coordination in The IDE #cscw2015

Supporting Developers’ Coordination in The IDE

Guzzi, Bacchelli, Riche, van Deursen

Page 2: Supporting Developers’ Coordination in The IDE #cscw2015

Supporting Developers’ Coordination in The IDE

Page 3: Supporting Developers’ Coordination in The IDE #cscw2015

Supporting Developers’ Coordination in The IDE

Investigating how developers experience teamwork and identify problems they face when working in team.

Page 4: Supporting Developers’ Coordination in The IDE #cscw2015

Investigating how developers experience teamwork and identify problems they face when working in team.

Supporting Developers’ Coordination in The IDE

Devising and evaluating an IDE extension to support teamwork.

Page 5: Supporting Developers’ Coordination in The IDE #cscw2015

Investigating how developers experience teamwork and identify problems they face when working in team.

Exploratory Investigation

Page 6: Supporting Developers’ Coordination in The IDE #cscw2015

Exploratory Investigation: Methodology

brainstorming(9 experts)

interviews (11 professional developers)

analysis of transcripts and memos with card sorting

themes’ analysis with affinity diagram

Page 7: Supporting Developers’ Coordination in The IDE #cscw2015

working situation

working situation

How developers experience teamwork

1. They spend most the time doing individual work

2. Most of their interaction is to coordinate (e.g., through daily stand-ups)

3. Collaboration happens infrequently and on a need basis (e.g., sprint meetings)

4. Their intention for collaboration is mostly coordination, leading to individual work

Exploratory Investigation: Findings

individual work

coordination

collaboration

interactionlevel

Page 8: Supporting Developers’ Coordination in The IDE #cscw2015

Exploratory Investigation: Findings

individual work

coordination

collaboration

interactionlevel

information

How developers experience teamwork: role of information

1. They spend most the time doing individual work

2. Most of their interaction is to coordinate (e.g., through daily stand-ups)

3. Collaboration happens infrequently and on a need basis (e.g., sprint meetings)

4. Their intention for collaboration is mostly coordination, leading to individual work

Page 9: Supporting Developers’ Coordination in The IDE #cscw2015

Exploratory Investigation: Findings

Three problematic scenarios

inefficient task assignment

simultaneous conflicting changes

breaking changes

Page 10: Supporting Developers’ Coordination in The IDE #cscw2015

Needed information

ProblematicCommunicated Visible

✔ ✔ ✘

✘ ✔ ✘

✘ ✘ ﹅Exploratory Investigation: Findings

Three problematic scenarios: role of information

inefficient task assignment

simultaneous conflicting changes

breaking changes

Page 11: Supporting Developers’ Coordination in The IDE #cscw2015

Exploratory Investigation: Selected implications

support for coordination has more potential

literature must be tested on current practices

receiving internal changes is experienced as painful

Page 12: Supporting Developers’ Coordination in The IDE #cscw2015

Supporting Developers’ Coordination in The IDE

Devising and evaluating an IDE extension to support teamwork.

support for coordination has more potential

literature must be tested on current practices

receiving internal changes is experienced as painful

Page 13: Supporting Developers’ Coordination in The IDE #cscw2015

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Current IDEs’ support for receiving changes

Page 14: Supporting Developers’ Coordination in The IDE #cscw2015

Current IDEs’ support for receiving changesh"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Page 15: Supporting Developers’ Coordination in The IDE #cscw2015

Current IDEs’ support for receiving changes

no support for:- recognition over recall

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Recognition over recall “Memory for recognizing things is better than memory for recalling things” —Nielsen 1995

Page 16: Supporting Developers’ Coordination in The IDE #cscw2015

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Visibility of system status “The system should always keep users informed about what is going on” —Nielsen 1995

Page 17: Supporting Developers’ Coordination in The IDE #cscw2015

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status- clearly marked exits

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Clearly marked exits “A system should never capture users in situations that have no visible escape” — Molich & Nielsen 1990

Page 18: Supporting Developers’ Coordination in The IDE #cscw2015

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status- clearly marked exits- help and documentation

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Help and documentation “[Documentation should] be easy to search, focused on the user’s task, list concrete steps to be carried out, and not be too large” — Nielsen 1995

Page 19: Supporting Developers’ Coordination in The IDE #cscw2015

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status- clearly marked exits- help and documentation- help recognize, diagnose, and recover

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Unmet usability heuristics

Help users recognize, diagnose, and recover from errors — Nielsen 1995

Page 20: Supporting Developers’ Coordination in The IDE #cscw2015

Current IDEs’ support for receiving changes

no support for:- recognition over recall- visibility of system status- clearly marked exits- help and documentation- help recognize, diagnose, and recover

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

Pending Outgoing

! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"

10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Design requirements:

- recognition over recall - visibility of system status - clearly marked exits - help and documentation - help recognize, diagnose, and recover

Page 21: Supporting Developers’ Coordination in The IDE #cscw2015

Designing and evaluating Bellevue: Methodology

RITE(9 participants)

feedback’s analysis

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

Bellevue prototypeas slide deck

early feedback(several UX experts)

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

FINALBellevue design

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

Bellevue initial ideaas slide deck

Page 22: Supporting Developers’ Coordination in The IDE #cscw2015

Let’s see the walkthrough

Page 23: Supporting Developers’ Coordination in The IDE #cscw2015

The story… James works on the Paint project with other 4 people. It’s morning and James has just got to work. James starts the day by updating his codebase to the latest version.

Page 24: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

Pending Outgoing ! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs

edited edited

edited edited

added edited

edited

Page 25: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

Pending Outgoing ! Pending Incoming

app.config

LinePaint.cs

PaintCanvas.cs PaintCanvasCommands.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml.cs replaced

Window1.xaml.cs edited

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

"""///"<summary>""""///"TODO:"Autogenerated"comment""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor());"""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstructor.MouseExited);"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectConstructor.MousePressed);"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectConstructor.MouseReleased);"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstructor.MouseMoved);"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Controls;"using"System.Windows.Data;"using"System.Windows.Documents;"using"System.Windows.Input;"using"System.Windows.Media;"

using"System.Windows.Media.Imaging;"using"System.Windows.Navigation;"using"System.Windows.Shapes;""namespace"Paint"{"

""""///"<summary>"""""///"Interaction"logic"for"Window1.xaml"""""///"</summary>"""""public"partial"class"Window1":"Window,"IPaintObjectConstructorListener"""""{"

""""""""private"PaintObjectConstructor"objectConstructor;""""""""""public"Window1()"""""""""{"""""""""""""InitializeComponent();"

""""""""""""this.Loaded"+="new"RoutedEventHandler(Window1_Loaded);"""""""""}""""""""""public"void"Window1_Loaded(object"sender,"RoutedEventArgs"e)"""""""""{"

""""""""""""objectConstructor"="new"PaintObjectConstructor(this);"""""""""""""objectConstructor.setType("Paint.PencilPaint");"""""""""""""objectConstructor.setColor(ColorSliderPanel.getStartingColor("""""""""""""objectConstructor.setThickness(5);""

""""""""""""DrawingCanvas.MouseLeave"+="new"MouseEventHandler(objectConstr"""""""""""""DrawingCanvas.MouseDown"+="new"MouseButtonEventHandler(objectC"""""""""""""DrawingCanvas.MouseUp"+="new"MouseButtonEventHandler(objectCon"""""""""""""DrawingCanvas.MouseMove"+="new"MouseEventHandler(objectConstru"

""""""""}""""""""""private"void"SetPaintColor(object"sender,"ColorChangedEventArgs"e)"""""""""{"""""""""""""objectConstructor.setColor(e.ColorValue);"

""""""""}""

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"Window1.xaml.cs,0#latest! Window1.xaml.cs,0#current0

edited edited

edited edited

added edited

Page 26: Supporting Developers’ Coordination in The IDE #cscw2015

James accepts all the changes; his local code gets updated.

Page 27: Supporting Developers’ Coordination in The IDE #cscw2015

James builds and runs the Paint project. He plays around with the program to test the new version.

Page 28: Supporting Developers’ Coordination in The IDE #cscw2015

He notices that the UNDO function is not working.

Page 29: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint # bin

# obj

# Properties

app.config [ ] App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml

Window1.xaml.cs [ ]

Latest changes only [7 files]

James immediately notices the files that have changed.

Page 30: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint # bin

# obj

# Properties

app.config [ ] App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml

Window1.xaml.cs [ ]

Latest changes only [7 files]

Also, he can apply some filtering to just see the latest changes.

Page 31: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Page 32: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Page 33: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvasCommands.cs [ ]

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows.Input;"

"namespace"Paint"{""""""public"static"class"PaintCanvasCommands"

""""{"""""""""static"PaintCanvasCommands()"""""""""{"""""""""""""ClearCanvas"="new"RoutedUICommand("""""""""""""""""Clear"Canvas",""ClearCanvas",""""""""""""""""typeof(PaintCanvasCommands));"

"""""""""""""UndoCanvas"="new"RoutedUICommand("""""""""""""""""Undo"my"last"stroke",""UndoCanvas",""""""""""""""""typeof(PaintCanvasCommands));""

""""""""""""ChangeToPencil"="new"RoutedUICommand(""""""""""""""""""Pencil",""ChangeToPencil","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToEraser"="new"RoutedUICommand("

"""""""""""""""""Eraser",""ChangeToEraser","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToLine"="new"RoutedUICommand(""""""""""""""""""Line",""ChangeToLine","

""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToRect"="new"RoutedUICommand(""""""""""""""""""Rect",""ChangeToRect","""""""""""""""""typeof(PaintCanvasCommands));"

""""""""}"""""""""//"getters"and"setters"from"here"on:""""""""""

""""""""public"static"RoutedUICommand"ClearCanvas"""""""""{"""""""""""""get;"""""""""""""set;"""""""""}"""""""""Latest changes only [7 files]

390

Page 34: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows.Input;"

"namespace"Paint"{""""""public"static"class"PaintCanvasCommands"

""""{"""""""""static"PaintCanvasCommands()"""""""""{"""""""""""""ClearCanvas"="new"RoutedUICommand("""""""""""""""""Clear"Canvas",""ClearCanvas",""""""""""""""""typeof(PaintCanvasCommands));"

"""""""""""""UndoCanvas"="new"RoutedUICommand("""""""""""""""""Undo"my"last"stroke",""UndoCanvas",""""""""""""""""typeof(PaintCanvasCommands));""

""""""""""""ChangeToPencil"="new"RoutedUICommand(""""""""""""""""""Pencil",""ChangeToPencil","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToEraser"="new"RoutedUICommand("

"""""""""""""""""Eraser",""ChangeToEraser","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToLine"="new"RoutedUICommand(""""""""""""""""""Line",""ChangeToLine","

""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToRect"="new"RoutedUICommand(""""""""""""""""""Rect",""ChangeToRect","""""""""""""""""typeof(PaintCanvasCommands));"

""""""""}"""""""""//"getters"and"setters"from"here"on:""""""""""

""""""""public"static"RoutedUICommand"ClearCanvas"""""""""{"""""""""""""get;"""""""""""""set;"""""""""}"""""""""Latest changes only [7 files]

"""""""""//"getters"and"setters"from"here"on:"390

PaintCanvasCommands.cs [ ]

Page 35: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows.Input;"

"namespace"Paint"{""""""public"static"class"PaintCanvasCommands"

""""{"""""""""static"PaintCanvasCommands()"""""""""{"""""""""""""ClearCanvas"="new"RoutedUICommand("""""""""""""""""Clear"Canvas",""ClearCanvas",""""""""""""""""typeof(PaintCanvasCommands));"

"""""""""""""UndoCanvas"="new"RoutedUICommand("""""""""""""""""Undo"my"last"stroke",""UndoCanvas",""""""""""""""""typeof(PaintCanvasCommands));""

""""""""""""ChangeToPencil"="new"RoutedUICommand(""""""""""""""""""Pencil",""ChangeToPencil","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToEraser"="new"RoutedUICommand("

"""""""""""""""""Eraser",""ChangeToEraser","""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToLine"="new"RoutedUICommand(""""""""""""""""""Line",""ChangeToLine","

""""""""""""""""typeof(PaintCanvasCommands));""""""""""""""ChangeToRect"="new"RoutedUICommand(""""""""""""""""""Rect",""ChangeToRect","""""""""""""""""typeof(PaintCanvasCommands));"

""""""""}"""""""""//"getters"and"setters"from"here"on:""""""""""

""""""""public"static"RoutedUICommand"ClearCanvas"""""""""{"""""""""""""get;"""""""""""""set;"""""""""}"""""""""

390

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

PaintCanvasCommands.cs [ ]

Page 36: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Media;"using"System.Windows.Shapes;""namespace"Paint"{"

""""public"class"PaintCanvas":"System.Windows.Controls.Canvas"""""{"""""""""private"List<List<PaintObject>>"history;"""""""""private"List<PaintObject>"paintObjects;""""""""""private"PaintObject"temporaryObject;"

""""""""private"PaintObject"hoveringObject;"""""""""private"Rectangle"hoveringRender;""""""""""private"bool"currentlyDrawing;""

""""""""public"PaintCanvas()":"base()"""""""""{"""""""""""""history"="new"List<List<PaintObject>>();"""""""""""""paintObjects"="new"List<PaintObject>();""

""""""""""""hoveringRender"="new"Rectangle();"""""""""""""hoveringRender.StrokeThickness"="1;"""""""""""""hoveringRender.Stroke"="Brushes.DarkGray;"""""""""""""hoveringRender.Visibility"="Visibility.Hidden;"""""""""""""this.Children.Add(hoveringRender);"

"""""""""""""currentlyDrawing"="false;"""""""""}""""""""""public"void"Repaint()"

""""""""{"""""""""""""this.Children.Clear();"""""""""""""foreach"(PaintObject"po"in"paintObjects)"""""""""""""{"

""""""""""""""""this.Children.Add(po.getRendering());"""""""""""""}""""""""""""""this.Children.Add(hoveringRender);"""""""""}"

""""""""""

280

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files]

Page 37: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

using"System;"using"System.Collections.Generic;"using"System.Linq;"using"System.Text;"using"System.Windows;"

using"System.Windows.Media;"using"System.Windows.Shapes;""namespace"Paint"{"

""""public"class"PaintCanvas":"System.Windows.Controls.Canvas"""""{"""""""""private"List<List<PaintObject>>"history;"""""""""private"List<PaintObject>"paintObjects;""""""""""private"PaintObject"temporaryObject;"

""""""""private"PaintObject"hoveringObject;"""""""""private"Rectangle"hoveringRender;""""""""""private"bool"currentlyDrawing;""

""""""""public"PaintCanvas()":"base()"""""""""{"""""""""""""history"="new"List<List<PaintObject>>();"""""""""""""paintObjects"="new"List<PaintObject>();""

""""""""""""hoveringRender"="new"Rectangle();"""""""""""""hoveringRender.StrokeThickness"="1;"""""""""""""hoveringRender.Stroke"="Brushes.DarkGray;"""""""""""""hoveringRender.Visibility"="Visibility.Hidden;"""""""""""""this.Children.Add(hoveringRender);"

"""""""""""""currentlyDrawing"="false;"""""""""}""""""""""public"void"Repaint()"

""""""""{"""""""""""""this.Children.Clear();"""""""""""""foreach"(PaintObject"po"in"paintObjects)"""""""""""""{"

""""""""""""""""this.Children.Add(po.getRendering());"""""""""""""}""""""""""""""this.Children.Add(hoveringRender);"""""""""}"

""""""""""

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""hoveringRender.StrokeThickness"="1;"280

PaintCanvas.cs [ ]

Page 38: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151"

142"143"

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

PaintCanvas.cs [ ]

Page 39: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151"

142"143"

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""int"lastItemIndex"="history.Count"–"1;"1400

PaintCanvas.cs [ ]

Page 40: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

PaintCanvas.cs [ ]

Page 41: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

click0

PaintCanvas.cs [ ]

Page 42: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1400

PaintCanvas.cs [ ]

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

PaintCanvas.cs [ ]

Page 43: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

x

Latest changes only [7 files]

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

“Cleaned up the code and fixed some of the missing comments (mostly the auto-generated ones).”

PaintCanvas.cs [ ]

Page 44: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

x

Latest changes only [7 files]

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

PaintCanvas.cs [ ]

Page 45: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

PaintCanvas.cs [ ]

Page 46: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

142"143"

1400

paint

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

PaintCanvas.cs [ ]

Page 47: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

Page 48: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

Page 49: Supporting Developers’ Coordination in The IDE #cscw2015

James runs the code and verifies that UNDO is now working.

Page 50: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

Page 51: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

*PaintCanvas.cs [1]

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

Page 52: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

*PaintCanvas.cs [1]

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability” 10 hours ago

[email protected]

#9044

“Cleaned up the code…” 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

[email protected]

[email protected]

PaintCanvas.cs [ ]

Page 53: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

*PaintCanvas.cs [1]

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability” 10 hours ago

[email protected]

#9044

“Cleaned up the code…” 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

[email protected]

[email protected]

PaintCanvas.cs [ ]

Page 54: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

*PaintCanvas.cs [1]

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

PaintCanvas.cs [ ]

Page 55: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

" Paint # bin

# obj

# Properties

app.config [ ] App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml

Window1.xaml.cs [ ]

Latest changes only [7 files]

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Repaint();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

1400

PaintCanvas.cs [ ]

142"143"

Page 56: Supporting Developers’ Coordination in The IDE #cscw2015

What we saw..

Page 57: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Colored blocks help find changed lines of code

1400142"143"

PaintCanvas.cs [ ]

Page 58: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

"""""""""public"void"setHoveringObject(PaintObject"hoveringObject)"""""""""{"""""""""""""this.hoveringObject"="hoveringObject;"""""""""""""if"(hoveringObject"!="null)"

""""""""""""{"""""""""""""""""hoveringRender.Visibility"="Visibility.Visible;"""""""""""""""""hoveringRender.Width"="hoveringRender.Height"="hoveringObject.getThickness()"+"2;"""""""""""""""""double"offset"="hoveringObject.getThickness()"/"2"+"1;"""""""""""""""""hoveringRender.Fill"="new"SolidColorBrush(hoveringObject.getColor());"

""""""""""""""""PaintCanvas.SetLeft(hoveringRender,"hoveringObject.getStartX()"k"offset);"""""""""""""""""PaintCanvas.SetTop(hoveringRender,"hoveringObject.getStartY()"k"offset);"""""""""""""""""PaintCanvas.SetZIndex(hoveringRender,"10);"""""""""""""}"""""""""""""else"{"hoveringRender.Visibility"="Visibility.Hidden;"}"""""""""}"

"""""""""public"void"addPaintObject(PaintObject"newObject)"""""""""{"""""""""""""currentlyDrawing"="false;"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"

""""""""""""paintObjects.Add(newObject);"""""""""""""this.Repaint();"""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"

""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"

}"

106"107"108"109"110"

111"112"113"114"115"

116"117"118"119"120"121"

122"123"124"125"126"

127"128"129"130"131"

132"133"134"135"136"

137"138"139"140"141"

142"143"144"145"

146"147"148"149"150"

151""""

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Hovering over any colored block reveals the latest changes

1400"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

PaintCanvas.cs [ ]

Page 59: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Historical details are accessible by clicking on any colored block

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

PaintCanvas.cs [ ]

Page 60: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Refresh();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

142"143"

1400

paint

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Code is editable while seeing the historical details

#9050 Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

Load previous history

x

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

PaintCanvas.cs [ ]

Page 61: Supporting Developers’ Coordination in The IDE #cscw2015

h"ps://online.ide.com0 IDE0 r!

James0Green0000/0000Paint0

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint # bin

# obj

# Properties

app.config App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList… LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"

6"7"8"9"10"

11"12"13"14"15"16"

17"18"19"20"21"

22"23"24"25"26"

27"28"29"30"31"

32"33"34"35"36"

37"38"39"40"

41"42"43"44"45"

46"47"48"

&&

*PaintCanvas.cs [1]

""""""""""""""""""}""""""""""public"void"clear()"

""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}"

"""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"

""""""""""""this.Repaint();""""""""""}"""""}"}"

129"130"131"132"133"

134"135"136"137"138"

139"140"141"142"143"144"

145"146"147"148"149"

150"151""""

1400

" Paint app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ] PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

Latest changes only [7 files]

Local 2 seconds ago

yourself

#9050 Latest update

“Improved readability” 10 hours ago

[email protected]

#9044

“Cleaned up the code…” 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 0 4 weeks ago

yourself

x

"""""""history.RemoveAt(history.Count"–"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...0

...""""...0

...""""...0

"""history.RemoveAt(lastItemIndex);""""this.Repaint();""

142"143"

...""""...0

[email protected]

[email protected]

"""history.RemoveAt(lastItemIndex);""""""""this.Repaint();""

142"143"

Contacting the author of a particular change is easy

[email protected]

[email protected]

PaintCanvas.cs [ ]

Page 62: Supporting Developers’ Coordination in The IDE #cscw2015

h"p://online.visualstudio.com4 Visual4Studio4 r!

James4Green4444/4444Paint4

EXPLORE OPEN SEARCH BUILD TEST CHANGES CONSOLE

" Paint

# bin

# obj

# Properties

app.config

App.xaml

App.xaml.cs

ColorPanel.xaml

ColorPanel.xaml.cs

EraserPaint.cs

IPaintObjectConstructorList

LinePaint.cs

PaintCanvas.cs

PaintCanvasCommands.cs

PaintObject.cs

PaintObjectConstructor.cs

PencilPaint.cs

RectPaint.cs

Window1.xaml

Window1.xaml.cs

1"2"3"4"5"6"7"8"9"

10"11"12"13"14"15"16"17"18"19"20"21"22"23"24"25"26"27"28"29"30"31"32"33"34"35"36"37"38"39"40"41"42"43"44"45"46"47"48"

129"130"131"132"133"134"135"136"137"138"139"140"141"142"143"144"145"146"147"148"149"150"151"

"""#9050

Latest update

“Improved readability and consistency.” 10 hours ago

[email protected]

#9044

“Cleaned up the code and fixed some [...] 12 hours ago

[email protected]

#8227 Previous update

“Added undo method” 4 4 weeks ago

yourself

Load previous history

""""""""""""""""""}""""""""""public"void"clear()"""""""""{"""""""""""""history.Add(new"List<PaintObject>(paintObjects));"""""""""""""paintObjects.Clear();"""""""""""""this.Repaint();"""""""""}""""""""""public"void"undo()"""""""""{"""""""""""""int"lastItemIndex"="history.Count"–"1;"""""""""""""paintObjects"="history.Last<List<PaintObject>>();"""""""""""""history.RemoveAt(lastItemIndex);"""""""""""""this.Refresh();""""""""""}"""""}"}"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

1404

PaintCanvas.cs [ ]

"""""""history.RemoveAt(history.Count"k"1);""""this.Refresh();""

141"142"

"""history.RemoveAt(lastItemIndex);""""this.Refresh();""

142"143"

"""history.RemoveAt(history.Count"k"1);""""this.Repaint();""

141"142"

...""""...4

...""""...4

...""""...4

" Paint

app.config [ ]

LinePaint.cs [ ]

PaintCanvas.cs [ ]

PaintCanvasCommands.cs [ ]

PencilPaint.cs [ ]

RectPaint.cs [ ]

Window1.xaml.cs [ ]

PaintCanvas.cs [ ]

Latest changes only [7 files] Designing and evaluating Bellevue: A screenshot

Page 63: Supporting Developers’ Coordination in The IDE #cscw2015

Supporting Developers’ Coordination in The IDE

Guzzi, Bacchelli, Riche, van Deursen