Slide 1

Slide 1 text

Asynchronous Collaboration Ryan McGeary http://ryan.mcgeary.org @rmm5t http://www.flickr.com/photos/wwarby/4782904694/

Slide 2

Slide 2 text

+/.!

Slide 3

Slide 3 text

,)). 2*!,2

Slide 4

Slide 4 text

%0!!,!

Slide 5

Slide 5 text

.$!,

Slide 6

Slide 6 text

,%.$(+*-

Slide 7

Slide 7 text

24/7 Computing +,'! !,!

Slide 8

Slide 8 text

McGeary Consulting Group FitCCA +"+/* ! $!-!

Slide 9

Slide 9 text

 +" (%!*.-* !)-   +" +".1,!,+&!.-

Slide 10

Slide 10 text

#!*   $.* $2

Slide 11

Slide 11 text

#!*    2* +))-

Slide 12

Slide 12 text

#!*   ++  -2* +))-

Slide 13

Slide 13 text

#!*   +/,!+ ! +))-

Slide 14

Slide 14 text

1 Why is Asynchronous Collaboration Best?

Slide 15

Slide 15 text

syn•chron•ous |ˈsiNGkr!n!s| adjective existing or occurring at the same time.

Slide 16

Slide 16 text

       of or requiring a form of computer control timing protocol in which a specific operation begins upon receipt of an indication (signal) that the preceding operation has been completed. a•syn•chron•ous |āˈsiNGkr!n!s| adjective 

Slide 17

Slide 17 text

(of two or more objects or events) not existing or happening at the same time. a•syn•chron•ous |āˈsiNGkr!n!s| adjective

Slide 18

Slide 18 text

Flow focused in the zone on a roll present in the moment wired in in the groove on fire in tune centered

Slide 19

Slide 19 text

Productivity development output effectiveness creativity innovation performance

Slide 20

Slide 20 text

Happiness! growth well-being achievement enjoyment success life satisfaction

Slide 21

Slide 21 text

Happiness! Flow Productivity

Slide 22

Slide 22 text

How Do We Achieve Flow?

Slide 23

Slide 23 text

How Do We Achieve Flow? eliminate interruptions? shut out the world?

Slide 24

Slide 24 text

How Do We Achieve Flow? minimize interruptions maximize focus

Slide 25

Slide 25 text

How Do We Achieve Productivity without Flow?

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

What About Pair Programming?

Slide 28

Slide 28 text

2 Minimize Synchronous Collaboration

Slide 29

Slide 29 text

Minimize Phone Calls

Slide 30

Slide 30 text

Minimize Direct Chat

Slide 31

Slide 31 text

Turn Off Notifications 1

Slide 32

Slide 32 text

Avoid Daily Stand-ups http://www.flickr.com/photos/angel_medinilla/2283716967/

Slide 33

Slide 33 text

Wait, WHAT!?!?

Slide 34

Slide 34 text

Scrums are one of the most dangerous phases in rugby... -Wikipedia http://www.flickr.com/photos/williampaulking/5636394420/

Slide 35

Slide 35 text

http://www.flickr.com/photos/angel_medinilla/2283716967/

Slide 36

Slide 36 text

http://www.flickr.com/photos/angel_medinilla/2283716967/

Slide 37

Slide 37 text

http://www.flickr.com/photos/angel_medinilla/2283716967/

Slide 38

Slide 38 text

http://www.flickr.com/photos/angel_medinilla/2283716967/

Slide 39

Slide 39 text

If you miss a stand-up meeting, you miss out.

Slide 40

Slide 40 text

20% of us are Larks 20% of us are Owls http://en.wikipedia.org/wiki/Lark http://en.wikipedia.org/wiki/Owl

Slide 41

Slide 41 text

Happiness! Flow Productivity

Slide 42

Slide 42 text

Synchronous Collaboration yields interruption.

Slide 43

Slide 43 text

Happiness! Flow Productivity

Slide 44

Slide 44 text

This is why hackers give you such a baleful stare as they turn from their screen to answer your question [interruption]. Inside their heads a giant house of cards is tottering. -Paul Graham http://www.flickr.com/photos/rocor/5610373534/

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

3 Maximize Asynchronous Collaboration

Slide 47

Slide 47 text

Email use when appropraite keep it short stay on topic well-named subjects no thread- jacking

Slide 48

Slide 48 text

Group Chat

Slide 49

Slide 49 text

Campfire IRC

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

IN: Finishing test refactors from yesterday... STATUS: Back later. Taking my wife to lunch. OUT: Finished refactors; Started to fix...

Slide 52

Slide 52 text

http://www.flickr.com/photos/angel_medinilla/2283716967/

Slide 53

Slide 53 text

rmm5t pushed 2 new commits to master

Slide 54

Slide 54 text

ryan deployed 5915b03 to staging

Slide 55

Slide 55 text

...the build has passed

Slide 56

Slide 56 text

...ticket sold to John Doe totaling $319

Slide 57

Slide 57 text

Group Chat build status deployments team status subscription upgrades customer support sales git commits daily reports cancellations questions

Slide 58

Slide 58 text

Feature/Issue Tracking

Slide 59

Slide 59 text

Issues & Pull Requests

Slide 60

Slide 60 text

pivotaltracker.com

Slide 61

Slide 61 text

apptrajectory.com

Slide 62

Slide 62 text

planscope.io

Slide 63

Slide 63 text

Issues & Pull Requests github.com

Slide 64

Slide 64 text

Bug Reports & Feature Requests

Slide 65

Slide 65 text

Bad Bug Reports lacking context bulleted list of unrelated issues “it didn’t work” outside the issue tracker blame

Slide 66

Slide 66 text

Good Bug Reports steps to reproduce what actually happened what you expected screenshots screencasts

Slide 67

Slide 67 text

Bad Feature Requests no detail bulleted list of unrelated topics “because I said so” outside the issue tracker too generic

Slide 68

Slide 68 text

Good Feature Requests detailed discrete gather buy-in screenshots in story form

Slide 69

Slide 69 text

4 Collaboration Through Source Code

Slide 70

Slide 70 text

Readable Code small methods less code well-named KISS YAGNI match you domain

Slide 71

Slide 71 text

def gets(separator="\n", length=nil) if separator.nil? read_all elsif separator.is_a?(Integer) read_length(separator) elsif separator.length > 1 result = '' len = 0 match_idx = 0 match_num = separator.length - 1 to_match = separator[match_idx].chr if length matcher = lambda {|idx, num| idx < num && len < length } else matcher = lambda {|idx, num| idx < num} end while matcher.call(match_idx, match_num) && char = getc result << char len += 1 if char == to_match while match_idx < match_num do match_idx += 1

Slide 72

Slide 72 text

def gets(separator="\n", length=nil) if separator.nil? read_all elsif separator.is_a?(Integer) read_length(separator) elsif separator.length > 1 end end read_to_string(separator, length) else read_to_character(separator, length)

Slide 73

Slide 73 text

Testing functional unit acceptance system end-to-end integration black-box load stress

Slide 74

Slide 74 text

Remove Technical Debt code is a liability

Slide 75

Slide 75 text

Commit Messages BONUS TALK

Slide 76

Slide 76 text

Do Your Commit Messages Suck? Ryan McGeary http://ryan.mcgeary.org @rmm5t A Public Service Announcement BONUS TALK

Slide 77

Slide 77 text

The Bad

Slide 78

Slide 78 text

dfe4c3e Staging Bad

Slide 79

Slide 79 text

dfe4c3e Staging af0a3bb More staging fixes Bad

Slide 80

Slide 80 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup Bad

Slide 81

Slide 81 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More Bad

Slide 82

Slide 82 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed Bad

Slide 83

Slide 83 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again Bad

Slide 84

Slide 84 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts Bad

Slide 85

Slide 85 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup Bad

Slide 86

Slide 86 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging Bad

Slide 87

Slide 87 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging Bad

Slide 88

Slide 88 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file Bad

Slide 89

Slide 89 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file 0328c7c again Bad

Slide 90

Slide 90 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file 0328c7c again d5e07c7 whoops Bad

Slide 91

Slide 91 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file 0328c7c again d5e07c7 whoops 0536fc7 Again Bad

Slide 92

Slide 92 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file 0328c7c again d5e07c7 whoops 0536fc7 Again 8af6da0 More Bad

Slide 93

Slide 93 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file 0328c7c again d5e07c7 whoops 0536fc7 Again 8af6da0 More 9052cb8 Again Bad

Slide 94

Slide 94 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file 0328c7c again d5e07c7 whoops 0536fc7 Again 8af6da0 More 9052cb8 Again 7587f8b Working? Bad

Slide 95

Slide 95 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file 0328c7c again d5e07c7 whoops 0536fc7 Again 8af6da0 More 9052cb8 Again 7587f8b Working? 9770886 g Bad

Slide 96

Slide 96 text

dfe4c3e Staging af0a3bb More staging fixes e5a524a More staging cap setup 19900ba More 0841841 More fixed dffb0db Again 8a0f74c Updated scripts 587a09c deploy script cleanup 9f474bc More staging c3f7275 Again more staging 3ee25cd Read from env file 0328c7c again d5e07c7 whoops 0536fc7 Again 8af6da0 More 9052cb8 Again 7587f8b Working? 9770886 g Bad

Slide 97

Slide 97 text

More Bad 3a61755 what a hassle

Slide 98

Slide 98 text

More Bad 3a61755 what a hassle eec60db what a stupid hassle

Slide 99

Slide 99 text

More Bad 3a61755 what a hassle eec60db what a stupid hassle bf77372 seriously a fucking hassle

Slide 100

Slide 100 text

More Bad 3a61755 what a hassle eec60db what a stupid hassle bf77372 seriously a fucking hassle 8b48352 this is a fucking hassle

Slide 101

Slide 101 text

More Bad 3a61755 what a hassle eec60db what a stupid hassle bf77372 seriously a fucking hassle 8b48352 this is a fucking hassle eb7cdd7 wtf dude

Slide 102

Slide 102 text

Again Bad 18c3f84 Huge commit

Slide 103

Slide 103 text

Whoops 17cb2a1 Fix a bug that Tommy missed fixing after he wrote this code last November.

Slide 104

Slide 104 text

Huge Whoops More Again Serious Hassle Bad c1c38fc Update deploy recipe with some stuff. I dunno. it's late

Slide 105

Slide 105 text

The Good

Slide 106

Slide 106 text

Good 0835022 Updated basic auth prompt to reflect app name

Slide 107

Slide 107 text

Good 0835022 Updated basic auth prompt to reflect app name 950b8de Fixed password reset for users who use the same email on multiple accounts [Fixes #11102389]

Slide 108

Slide 108 text

More Good 3224fff Added an extra 10s while sleeping after a Twitter rate-limit error * Twitter isn't always ready immediately after sleeping the advertised amount of time.

Slide 109

Slide 109 text

More Good 3224fff Added an extra 10s while sleeping after a Twitter rate-limit error * Twitter isn't always ready immediately after sleeping the advertised amount of time. 334a2c4 Fixed bug related to contact syncing [#9190663] Contacts that should have been tagged both friend and follower were having those tags toggled on each #profile_sync run. If the contact had "follower", and profile_sync was run, then the code would set the system_tags to ["following"], blowing away the "follower" tag. It would do the same thing vice versa for the "following" system tag.

Slide 110

Slide 110 text

Template Moved all static pages into a generic PagesController [Finishes #6375] * Cleaned up the routes * Simplified static page creation

Slide 111

Slide 111 text

Template Moved all static pages into a generic PagesController [Finishes #6375] * Cleaned up the routes * Simplified static page creation DETAILS SUMMARY

Slide 112

Slide 112 text

Template Moved all static pages into a generic PagesController [Finishes #6375] * Cleaned up the routes * Simplified static page creation VERB FRAGMENT TICKET # WHY

Slide 113

Slide 113 text

Verbs 184 Added 85 Fixed 76 Upped 31 Removed 24 Switched 21 Improved 20 Updated 16 Renamed

Slide 114

Slide 114 text

No content

Slide 115

Slide 115 text

/)),2

Slide 116

Slide 116 text

Happiness! Flow Productivity

Slide 117

Slide 117 text

Minimize Synchronous Communication 1

Slide 118

Slide 118 text

Tools for Asynchronous Communication

Slide 119

Slide 119 text

Source Code is Communication

Slide 120

Slide 120 text

Ryan McGeary ryan.mcgeary.org @rmm5t [email protected] McGeary Consulting Group Tack så mycket