Modern
software
craftsmanship
DevNexus 2018
Daniel Irvine
daniel@conciselycrafted.com
@d_ir
Daniel IrvineModern software craftsmanship
You may already be a
software crafter without
even knowing it!
Daniel IrvineModern software craftsmanship
It’s not a methodology…
… although there is a lot of
method to it
Daniel IrvineModern software craftsmanship
It’s not about Test-Driven
Development…
… although we will discuss
Test-Driven Development
Daniel IrvineModern software craftsmanship
It’s not just fancy
consultancy…
… although it is an easy thing
to sell
Daniel IrvineModern software craftsmanship
It’s not art…
… it is a little bit
Daniel IrvineModern software craftsmanship
It is…
… a style of work
… an ethos
… an approach to developing software
Daniel IrvineModern software craftsmanship
Some important moments in software organization
Waterfall
Iterative
XP
Craftsmanship
Alt Dot Net
meetup.com
Daniel IrvineModern software craftsmanship
Craftsmanship
Craft
XP
Scrum
Daniel IrvineModern software craftsmanship
How can
craftsmanship

remain relevant

in the modern era?
Daniel IrvineModern software craftsmanship
Quality
Professionalism
Community
Daniel IrvineModern software craftsmanship
- Kent Beck, Implementation Patterns
“I have seen too much ugly code
make too much money to believe
that quality of code is either
necessary or sufficient for
commercial success or widespread
use.”
Daniel IrvineModern software craftsmanship
Quality Assurance:
An admittance that developers are not
good at quality.
Daniel IrvineModern software craftsmanship
Daniel IrvineModern software craftsmanship
How do we measure quality?
Coverage
CommentsDocumentation
Linting
Daniel IrvineModern software craftsmanship
If you ask
100 different people
what TDD is,
you’ll get
100 different answers.
Daniel IrvineModern software craftsmanship
Test-Driven Development is
a mechanism for supporting change.
Test-Driven Development is
not testing.
Daniel IrvineModern software craftsmanship
–Adapted from Gojko Adzic’s “Alice in the Hall of Mirrors”
TDD as a mirror
https://gojko.net/2018/01/23/alice-in-the-hall-of-mirrors.html
Daniel IrvineModern software craftsmanship
oneApple = { name: 'apple', amount: 1 }
it 'prints 1 apple'
expect(format(oneApple)).toEqual('1 apple')
def format(ingredient)
ingredient.amount + ' ' + ingredient.name
Daniel IrvineModern software craftsmanship
def format(ingredient)
if ingredient.amount = 1
'1 ' + ingredient.name
else
ingredient.amount + ' ' + ingredient.name + 's'
twoApples = { name: 'apple', amount: 2 }
it 'prints 2 apples'
expect(format(twoApples)).toEqual('2 apples')
Daniel IrvineModern software craftsmanship
twoTomatoes = { name: 'tomato', amount: 2 }
plurals = { 'tomato' -> 'tomatoes' }
it 'prints 2 tomatoes'
expect(format(twoTomatoes, plurals)).toEqual('2 tomatoes')
def format(ingredient, plurals = {})
if ingredient.amount = 1
'1 ' + ingredient.name
else
plural = plurals.get(name) || name + 's'
ingredient.amount + ' ' + plural
Daniel IrvineModern software craftsmanship
choppedTomatoes = { name: 'tomato',
amount: 2,
instruction: 'chopped' }
it 'prints 2 chopped tomatoes'
expect(format(choppedTomatoes, plurals))
.toEqual('2 chopped tomatoes')
// left as an exercise for the reader
Daniel IrvineModern software craftsmanship
The use of mock objects:
Build independent units of specification
Simulate failure conditions
Daniel IrvineModern software craftsmanship
What is the essence of TDD?
- Specification
- Design aid
- Technique for slowing down
Daniel IrvineModern software craftsmanship
With great TDD, the only types of failure you’ll
see in production are scenarios you haven’t
designed for
Daniel IrvineModern software craftsmanship
– Frank Chimero, “Everything Easy is Hard Again”
“Go slow and fix things […] Let’s be
more like that tortoise: diligent,
direct, and purposeful.”
https://frankchimero.com/writing/everything-easy-is-hard-again/
Daniel IrvineModern software craftsmanship
Refactoring is your opportunity to go slow
Daniel IrvineModern software craftsmanship
Example:
Extracting a method
def format(ingredient, plurals = {})
if ingredient.amount = 1
'1 ' + ingredient.name
else
plural = plurals.get(name) || name + 's'
ingredient.amount + ' ' + plural
def format(ingredient, plurals = {})
if ingredient.amount = 1
'1 ' + ingredient.name
else
ingredient.amount + ' ' + plural(ingredient.name, plurals)
def plural(name, plurals)
if plurals.contains?(name)
plurals.get(name)
else
name + 's'
Daniel IrvineModern software craftsmanship
Codebases should be networks of
small, connected components
Daniel IrvineModern software craftsmanship
TDD not only removes the fear
of experimenting with design
but also
encourages experimentation
Daniel IrvineModern software craftsmanship
Q. Do we teach TDD to novice
programmers, right from the word ‘go’?
A. It might be better to focus on good design
first.
Daniel IrvineModern software craftsmanship
Disclaimer!
TDD is just one tool in your toolbox.
It will not lead you to enlightenment.
Daniel IrvineModern software craftsmanship
Most importantly
Craft != TDD
Daniel IrvineModern software craftsmanship
Code comments are a code smell
Daniel IrvineModern software craftsmanship
Craft is the idea that learning never ends
College programmer
Comments: good
Professional programmer
Comments: bad
Daniel IrvineModern software craftsmanship
Quality
Professionalism
Community
Daniel IrvineModern software craftsmanship
Business analyst
Tester
Programmer
Daniel IrvineModern software craftsmanship
Crafters are generalists/polyglots
• Picking the right tool for the job
• Capitalizing on breadth of experience
• Sharing techniques across communities
Daniel IrvineModern software craftsmanship
Crafters are responsible
• Building maintainable, long-life software
• Making the right tradeoffs
• Engaging with stakeholders
• Engaging with industry
Daniel IrvineModern software craftsmanship
Professionalism does not mean
suits, ties and handshakes
Professionalism does mean
humbleness, humanity, and trust
Daniel IrvineModern software craftsmanship
Adult coders are not kids!
Daniel IrvineModern software craftsmanship
Quality
Professionalism
Community
Daniel IrvineModern software craftsmanship
But crafters are life-long learners
Some college grads give up on education
Daniel IrvineModern software craftsmanship
Industry Craft
• Know everything before
you join

• “Interesting problems”

aka “lots of incidental
complexity”
• Deliberate practice

• Mentoring
• Hire for ability to learn and
work with others
Daniel IrvineModern software craftsmanship
Finding a mentor is an
important step to
continued career growth
Being a mentor is
important for a healthy
community
Daniel IrvineModern software craftsmanship
What does technical mentoring look like?
• Code reviews
• Guided learning
• Planning &
estimating
• Reading suggestions
• Listening
• Sponsorship
Daniel IrvineModern software craftsmanship
Bootcamps are a
natural fit
for software craft
Daniel IrvineModern software craftsmanship
‘Full-fat’ craftsmanship
means apprenticeships
No client work
Syllabus/plan
Mentor acts as a client
Blogging
Graduation
Daniel IrvineModern software craftsmanship
Crafters are everywhere!
SoCraTes
Codebar
Ladies of Code
Queer Code
Daniel IrvineModern software craftsmanship
Software crafters are
working towards an
inclusive industry…
… because software is
for everyone
Daniel IrvineModern software craftsmanship
Daniel IrvineModern software craftsmanship
What hasn’t worked for us:
- the medieval craftsman guild model
- journeymen
- the manifesto
- elitism
Daniel IrvineModern software craftsmanship
Quality
Professionalism
Community
Daniel IrvineModern software craftsmanship
Can I be a software crafter if…
… I don’t practice TDD?
… I work for a big faceless corporation?
… I don’t call myself a crafter?
Daniel IrvineModern software craftsmanship
Craft
Craftsmanship
Community and
open spaces
Life-long

learning
Mentoring
TDD (or not) Refactoring Generalism
Responsibility Professionalism
Apprenticeships Manifesto
Job titles Conferences
Daniel IrvineModern software craftsmanship
What does the future hold for software craft?
Industry ethics
Socially responsible software
Plenty of fresh ideas
Daniel IrvineModern software craftsmanship
softwarecrafters.org
Join the Slack community
or
register your IRL community
Thank you
Daniel Irvine
daniel@conciselycrafted.com
@d_ir

Modern software craftsmanship

  • 1.
  • 2.
    Daniel IrvineModern softwarecraftsmanship You may already be a software crafter without even knowing it!
  • 3.
    Daniel IrvineModern softwarecraftsmanship It’s not a methodology… … although there is a lot of method to it
  • 4.
    Daniel IrvineModern softwarecraftsmanship It’s not about Test-Driven Development… … although we will discuss Test-Driven Development
  • 5.
    Daniel IrvineModern softwarecraftsmanship It’s not just fancy consultancy… … although it is an easy thing to sell
  • 6.
    Daniel IrvineModern softwarecraftsmanship It’s not art… … it is a little bit
  • 7.
    Daniel IrvineModern softwarecraftsmanship It is… … a style of work … an ethos … an approach to developing software
  • 8.
    Daniel IrvineModern softwarecraftsmanship Some important moments in software organization Waterfall Iterative XP Craftsmanship Alt Dot Net meetup.com
  • 9.
    Daniel IrvineModern softwarecraftsmanship Craftsmanship Craft XP Scrum
  • 10.
    Daniel IrvineModern softwarecraftsmanship How can craftsmanship
 remain relevant
 in the modern era?
  • 11.
    Daniel IrvineModern softwarecraftsmanship Quality Professionalism Community
  • 12.
    Daniel IrvineModern softwarecraftsmanship - Kent Beck, Implementation Patterns “I have seen too much ugly code make too much money to believe that quality of code is either necessary or sufficient for commercial success or widespread use.”
  • 13.
    Daniel IrvineModern softwarecraftsmanship Quality Assurance: An admittance that developers are not good at quality.
  • 14.
  • 15.
    Daniel IrvineModern softwarecraftsmanship How do we measure quality? Coverage CommentsDocumentation Linting
  • 16.
    Daniel IrvineModern softwarecraftsmanship If you ask 100 different people what TDD is, you’ll get 100 different answers.
  • 17.
    Daniel IrvineModern softwarecraftsmanship Test-Driven Development is a mechanism for supporting change. Test-Driven Development is not testing.
  • 18.
    Daniel IrvineModern softwarecraftsmanship –Adapted from Gojko Adzic’s “Alice in the Hall of Mirrors” TDD as a mirror https://gojko.net/2018/01/23/alice-in-the-hall-of-mirrors.html
  • 19.
    Daniel IrvineModern softwarecraftsmanship oneApple = { name: 'apple', amount: 1 } it 'prints 1 apple' expect(format(oneApple)).toEqual('1 apple') def format(ingredient) ingredient.amount + ' ' + ingredient.name
  • 20.
    Daniel IrvineModern softwarecraftsmanship def format(ingredient) if ingredient.amount = 1 '1 ' + ingredient.name else ingredient.amount + ' ' + ingredient.name + 's' twoApples = { name: 'apple', amount: 2 } it 'prints 2 apples' expect(format(twoApples)).toEqual('2 apples')
  • 21.
    Daniel IrvineModern softwarecraftsmanship twoTomatoes = { name: 'tomato', amount: 2 } plurals = { 'tomato' -> 'tomatoes' } it 'prints 2 tomatoes' expect(format(twoTomatoes, plurals)).toEqual('2 tomatoes') def format(ingredient, plurals = {}) if ingredient.amount = 1 '1 ' + ingredient.name else plural = plurals.get(name) || name + 's' ingredient.amount + ' ' + plural
  • 22.
    Daniel IrvineModern softwarecraftsmanship choppedTomatoes = { name: 'tomato', amount: 2, instruction: 'chopped' } it 'prints 2 chopped tomatoes' expect(format(choppedTomatoes, plurals)) .toEqual('2 chopped tomatoes') // left as an exercise for the reader
  • 23.
    Daniel IrvineModern softwarecraftsmanship The use of mock objects: Build independent units of specification Simulate failure conditions
  • 24.
    Daniel IrvineModern softwarecraftsmanship What is the essence of TDD? - Specification - Design aid - Technique for slowing down
  • 25.
    Daniel IrvineModern softwarecraftsmanship With great TDD, the only types of failure you’ll see in production are scenarios you haven’t designed for
  • 26.
    Daniel IrvineModern softwarecraftsmanship – Frank Chimero, “Everything Easy is Hard Again” “Go slow and fix things […] Let’s be more like that tortoise: diligent, direct, and purposeful.” https://frankchimero.com/writing/everything-easy-is-hard-again/
  • 27.
    Daniel IrvineModern softwarecraftsmanship Refactoring is your opportunity to go slow
  • 28.
    Daniel IrvineModern softwarecraftsmanship Example: Extracting a method def format(ingredient, plurals = {}) if ingredient.amount = 1 '1 ' + ingredient.name else plural = plurals.get(name) || name + 's' ingredient.amount + ' ' + plural def format(ingredient, plurals = {}) if ingredient.amount = 1 '1 ' + ingredient.name else ingredient.amount + ' ' + plural(ingredient.name, plurals) def plural(name, plurals) if plurals.contains?(name) plurals.get(name) else name + 's'
  • 29.
    Daniel IrvineModern softwarecraftsmanship Codebases should be networks of small, connected components
  • 30.
    Daniel IrvineModern softwarecraftsmanship TDD not only removes the fear of experimenting with design but also encourages experimentation
  • 31.
    Daniel IrvineModern softwarecraftsmanship Q. Do we teach TDD to novice programmers, right from the word ‘go’? A. It might be better to focus on good design first.
  • 32.
    Daniel IrvineModern softwarecraftsmanship Disclaimer! TDD is just one tool in your toolbox. It will not lead you to enlightenment.
  • 33.
    Daniel IrvineModern softwarecraftsmanship Most importantly Craft != TDD
  • 34.
    Daniel IrvineModern softwarecraftsmanship Code comments are a code smell
  • 35.
    Daniel IrvineModern softwarecraftsmanship Craft is the idea that learning never ends College programmer Comments: good Professional programmer Comments: bad
  • 36.
    Daniel IrvineModern softwarecraftsmanship Quality Professionalism Community
  • 37.
    Daniel IrvineModern softwarecraftsmanship Business analyst Tester Programmer
  • 38.
    Daniel IrvineModern softwarecraftsmanship Crafters are generalists/polyglots • Picking the right tool for the job • Capitalizing on breadth of experience • Sharing techniques across communities
  • 39.
    Daniel IrvineModern softwarecraftsmanship Crafters are responsible • Building maintainable, long-life software • Making the right tradeoffs • Engaging with stakeholders • Engaging with industry
  • 40.
    Daniel IrvineModern softwarecraftsmanship Professionalism does not mean suits, ties and handshakes Professionalism does mean humbleness, humanity, and trust
  • 41.
    Daniel IrvineModern softwarecraftsmanship Adult coders are not kids!
  • 42.
    Daniel IrvineModern softwarecraftsmanship Quality Professionalism Community
  • 43.
    Daniel IrvineModern softwarecraftsmanship But crafters are life-long learners Some college grads give up on education
  • 44.
    Daniel IrvineModern softwarecraftsmanship Industry Craft • Know everything before you join
 • “Interesting problems”
 aka “lots of incidental complexity” • Deliberate practice
 • Mentoring • Hire for ability to learn and work with others
  • 45.
    Daniel IrvineModern softwarecraftsmanship Finding a mentor is an important step to continued career growth Being a mentor is important for a healthy community
  • 46.
    Daniel IrvineModern softwarecraftsmanship What does technical mentoring look like? • Code reviews • Guided learning • Planning & estimating • Reading suggestions • Listening • Sponsorship
  • 47.
    Daniel IrvineModern softwarecraftsmanship Bootcamps are a natural fit for software craft
  • 48.
    Daniel IrvineModern softwarecraftsmanship ‘Full-fat’ craftsmanship means apprenticeships No client work Syllabus/plan Mentor acts as a client Blogging Graduation
  • 49.
    Daniel IrvineModern softwarecraftsmanship Crafters are everywhere! SoCraTes Codebar Ladies of Code Queer Code
  • 50.
    Daniel IrvineModern softwarecraftsmanship Software crafters are working towards an inclusive industry… … because software is for everyone
  • 51.
  • 52.
    Daniel IrvineModern softwarecraftsmanship What hasn’t worked for us: - the medieval craftsman guild model - journeymen - the manifesto - elitism
  • 53.
    Daniel IrvineModern softwarecraftsmanship Quality Professionalism Community
  • 54.
    Daniel IrvineModern softwarecraftsmanship Can I be a software crafter if… … I don’t practice TDD? … I work for a big faceless corporation? … I don’t call myself a crafter?
  • 55.
    Daniel IrvineModern softwarecraftsmanship Craft Craftsmanship Community and open spaces Life-long
 learning Mentoring TDD (or not) Refactoring Generalism Responsibility Professionalism Apprenticeships Manifesto Job titles Conferences
  • 56.
    Daniel IrvineModern softwarecraftsmanship What does the future hold for software craft? Industry ethics Socially responsible software Plenty of fresh ideas
  • 57.
    Daniel IrvineModern softwarecraftsmanship softwarecrafters.org Join the Slack community or register your IRL community
  • 58.