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

Software Craftmanship From a Product Owner's Pe...

tristanoneil
December 09, 2011

Software Craftmanship From a Product Owner's Perspective by Rik Dryfoos

Presented by Rik Dryfoos of GE Healthcare at BTVWAG.

tristanoneil

December 09, 2011
Tweet

More Decks by tristanoneil

Other Decks in Technology

Transcript

  1. Agenda • Introduction • The Costs of Delivery • What

    is Craftsmanship? • The Costs of Ownership • A Manifesto for Software Craftsmanship • Problems with Top Down Dictates • Working Environment
  2. Introduction According to the September 2011 Harvard Business Review... Fully

    one in six of the projects we studied was a black swan, with a cost overrun of 200%, on average, and a schedule overrun of almost 70%. • Wildly complex systems are difficult to build and update. • In the past we have tried to manage complexity by doing a lot of Big Design Up Front and other forms of change control. • Today we have tools to address the root causes and build better, more manageable software. • It is fiscally responsible to do so.
  3. Productivity Time Cost of Delivery The cost of delivery is

    the cost of meeting the product’s requirements.
  4. Common Requirements & Acceptance Criteria: Development agreements often include many

    of these specifications - but nothing in the above list insures well crafted code or any notion of maintainability. Cost of Delivery •Features •Delivery Dates •Performance •Usability •Availability •Capacity •Security •Cost •Branding, Design & Appearance
  5. Cost of Delivery Since quality systems are geared toward adherence

    to requirements, unstated requirements can be lost. If code quality is not a requirement then developers may... • Get it working now and polish it later (later equals never) • Resort to comfortable but non-standard patterns • Choose to forego some (or all?) unit tests There is a financial incentive to meet, not exceed requirements. Requirements seldom reflect cost of ownership (hold that thought).
  6. What is Craftsmanship? Author: Robert C. Martin (aka Uncle Bob)

    Publisher: Prentice Hall Pages: 464 Date: August 11, 2008
  7. What is Craftsmanship? © 2008 Focus Shift / OSNews /

    Thom Holwerda - http://www.osnews.com/comics
  8. What is Craftsmanship? “You know you are working on clean

    code when each routine you read turns out to be pretty much what you expected. You can call it beautiful code when the code also makes it look like the language was made for the problem.” -Ward Cunningham, as quoted in Clean Code, Prentice Hall, 2008
  9. What is Craftsmanship? “Habitability is the characteristic of source code

    that enables programmers, coders, bug-fixers, and people coming to the code later in its life to understand its construction and intentions and to change it comfortably and confidently.” -Richard Gabriel, Patterns of Software, Oxford University Press, 1996
  10. What is Craftsmanship? “Habitability makes a place livable, like home.

    And this is what we want in software — that developers feel at home, can place their hands on any item without having to think deeply about where it is.” -Richard Gabriel, Patterns of Software, Oxford University Press, 1996
  11. What is Craftsmanship? Well crafted code demonstrates: • Simplicity •

    Readability • Elegance The end goal is to make software development more profitable. These characteristics are a means to the end.
  12. • Behavior-Driven Design (BDD) • Continuous Integration (CI) • Convention

    over Configuration (CoC) • Don't Repeat Yourself (DRY) • Fluent Interface • Gang of Four's (GoF) Design Patterns • Loose Coupling and High Cohesion • Release Early, Release Often (RERO) • The S.O.L.I.D. Principles • Test-Driven Design (TDD) • You Ain't Gonna Need It (YAGNI) What is Craftsmanship? An approach to development that exhibits certain values. These values can lead to principles and practices.
  13. What is Craftsmanship? A Continuum of Understanding • Apprentice -

    Software works, or it doesn't • Journeyman - Software judged by how clean it is • Master - Software development becomes a series of calculated trade-offs When the design works and is habitable, it is easier to live with the outcomes of your decisions.
  14. Cost of Ownership The cost of delivery is the cost

    of meeting the product’s requirements. Productivity Time
  15. Cost of Ownership Productivity Time The cost of ownership is

    the cost of supporting the product’s lifecycle.
  16. Cost of Ownership When code is not written in a

    way that is “clean” and easy to understand, productivity drops over time. Declining productivity curve means that the cost per feature grows, sometimes dramatically over time. This headwind of cost strangles a mature product trying to compete in a dynamic environment when changes needed by the business become crushingly expensive.
  17. Cost of Ownership Cycle quickens as development struggles to deliver

    by any means necessary - compromises are made, knowledge is siloed and productivity declines further . Eventually the codebase will be so tangled that it seems easier to rewrite the whole thing from scratch. Re-development begins without the discipline required to insure that the code is “clean” and easy to understand. Repeat.
  18. Code Smells* *http://en.wikipedia.org/wiki/Code_smells For a more complete list, see Ward

    Cunningham’s C2 Wiki: http://c2.com/cgi/wiki?CodeSmell • Duplicated code • Long method • Large class • Feature envy • Inappropriate intimacy • Refused bequest • Lazy class/Freeloader • Contrived complexity • Excessively long identifiers • Excessive use of literals Cost of Ownership
  19. Manifesto http://manifesto.softwarecraftsmanship.org/ As aspiring Software Craftsmen we are raising the

    bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value: • Not only working software, but also well-crafted software • Not only responding to change, but also steadily adding value • Not only individuals and interactions, but also a community of professionals • Not only customer collaboration, but also productive partnerships That is, in pursuit of the items on the left we have found the items on the right to be indispensable. ©2009, The undersigned. This statement may be freely copied in any form, but only in its entirety through this notice.
  20. Manifesto • Puts a name on the concept of Code

    Craft that is arguably needed in the IT community. • Clarifies expectations and helps with the mutual selection process of hiring. • Creates a dialog which many were previously struggling to have. • Provides a nucleus for a community of professionals which may lead to common language and convergence.
  21. Managers often don’t know what to ask for, let alone

    how to encourage best practices Top Down Dictates There are over 17,000 “Java” jobs on Dice.com • 1469 mention “Design Patterns” • 928 mention “Continuous” • 155 mention “Refactoring” • 86 mention “Craft” or “Crafted”
  22. Top Down Dictates Similarities between Software Development when viewed as

    a craft, and blacksmithing: • Technical knowledge required, but not sufficient • Need practice and skill with specialized tools • An eye for aesthetics It takes a blacksmith to train a blacksmith.
  23. Top Down Dictates Leadership can... • Pay attention to the

    right metrics • Hire craftsmen who are skilled mentors • Hire motivated apprentices and interns • Set an example: Right Thing – Right Way • Provide an environment that values craft
  24. Working Environment • Communication • Pair Programming • Continuous Integration

    • Test-Driven & Behavior-Driven Development • Code Quality Metrics - Monitoring for Code Smells • Sufficient queue/backlog to minimize wait time • Short feedback loop • Continuous Learning