More Related Content Similar to Supporting Developers’ Coordination in The IDE #cscw2015 (20) Supporting Developers’ Coordination in The IDE #cscw20154. 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.
7. 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
interaction
level
8. Exploratory Investigation: Findings
individual work
coordination
collaboration
interaction
level
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
11. Exploratory Investigation: Selected implications
support for coordination
has more potential
literature must be tested
on current practices
receiving internal changes
is experienced as painful
12. 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
13. 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
14. Current IDEs’ support for receiving changes
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
15. 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
16. 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
17. 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
18. 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
19. 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
20. 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