Slide 1

Slide 1 text

What Comes After SOLID? SEEKING HOLISTIC SOFTWARE QUALITY

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

TRANSLATING “HAVE TO” TO “CHOOSE TO”

Slide 4

Slide 4 text

I CHOOSE TO __________ BECAUSE I WANT _________

Slide 5

Slide 5 text

I CHOOSE TO ✍ BECAUSE I WANT _________

Slide 6

Slide 6 text

I CHOOSE TO ✍ BECAUSE I WANT ???????????

Slide 7

Slide 7 text

WHY DO WE CARE ABOUT WRITING GOOD CODE?

Slide 8

Slide 8 text

IS GOOD CODE THE SAME AS QUALITY SOFTWARE?

Slide 9

Slide 9 text

(WE’LL GET BACK TO THAT…)

Slide 10

Slide 10 text

“AGILE” IS BROKEN ACCORDING TO DAVE THOMAS, ROBERT MARTIN, AND OTHERS:

Slide 11

Slide 11 text

AT THAT 2001 MEETING IN SNOWBIRD WHERE WE WROTE THE AGILE MANIFESTO, KENT BECK STATED ONE OF OUR GOALS: "..TO HEAL THE DIVIDE BETWEEN DEVELOPMENT AND BUSINESS." Robert C. Martin https://8thlight.com/blog/uncle-bob/2014/03/28/The-Corruption-of-Agile.html

Slide 12

Slide 12 text

IT DIDN’T WORK THE GRIM REALITY:

Slide 13

Slide 13 text

SOMETHING DEVELOPERS DO TO KEEP BUSINESSPEOPLE HAPPY “AGILE” HAS BECOME

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

WE DON’T NEED MORE PROCESSES. WE DO NEED MORE TRUST.

Slide 16

Slide 16 text

WE CAN SOLVE THIS IF WE LEARN TO COMMUNICATE

Slide 17

Slide 17 text

CREATE A COMMON LANGUAGE FOR DEVELOPERS AND BUSINESSPEOPLE OUR GOAL TODAY IS AMBITIOUS

Slide 18

Slide 18 text

FIGURING OUT WHY WE WRITE GOOD CODE WE’LL ACHIEVE IT BY

Slide 19

Slide 19 text

WHY WRITE CODE? LIKE, EVER? I’M NOT KIDDING.

Slide 20

Slide 20 text

YOUR JOB ISN’T TO WRITE CODE. CONTROVERSIAL STATEMENT #1 YOUR JOB IS TO SOLVE PROBLEMS.

Slide 21

Slide 21 text

YOUR JOB ISN’T TO WRITE CODE. YOUR JOB IS TO CREATE VALUE. BUSINESS TRANSLATION

Slide 22

Slide 22 text

CREATING VALUE VALUE CREATION ALWAYS MEANS 1 OF 3 THINGS: ▸ Generating Revenue ▸ Lowering Costs ▸ Reducing Risk

Slide 23

Slide 23 text

WHY WRITE CODE? TO CREATE VALUE. THAT’S IT.

Slide 24

Slide 24 text

WHY DO WE CARE ABOUT WRITING GOOD CODE?

Slide 25

Slide 25 text

GOOD CODE USUALLY HELPS TO CREATE VALUE.

Slide 26

Slide 26 text

IS GOOD CODE THE SAME AS QUALITY SOFTWARE?

Slide 27

Slide 27 text

NOPE.

Slide 28

Slide 28 text

SOFTWARE QUALITY IS BEST DEFINED AS THE AMOUNT OF VALUE IT CREATES. CONTROVERSIAL STATEMENT #2

Slide 29

Slide 29 text

HOW CAN WE TARGET EFFORTS TO MAXIMIZE VALUE CREATION?

Slide 30

Slide 30 text

HOW CAN WE RELATE GOOD CODE TO VALUE CREATION?

Slide 31

Slide 31 text

THE FRAMEWORK SOFTWARE QUALITY CAN BE DISTILLED INTO 3 FACTORS: ▸ Usefulness ▸ Sustainability ▸ Accuracy

Slide 32

Slide 32 text

THE FRAMEWORK USEFULNESS ▸ The Question ▸ Does it solve a problem effectively? ▸ The Target ▸ Users ▸ Is this a problem that affects users? ▸ Does the product solve their problem? ▸ In a way that works for them?

Slide 33

Slide 33 text

THE FRAMEWORK SUSTAINABILITY ▸ The Question ▸ Can we keep building without unnecessary obstacles? ▸ The Targets ▸ Software ▸ Is it resistant to change? ▸ Will we understand what it does later? ▸ Does the architecture resist new functionality? ▸ The Development Team ▸ Is the Team unstable in a way that will prevent future progress?

Slide 34

Slide 34 text

THE FRAMEWORK ACCURACY ▸ The Question ▸ Does it work the way we think it does? ▸ The Target ▸ Ourselves ▸ Have we developed understanding of the problem? ▸ Have we developed understanding of the code? ▸ Is there cognitive overload preventing understanding? ▸ Are we confident that the code reflects our current understanding?

Slide 35

Slide 35 text

I CHOOSE TO WRITE GOOD CODE BECAUSE I WANT U.S.A. SOFTWARE

Slide 36

Slide 36 text

Usefulness Business Analysts Product
 Designers
 UX Accuracy Developers Sustainability Developers THE TRADITIONAL MODEL WHAT WE ACTUALLY NEED

Slide 37

Slide 37 text

Usefulness Business Analysts Product
 Designers
 UX Developers Accuracy Developers Sustainability Developers WHAT WE ACTUALLY NEED

Slide 38

Slide 38 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE?

Slide 39

Slide 39 text

IS IT QUALITY SOFTWARE? CLASSIFYING SOLID ▸ Single Responsibility Principle ▸ Every element of a system should do one thing well ▸ Open/Closed Principle ▸ Possible to add new features without modifying existing code ▸ Liskov Substitution Principle ▸ Subclasses should fully implement their superclasses ▸ Interface Segregation Principle ▸ Limit the surface area of objects’ dependencies on other objects ▸ Dependency Inversion Principle ▸ Depend on abstractions, not concretions

Slide 40

Slide 40 text

Usefulness Accuracy Sustainability Single Responsibility Open/Closed Liskov Substitution Interface Segregation Dependency Inversion Usefulness Accuracy Sustainability Single Responsibility ✅ ✅ ✅ Open/Closed ❌ ❌ ✅ Liskov Substitution ❌ ✅ ✅ Interface Segregation ❌ ❌ ✅ Dependency Inversion ❌ ❌ ✅ IS IT QUALITY SOFTWARE? CLASSIFYING SOLID

Slide 41

Slide 41 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION SRP

Slide 42

Slide 42 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION SRP

Slide 43

Slide 43 text

IS IT QUALITY SOFTWARE? SANDI METZ’S TRUE PRINCIPLES ▸ Transparent ▸ Consequences of changing code should be obvious ▸ Reasonable ▸ Cost of change should be proportional to its benefits ▸ Usable ▸ Existing code should be usable in new and unexpected contexts ▸ Exemplary ▸ Code should encourage future coders to perpetuate good qualities

Slide 44

Slide 44 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT SRP

Slide 45

Slide 45 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT SRP

Slide 46

Slide 46 text

IS IT QUALITY SOFTWARE? TESTING ▸ Testing at all ▸ Code Coverage ▸ Types of tests ▸ Unit ▸ Integration ▸ Manual QA ▸ Test-Driven Development ▸ Behavior-Driven Development

Slide 47

Slide 47 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SRP TESTING INTEGRATION TESTS BDD MANUAL QA

Slide 48

Slide 48 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SRP TESTING INTEGRATION TESTS BDD MANUAL QA

Slide 49

Slide 49 text

IS IT QUALITY SOFTWARE? HOT NEW BUZZWORDS ▸ Functional Programming ▸ Type Systems ▸ Immutability ▸ Scalability

Slide 50

Slide 50 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SCALABILITY TYPE SYSTEM FUNCTIONAL PROGRAMMING IMMUTABILITY SRP TESTING INTEGRATION TESTS BDD MANUAL QA

Slide 51

Slide 51 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SCALABILITY TYPE SYSTEM FUNCTIONAL PROGRAMMING IMMUTABILITY SRP TESTING INTEGRATION TESTS BDD MANUAL QA

Slide 52

Slide 52 text

IS IT QUALITY SOFTWARE? COMPLEXITY METRICS ▸ Low Cyclomatic Complexity ▸ Low Connascence

Slide 53

Slide 53 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SCALABILITY TYPE SYSTEM FUNCTIONAL PROGRAMMING IMMUTABILITY LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY SRP TESTING INTEGRATION TESTS BDD MANUAL QA

Slide 54

Slide 54 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SCALABILITY TYPE SYSTEM FUNCTIONAL PROGRAMMING IMMUTABILITY LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY SRP TESTING INTEGRATION TESTS BDD MANUAL QA

Slide 55

Slide 55 text

IS IT QUALITY SOFTWARE? TEAM-ORIENTED PRACTICES ▸ Organization Conventions ▸ Style Guide ▸ Bus Factor (doing something about it) ▸ Code Review ▸ Pair/Mob Programming ▸ Internal Documentation (README and other helpful guides) ▸ Debugging Tools ▸ Mentorship

Slide 56

Slide 56 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SCALABILITY TYPE SYSTEM FUNCTIONAL PROGRAMMING IMMUTABILITY LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY MENTORSHIP BUS FACTOR STYLE GUIDE ORGANIZATION CONVENTIONS INTERNAL DOCUMENTATION DEBUGGING TOOLS SRP TESTING PAIRING MOBBING CODE REVIEW INTEGRATION TESTS BDD MANUAL QA

Slide 57

Slide 57 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SCALABILITY TYPE SYSTEM FUNCTIONAL PROGRAMMING IMMUTABILITY LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY MENTORSHIP BUS FACTOR STYLE GUIDE ORGANIZATION CONVENTIONS INTERNAL DOCUMENTATION DEBUGGING TOOLS SRP TESTING PAIRING MOBBING CODE REVIEW INTEGRATION TESTS BDD MANUAL QA

Slide 58

Slide 58 text

IS IT QUALITY SOFTWARE? MISCELLANEOUS ▸ Continuous Integration ▸ Frequent Releases ▸ Refactoring ▸ Conventional APIs

Slide 59

Slide 59 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT UNIT TESTS TDD COVERAGE SCALABILITY TYPE SYSTEM FUNCTIONAL PROGRAMMING IMMUTABILITY LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY MENTORSHIP BUS FACTOR STYLE GUIDE ORGANIZATION CONVENTIONS INTERNAL DOCUMENTATION DEBUGGING TOOLS CONVENTIONAL
 APIS CONTINUOUS INTEGRATION REFACTORING SRP TESTING PAIRING MOBBING FREQUENT RELEASES CODE REVIEW INTEGRATION TESTS BDD MANUAL QA

Slide 60

Slide 60 text

SRP ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? LISKOV SUBSTITUTION OPEN/CLOSED PRINCIPLE INTERFACE SEGREGATION DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? DEPENDENCY INVERSION REUSABLE EXEMPLARY REASONABLE TRANSPARENT TESTING UNIT TESTS TDD COVERAGE SCALABILITY TYPE SYSTEM FUNCTIONAL PROGRAMMING IMMUTABILITY LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY PAIRING MOBBING MENTORSHIP BUS FACTOR STYLE GUIDE ORGANIZATION CONVENTIONS INTERNAL DOCUMENTATION DEBUGGING TOOLS CONVENTIONAL
 APIS FREQUENT RELEASES CONTINUOUS INTEGRATION REFACTORING CODE REVIEW INTEGRATION TESTS BDD MANUAL QA

Slide 61

Slide 61 text

WHAT GOES IN THE RED AREA?

Slide 62

Slide 62 text

IS IT QUALITY SOFTWARE? USER-ORIENTED THINKING ▸ Focus on Delivering Value ▸ User Research and Collaboration ▸ Prioritization ▸ Discoverability ▸ Empathetic UI ▸ On Time ▸ Performance

Slide 63

Slide 63 text

CONVENTIONAL
 APIS SCALABILITY PRIORITIZATION USER RESEARCH/
 COLLABORATION PERFORMANCE EMPATHETIC UI DISCOVERABILITY ON TIME ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? TYPE SYSTEM UNIT TESTS TDD CONTINUOUS INTEGRATION LISKOV SUBSTITUTION DEPENDENCY INVERSION LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY COVERAGE REFACTORING MENTORSHIP FUNCTIONAL PROGRAMMING IMMUTABILITY OPEN/CLOSED PRINCIPLE REUSABLE EXEMPLARY REASONABLE INTERFACE SEGREGATION BUS FACTOR STYLE GUIDE ORGANIZATION CONVENTIONS INTERNAL DOCUMENTATION DEBUGGING TOOLS DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? TRANSPARENT FOCUS ON DELIVERING VALUE SRP TESTING PAIRING MOBBING FREQUENT RELEASES CODE REVIEW INTEGRATION TESTS BDD MANUAL QA

Slide 64

Slide 64 text

CONVENTIONAL
 APIS SCALABILITY PRIORITIZATION USER RESEARCH/
 COLLABORATION PERFORMANCE EMPATHETIC UI DISCOVERABILITY ON TIME ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? TYPE SYSTEM UNIT TESTS TDD CONTINUOUS INTEGRATION LISKOV SUBSTITUTION DEPENDENCY INVERSION LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY COVERAGE REFACTORING MENTORSHIP FUNCTIONAL PROGRAMMING IMMUTABILITY OPEN/CLOSED PRINCIPLE REUSABLE EXEMPLARY REASONABLE INTERFACE SEGREGATION BUS FACTOR STYLE GUIDE ORGANIZATION CONVENTIONS INTERNAL DOCUMENTATION DEBUGGING TOOLS DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? TRANSPARENT FOCUS ON DELIVERING VALUE SRP TESTING PAIRING MOBBING FREQUENT RELEASES CODE REVIEW INTEGRATION TESTS BDD MANUAL QA

Slide 65

Slide 65 text

IS IT QUALITY SOFTWARE? USER-ORIENTED THINKING (TECHNICAL PRODUCTS) ▸ Documentation ▸ Writing Client Code

Slide 66

Slide 66 text

CONVENTIONAL
 APIS SCALABILITY PRIORITIZATION USER RESEARCH/
 COLLABORATION DOCUMENTATION PERFORMANCE EMPATHETIC UI DISCOVERABILITY ON TIME ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? TYPE SYSTEM UNIT TESTS TDD CONTINUOUS INTEGRATION LISKOV SUBSTITUTION DEPENDENCY INVERSION LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY COVERAGE REFACTORING MENTORSHIP FUNCTIONAL PROGRAMMING IMMUTABILITY OPEN/CLOSED PRINCIPLE REUSABLE EXEMPLARY REASONABLE INTERFACE SEGREGATION BUS FACTOR STYLE GUIDE ORGANIZATION CONVENTIONS INTERNAL DOCUMENTATION DEBUGGING TOOLS DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? TRANSPARENT FOCUS ON DELIVERING VALUE WRITING CLIENT CODE SRP TESTING PAIRING MOBBING FREQUENT RELEASES CODE REVIEW INTEGRATION TESTS BDD MANUAL QA

Slide 67

Slide 67 text

CONVENTIONAL
 APIS SCALABILITY PRIORITIZATION USER RESEARCH/
 COLLABORATION DOCUMENTATION PERFORMANCE EMPATHETIC UI DISCOVERABILITY ON TIME CODE REVIEW INTEGRATION TESTS BDD MANUAL QA ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? TYPE SYSTEM UNIT TESTS TDD CONTINUOUS INTEGRATION LISKOV SUBSTITUTION DEPENDENCY INVERSION LOW CONNASCENCE LOW CYCLOMATIC COMPLEXITY COVERAGE REFACTORING MENTORSHIP FUNCTIONAL PROGRAMMING IMMUTABILITY OPEN/CLOSED PRINCIPLE REUSABLE EXEMPLARY REASONABLE INTERFACE SEGREGATION BUS FACTOR STYLE GUIDE ORGANIZATION CONVENTIONS INTERNAL DOCUMENTATION DEBUGGING TOOLS DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE? TRANSPARENT FOCUS ON DELIVERING VALUE WRITING CLIENT CODE SRP TESTING PAIRING MOBBING FREQUENT RELEASES

Slide 68

Slide 68 text

IS IT QUALITY SOFTWARE? YOU DECIDE.

Slide 69

Slide 69 text

ACCURATE DOES IT WORK
 THE WAY WE THINK IT DOES? USEFUL
 DOES IT SOLVE
 A REAL PROBLEM
 EFFECTIVELY? SUSTAINABLE CAN WE KEEP
 BUILDING WITHOUT
 UNNECESSARY
 OBSTACLES? DOES IT WORK
 FOR OUR USERS
 AS THEY EXPECT? CAN WE KEEP BUILDING OUR SYSTEM WITHOUT BREAKING OUR SYSTEM? ARE THERE
 OBSTACLES TO
 FUTURE USEFULNESS? IS IT
 QUALITY
 SOFTWARE?

Slide 70

Slide 70 text

TRY THE EXERCISE WITH YOUR TEAM: AMCAPLAN.NINJA/RAILSCONF2017

Slide 71

Slide 71 text

PARTING THOUGHTS

Slide 72

Slide 72 text

1. DIFFERENT PROJECTS REQUIRE DIFFERENT BALANCES OF FACTORS

Slide 73

Slide 73 text

(SEE KENT BECK’S 3X FRAMEWORK)

Slide 74

Slide 74 text

2. I DON’T THINK IT’S BAD TO FOCUS ON GOOD CODE FIRST

Slide 75

Slide 75 text

REALIGNING OURSELVES WHY WORK ON “GOOD CODE” FIRST? ▸ More straightforward ▸ Business understanding is a long, fruitful journey ▸ It’s possible to get much better at “Good Code” very quickly ▸ Becomes automatic (minimal long-term cost) ▸ You can’t automate business understanding ▸ Implication ▸ Start out focused on “Good Code” ▸ Over time, focus more on business understanding

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

WHAT CAN I DO TO BUILD BUSINESS UNDERSTANDING?

Slide 78

Slide 78 text

REALIGNING OURSELVES WHAT CAN I DO TO BUILD BUSINESS UNDERSTANDING? ▸ Learn about: ▸ Your users ▸ Your industry ▸ The organization of your organization ▸ Business ideas ▸ Organizational and process theory ▸ Develop empathy skills

Slide 79

Slide 79 text

3. OVER TIME, EMPATHY BECOMES EVER MORE IMPORTANT

Slide 80

Slide 80 text

WHAT CAN I DO TO BUILD EMPATHY SKILLS?

Slide 81

Slide 81 text

REALIGNING OURSELVES WHAT CAN I DO TO BUILD EMPATHY SKILLS? ▸ Read ▸ More on that next slide… ▸ Practice ▸ Cultivate curiosity about others, especially different others ▸ Listen to others ▸ See the humanity in others

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

DEVEMPATHYBOOK.CLUB

Slide 84

Slide 84 text

MAKE YOUR SOFTWARE VALUABLE. MAKE YOURSELF VALUABLE.

Slide 85

Slide 85 text

THANK YOU TIME! THANKS TO THESE PEOPLE WHO HAVE TAUGHT ME SO MUCH! ▸ Eugene Westbrook ▸ Robin Curry ▸ Brandon Westcott ▸ Andrew Holz ▸ Topper Bowers ▸ William Bajzek ▸ Yitz Schaffer

Slide 86

Slide 86 text

THANK YOU! ARIEL CAPLAN @AMCAPLAN AMCAPLAN.NINJA DEVEMPATHYBOOK.CLUB