Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What Comes After SOLID? Seeking Holistic Software Quality

What Comes After SOLID? Seeking Holistic Software Quality

You care deeply about code quality and constantly strive to learn more. You devour books and blogs, watch conference talks, and practice code katas.

That's excellent! But immaculately factored code and clean architecture alone won't guarantee quality software.

As a developer, your job isn't to write Good Code. It's to deliver value for people. In that light, we'll examine the effects of a host of popular coding practices. What do they accomplish? Where do they fall short?

We'll set meaningful goals for well-rounded, high-quality software that solves important problems for real people.

Ariel Caplan

April 25, 2017
Tweet

More Decks by Ariel Caplan

Other Decks in Technology

Transcript

  1. 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
  2. YOUR JOB ISN’T TO WRITE CODE. YOUR JOB IS TO

    CREATE VALUE. BUSINESS TRANSLATION
  3. CREATING VALUE VALUE CREATION ALWAYS MEANS 1 OF 3 THINGS:

    ▸ Generating Revenue ▸ Lowering Costs ▸ Reducing Risk
  4. SOFTWARE QUALITY IS BEST DEFINED AS THE AMOUNT OF VALUE

    IT CREATES. CONTROVERSIAL STATEMENT #2
  5. THE FRAMEWORK SOFTWARE QUALITY CAN BE DISTILLED INTO 3 FACTORS:

    ▸ Usefulness ▸ Sustainability ▸ Accuracy
  6. 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?
  7. 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?
  8. 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?
  9. 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?
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. IS IT QUALITY SOFTWARE? TESTING ▸ Testing at all ▸

    Code Coverage ▸ Types of tests ▸ Unit ▸ Integration ▸ Manual QA ▸ Test-Driven Development ▸ Behavior-Driven Development
  18. 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
  19. 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
  20. IS IT QUALITY SOFTWARE? HOT NEW BUZZWORDS ▸ Functional Programming

    ▸ Type Systems ▸ Immutability ▸ Scalability
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. IS IT QUALITY SOFTWARE? USER-ORIENTED THINKING ▸ Focus on Delivering

    Value ▸ User Research and Collaboration ▸ Prioritization ▸ Discoverability ▸ Empathetic UI ▸ On Time ▸ Performance
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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?
  36. 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
  37. 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
  38. 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
  39. 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