SlideShare a Scribd company logo
Picture: http://www.flickr.com/photos/drhurn/1985687/sizes/m/in/photostream/




                                                                               1
Picture: http://www.flickr.com/photos/psd/2423294079/sizes/l/in/photostream/




                                                                               2
About me




           3
Most of this presentation is based on the work of Robert Martin and Corey Haines




                                                                                   4
5
OOPSLA 1991

Object-Oriented Programming, Systems, Languages & Applications Conference
Bruce Anderson workshop “Towards a Software Architecture Handbook”
Dedicated to developing a handbook for software architects
Richard Helm, Ralph Johnson, John Vlissides and Erich Gamma met here
Collaborated for couple of years to produce “Design Patterns” - GOF




                                                                            6
OOPSLA 1998

Bruce Anderson workshop “Software as a Studio Discipline”
Discuss whether developing software is a careful blend of artistry and discipline
Pete McBreen inspired
In 2001, published book “Software Craftsmanship”
Main theme:
• Software engineering has run its course
• Building software systems requires set of skills and experiences beyond just book
learning, training courses, methodologies, and certifications




                                                                                      7
Book presented a craftsman paradigm in which apprentice software developer learns
from journeyman like other craftsman based professions
• Software is a craft: part art, part skill
• Developers should be measured on quality of work, ability to deliver value to
business and be accountable for what they produce.

At the time it was published, it did not generate much noise or interest and did not
become a hit like the GoF book.

Picture: http://www.flickr.com/photos/25507200@N07/3120849218/




                                                                                       8
Agile 2008 – Toronto

Keynote address by uncle Bob
Reviewed Agile manifesto
Proposed fifth value to agile manifesto: Craftsmanship over crap
Huge stage to bring up the same concepts again and created a lot of discussion




                                                                                 9
A week later Robert Martin revised it to craftsmanship over execution

Most software development teams execute, but they don’t care. We value execution,
but we value craftsmanship more.

“We're tired of writing crap. We are tired of embarrassing ourselves and our
employers by delivering lousy software. We have had enough of telling our
customers to reboot at midnight. We don't want bug lists that are a thousand pages
long. We don't want code that grows more tangled and corrupt with every passing
day. We're tired of doing a bad job. We want to start doing a good job.”

http://cleancoder.posterous.com/software-craftsmanship-things-wars-commandmen

Did not result in change to manifesto, but started a movement of its own.

December 2008, group of aspiring software craftsmen got together and tried to solve
some problems they were facing
Came up with a statement of things they believe in and crafted another manifesto,
the Software Craftsmanship manifesto




                                                                                      10
Software Craftsmanship manifesto




                                   11
Agile 2008 – Toronto

Keynote address by uncle Bob
Reviewed Agile manifesto
Proposed fifth value to agile manifesto: Craftsmanship over crap
Huge stage to bring up the same concepts again and created a lot of discussion




                                                                                 12
They felt that we are heading in a bad direction.
The state of software development was going downhill.




                                                        13
Theory vs. practice

Mismatch with teaching and what is needed for work
Strong theoretical knowledge but can’t write good code

Picture:
http://www.flickr.com/photos/sakeeb/4647211575/sizes/m/in/photostream/




                                                                         14
Popularity of Scrum.
Scrum focuses on process but does not prescribe technical practices.

Ken Schwaber said that we made a fundamental assumption that was wrong
Developers smart enough to come up with their own practices
But developers spent careers working in large cycles. They were used to it. waiting for
9 months before coding or before QA
Now they have to figure out how to do things in 30 days or even in 2 weeks.

Agile and Scrum requires skilled developers that know how to keep code base healthy
Delivering software every 2 to 4 weeks only possible if build up and keep code highly
maintainable

Picture: www.mountaingoatsoftware.com/scrum




                                                                                          15
Robert Martin bad code video




                               16
Place holder




               17
Big ball of mud most popular way to design and architect software
Includes Greenfield projects that have full benefit of hindsight regarding bad design
approaches of past

Picture:
http://www.flickr.com/photos/24322735@N07/2393833499/sizes/m/in/photostrea
m/




                                                                                        18
Code unreadable and looked like spaghetti code jungle




                                                        19
Become sloppy
Use duck tape to fix things
The whole code is covered with duck tape.

Picture:
http://www.flickr.com/photos/wwworks/4471608005/sizes/m/in/photostream/




                                                                          20
In a minefield
Anything you touch might break and explode

Now easier to do it all over again than to read and figure out other people’s code

Picture:
http://www.flickr.com/photos/timrich26/3308513067/sizes/m/in/photostream/




                                                                                     21
Need tools like crap4j - Change Risk Analyzer and Predictor

CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m)

m = method

comp(m) = Cyclometric complexity of method

m. cov(m) = Test code coverage for method m.

Crap gap measure




                                                              22
Most interesting man in the world
Picture: http://imgur.com/y7Hm9?full




                                       23
Software craftsmen: good software does not come from process
Comes from people who care about it
People have pride in their work
Stand by what they do
Willing to learn from others to improve
By sharing they bring up knowledge of entire team and company

Building code requires more than theoretical knowledge, it requires tacit knowledge
and experience.




                                                                                      24
We Care
We consider it our responsibility
 to gain the trust of the businesses we serve;
  therefore, we
   take our customer's problems as seriously as they do and
   stake our reputation on the quality of the work we produce.
We Practice
We consider it our responsibility
 to write code that is defect-free, proven, readable, understandable and malleable;
  therefore, we
   follow our chosen practices meticulously even under pressure and
   practice our techniques regularly.
We Learn
We consider it our responsibility
 to hone our craft in pursuit of mastery;
  therefore, we
   continuously explore new technologies and
   read and study the work of other craftsmen.
We Share
We consider it our responsibility
 to perpetuate the craft of Software;
  therefore, we
   enlist apprentices to learn it and
   actively engage other craftsmen in dialogue and practice.




                                                                                      25
We Care about quality. We stake our reputation on the quality of the work we
produce.

We Care
We consider it our responsibility
 to gain the trust of the businesses we serve;
  therefore, we
   take our customer's problems as seriously as they do and
   stake our reputation on the quality of the work we produce.




                                                                               26
We Practice: We practice our techniques regularly and follow our practices even
under pressure in order to write defect-free, proven, readable, understandable and
malleable

We Practice
We consider it our responsibility
 to write code that is defect-free, proven, readable, understandable and malleable;
  therefore, we
   follow our chosen practices meticulously even under pressure and
   practice our techniques regularly.




                                                                                      27
We Learn: we continuously explore new technologies, read and study the work of
other craftsmen.

We Learn
We consider it our responsibility
 to hone our craft in pursuit of mastery;
  therefore, we
   continuously explore new technologies and
   read and study the work of other craftsmen.




                                                                                 28
We Share: we look for newcomers and actively engage other craftsmen in dialogue
and practice

We Share
We consider it our responsibility
 to perpetuate the craft of Software;
  therefore, we
   enlist apprentices to learn it and
   actively engage other craftsmen in dialogue and practice.


Picture:
http://www.flickr.com/photos/das_butzele/227637183/sizes/z/in/photostream/




                                                                                  29
Disciplines




              30
TDD – verifies that our code works and makes it possible to refactor and constantly
improve code over time.



TDD: Follow 3 rules: 1) not allowed to write production code until you have a failing
unit test, 2) you are not allowed to write more of unit test than is sufficient to fail
(not compile is failing), 3) you are not allowed to write more production code than is
sufficient to pass. This forces us to keep the code executing all the time. Tests make
the software flexible and maintainable.




                                                                                          31
CI: Use tools like Hudson, CruiseControl, Bamboo, and TeamCity. If build fails,
immediately fix build.




                                                                                  32
Pairing: If you don’t want to code pair, at least make sure team is communicating,
sharing and working closely together.




                                                                                     33
Pride and attitude that QA should find nothing




                                                 34
Principles




             35
Apply the boy scout rule: Always leave camp ground cleaner than way you found it.
That is, whenever you work on a class or function, spend some extra time to refactor
it and clean it a little.

Picture:
http://www.flickr.com/photos/fotoecke/5177140233/sizes/m/in/photostream/




                                                                                       36
Apply Extract till you drop: Function size should be small. Keeping extracting until you
can no longer extract function. This takes all the concepts in the function puts them
in well named places.




                                                                                           37
No argument is best argument. Functions should have smallest number of arguments
possible. Try not to exceed 2 arguments. Do not pass Booleans as arguments; instead
create two well named functions.


Picture:
http://www.flickr.com/photos/drinksmachine/3732782275/sizes/m/in/photostream/




                                                                                      38
Use long names to be as descriptive as possible.




                                                   39
Avoid duplication. Do not copy and paste.

Picture: http://www.flickr.com/photos/popilop/331357312/sizes/z/in/photostream/




                                                                                  40
Design Patterns




                  41
SOLID Principles

S SRP Single responsibility principle the notion that an object should have only a
single responsibility.
O OCP Open/closed principle the notion that “software entities … should be open for
extension, but closed for modification”.
L LSP Liskov substitution principle the notion that “objects in a program should be
replaceable with instances of their subtypes without altering the correctness of that
program”.

I ISP Interface segregation principle the notion that “many client specific interfaces
are better than one general purpose interface.”

D DIP Dependency inversion principle the notion that one should “Depend upon
Abstractions. Do not depend upon concretions.”[
Dependency injection is one method of following this principle.




                                                                                         42
Picture: http://lostechies.com/gabrielschenker/files/2011/03/giant_2.jpg




                                                                           43
Picture:
http://lostechies.com/derickbailey/files/2011/03/OpenClosedPrinciple2_2C596E17.j
pg




                                                                                   44
Picture:
http://lostechies.com/derickbailey/files/2011/03/LiskovSubtitutionPrinciple_52BB51
62.jpg




                                                                                     45
Picture:
http://lostechies.com/derickbailey/files/2011/03/InterfaceSegregationPrinciple_6021
6468.jpg




                                                                                      46
Picture:
http://lostechies.com/derickbailey/files/2011/03/DependencyInversionPrinciple_027
8F9E2.jpg




                                                                                    47
Abstract away volatility: look at what is likely to change and separate it from what is
not likely to change. (do not mix gui with business rules).




                                                                                          48
http://www.flickr.com/photos/70981241@N00/3979767112/

Decouple from others: write stubs to ensure your code can run and to define your
interface




                                                                                   49
http://www.flickr.com/photos/11904001@N00/3983980813/

Work in small increments

Use progressive widening: Add a small feature from top to bottom (GUI to database)

Use progressive deepening: Get something working in one layer and then move it
down to other layers. 1st make it work, then make it right, then make it fast.

Avoid grand redesigns. They generally do not work very well. A “tiger” team will
constantly be trying to catch up with maintenance team.




                                                                                     50
Short iterations (1 or 2 weeks). Plan, code, testing, documentation (complete cycle
resulting in deployable software.
Participate in the definition process by demonstrating working code.




                                                                                      51
Commission instead of omission. It is better to experiment than to wait.
Never be blocked: always find some way to make progress

Picture: http://www.flickr.com/photos/7821771@N05/4679360979/




                                                                           52
You Ain’t gonna need it. Avoid turgid viscous architectures. They do harm than good.
They slow you down. Don’t try to create a solution for all possible (imaginable) cases.
Just try to solve the problem at hand use a simple architecture. Use good coding
techniques (like decoupling and SRP) and adding in new cases as they are need
should be easy.

Picture: http://www.flickr.com/photos/97041449@N00/5261698908/




                                                                                          53
Automate everything. Playing with system should be explorative testing. The other
vast majority of testing should be automated. Builds should be automated.
Deployments should be automated.

Check out the book “Continuous Delivery: Reliable Software Releases through Build,
Test, and Deployment Automation” by Jez Humble and David Farley




                                                                                     54
Test through the right interface. Do not test business rules through the GUI. Test GUI
connected to a dummy (mock) layer.

Picture: http://www.flickr.com/photos/37164718@N02/5365226277/




                                                                                         55
Don’t jump into the debugger. Look at the code 1st. Use TDD. Debugger should be
last resort.

Picture: http://www.flickr.com/photos/71962092@N00/2874328851/




                                                                                  56
Clean code: Only way to go fast is to slow down a minute and write clean code.
Readable, obvious, small functions, good names
Don’t write bad code: It does not only slow down others months from now but will
slow you down immediately.




                                                                                   57
Software craftsmanship is about pride in work, team work, mentorship, improving
skills, practicing
Yet there is some disagreement




                                                                                  58
Not everyone agrees
Dan North, and David Harvey
Argue software craftsmanship manifesto is weak
Just adds riders or extensions to agile manifesto
Most already covered in agile principles




                                                    59
Principle #9: continuous attention to technical excellence and good design enhances
agility.




                                                                                      60
2nd, manifesto is tame
Manifesto - a statement of belief, a call-to-arms, feisty, opinionated, and brash.

Marx and Angels communist manifesto
Futurist manifesto
SCUM manifesto
All compelling, persuasive, controversial and polarizing
Should be something we can disagree with

No reasonable person can disagree with software craftsmanship manifesto
No one can say they don’t care about adding value, create community of
professionals, having productive partnerships and writing quality software.

Not much of a manifesto




                                                                                     61
Manifesto is attack on software engineering and scientific research
Manifesto is giving permission new generation to ignore all lessons learned from
software engineering
Lessons like the works of DeMarco, Yourdon, Parnas, Dijkstra, Hoare, Weinberg.




                                                                                   62
Language matters
choosing inappropriate metaphors, like craftsman, apprentice, journeyman, increases
gap between development and business.
Software developers have their own definition of craftsmanship, but what matters is
perception of customers

Associate craft with quality at a flea-market or craft fair - not something can really
rely on

http://www.flickr.com/photos/58289610@N00/3610407879/




                                                                                         63
Terms "Master", "Journeyman", and "Apprentice“ bring up secretive guilds of middle
ages with ritual, mysticism, and intrigue

Software craftsmen should be egoless, humble, with focus on outcome rather than
code or process




                                                                                     64
Manifesto brought people together and made it easier for them to roll out some
ideas on how to practice




                                                                                 65
Code katas - Dave Thomas from pragmatic programmers
Small problems to solve

Uncle Bob switched to practice on a solution instead
Like martial arts and how you repeat small motions and practice them until they
become natural reflexes
Do it over and over again until it becomes reflex
Katacasts.com – Corey Haines has various screencasts known as katacast that show
folks practicing a small kata




                                                                                   66
Example Bowling Kata, Poker Kata, Supermarket Kata, Tennis Kata

Picture: http://www.flickr.com/photos/49715404@N00/3267627038/




                                                                  67
Code retreats started worldwide
Developers get together on Saturday for full day of practice
Work on Conway’s game of life using technique “TDD as if you meant it”
Focuses on TDD being all about evolutionary design
Pair-up, work on it for 45 minutes, then delete code, swap pairs and do it again




                                                                                   68
2 companies swap employee for week
Employees learn practices of another company and come back and try to improve
their own environment




                                                                                69
Craftsman journey – you go to company for 1 week and learn what they do
Instead of going to conference, company will give you time off to go and work and
learn what others are doing




                                                                                    70
Craftsman spikes are side projects that you use to practice craftsmanship
Companies offers employees 20% time to work on side projects




                                                                            71
Software craftsmanship conferences established and 2 held each year, one in the UK
and one in the US
Several Software Craftsmanship User groups started




                                                                                     72
What does all this mean to you?




                                  73
74
75
Contact Info




               76
77
78
79
80
81

More Related Content

What's hot

From TrainedMonkey to Google SoC mentor – How to become an OOo developer
From TrainedMonkey to Google SoC mentor – How to become an OOo developerFrom TrainedMonkey to Google SoC mentor – How to become an OOo developer
From TrainedMonkey to Google SoC mentor – How to become an OOo developer
Alexandro Colorado
 
Lean principles, Open Source, and the road ahead (Roberto Di Cosmo)
Lean principles, Open Source, and the road ahead (Roberto Di Cosmo)Lean principles, Open Source, and the road ahead (Roberto Di Cosmo)
Lean principles, Open Source, and the road ahead (Roberto Di Cosmo)
AdaCore
 
Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)
Wojciech Seliga
 
Code Now
Code NowCode Now
Code Now
Frances Coronel
 
[EN] Great software development quotes
[EN] Great software development quotes[EN] Great software development quotes
[EN] Great software development quotes
Eudris Cabrera
 
Freescale-SCAD IDUS 421 // IACT 720
Freescale-SCAD IDUS 421 // IACT 720Freescale-SCAD IDUS 421 // IACT 720
Freescale-SCAD IDUS 421 // IACT 720
Dave Malouf
 
How to become a software developer
How to become a software developerHow to become a software developer
How to become a software developer
Eyob Lube
 
Losing Sight of DevOps in an Automation Forest - devopsdays Atlanta 2013
Losing Sight of DevOps in an Automation Forest - devopsdays Atlanta 2013Losing Sight of DevOps in an Automation Forest - devopsdays Atlanta 2013
Losing Sight of DevOps in an Automation Forest - devopsdays Atlanta 2013
XebiaLabs
 
Enabling Lean with Tech: lessons learned applying lean at paypal
Enabling Lean with Tech: lessons learned applying lean at paypalEnabling Lean with Tech: lessons learned applying lean at paypal
Enabling Lean with Tech: lessons learned applying lean at paypal
Bill Scott
 
Introduction to SOLID Principles
Introduction to SOLID PrinciplesIntroduction to SOLID Principles
Introduction to SOLID Principles
Ganesh Samarthyam
 
Clean Code Software Engineering
Clean Code Software Engineering Clean Code Software Engineering
Clean Code Software Engineering
Inocentshuja Ahmad
 
Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java
Wojciech Seliga
 
[DesignOps Global Conference 2019] Samir Dash - 3-steps for building design e...
[DesignOps Global Conference 2019] Samir Dash - 3-steps for buildingdesign e...[DesignOps Global Conference 2019] Samir Dash - 3-steps for buildingdesign e...
[DesignOps Global Conference 2019] Samir Dash - 3-steps for building design e...
Samir Dash
 

What's hot (13)

From TrainedMonkey to Google SoC mentor – How to become an OOo developer
From TrainedMonkey to Google SoC mentor – How to become an OOo developerFrom TrainedMonkey to Google SoC mentor – How to become an OOo developer
From TrainedMonkey to Google SoC mentor – How to become an OOo developer
 
Lean principles, Open Source, and the road ahead (Roberto Di Cosmo)
Lean principles, Open Source, and the road ahead (Roberto Di Cosmo)Lean principles, Open Source, and the road ahead (Roberto Di Cosmo)
Lean principles, Open Source, and the road ahead (Roberto Di Cosmo)
 
Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)
 
Code Now
Code NowCode Now
Code Now
 
[EN] Great software development quotes
[EN] Great software development quotes[EN] Great software development quotes
[EN] Great software development quotes
 
Freescale-SCAD IDUS 421 // IACT 720
Freescale-SCAD IDUS 421 // IACT 720Freescale-SCAD IDUS 421 // IACT 720
Freescale-SCAD IDUS 421 // IACT 720
 
How to become a software developer
How to become a software developerHow to become a software developer
How to become a software developer
 
Losing Sight of DevOps in an Automation Forest - devopsdays Atlanta 2013
Losing Sight of DevOps in an Automation Forest - devopsdays Atlanta 2013Losing Sight of DevOps in an Automation Forest - devopsdays Atlanta 2013
Losing Sight of DevOps in an Automation Forest - devopsdays Atlanta 2013
 
Enabling Lean with Tech: lessons learned applying lean at paypal
Enabling Lean with Tech: lessons learned applying lean at paypalEnabling Lean with Tech: lessons learned applying lean at paypal
Enabling Lean with Tech: lessons learned applying lean at paypal
 
Introduction to SOLID Principles
Introduction to SOLID PrinciplesIntroduction to SOLID Principles
Introduction to SOLID Principles
 
Clean Code Software Engineering
Clean Code Software Engineering Clean Code Software Engineering
Clean Code Software Engineering
 
Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java
 
[DesignOps Global Conference 2019] Samir Dash - 3-steps for building design e...
[DesignOps Global Conference 2019] Samir Dash - 3-steps for buildingdesign e...[DesignOps Global Conference 2019] Samir Dash - 3-steps for buildingdesign e...
[DesignOps Global Conference 2019] Samir Dash - 3-steps for building design e...
 

Similar to Software craftsmanship - Imperative or Hype

Trend Micro Star Trek 2020 - Accelerating DevOps transformation through gamif...
Trend Micro Star Trek 2020 - Accelerating DevOps transformation through gamif...Trend Micro Star Trek 2020 - Accelerating DevOps transformation through gamif...
Trend Micro Star Trek 2020 - Accelerating DevOps transformation through gamif...
Der-Jeng Lin
 
Working with Developers
Working with DevelopersWorking with Developers
Working with Developers
Paul Walk
 
Raising the Bar
Raising the BarRaising the Bar
Raising the Bar
Alexandru Bolboaca
 
Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"
Christian Heilmann
 
How to become a Software Engineer Carrier Path for Software Developer
How to become a Software Engineer Carrier Path for Software DeveloperHow to become a Software Engineer Carrier Path for Software Developer
How to become a Software Engineer Carrier Path for Software Developer
jeetendra mandal
 
Case Study: Practical tools and strategies for tackling legacy practices and ...
Case Study: Practical tools and strategies for tackling legacy practices and ...Case Study: Practical tools and strategies for tackling legacy practices and ...
Case Study: Practical tools and strategies for tackling legacy practices and ...
Alejandro S.
 
What is the Easiest Way to Hire a React Developer?
What is the Easiest Way to Hire a React Developer?What is the Easiest Way to Hire a React Developer?
What is the Easiest Way to Hire a React Developer?
BOSC Tech Labs
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software EngineeringSoftware Craftsmanship VS Software Engineering
Software Craftsmanship VS Software Engineering
Andy Maleh
 
Excavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsExcavating the knowledge of our ancestors
Excavating the knowledge of our ancestors
Uwe Friedrichsen
 
Clean Code Part i - Design Patterns and Best Practices -
Clean Code Part i - Design Patterns and Best Practices -Clean Code Part i - Design Patterns and Best Practices -
Clean Code Part i - Design Patterns and Best Practices -
Theo Jungeblut
 
Outpost24 Webinar - DevOps to DevSecOps: delivering quality and secure develo...
Outpost24 Webinar - DevOps to DevSecOps: delivering quality and secure develo...Outpost24 Webinar - DevOps to DevSecOps: delivering quality and secure develo...
Outpost24 Webinar - DevOps to DevSecOps: delivering quality and secure develo...
Outpost24
 
Using Product Box to Build the Complete Developer
Using Product Box to Build the Complete DeveloperUsing Product Box to Build the Complete Developer
Using Product Box to Build the Complete Developer
Luke Hohmann
 
Started in-tech-la-nov-21
Started in-tech-la-nov-21Started in-tech-la-nov-21
Started in-tech-la-nov-21
Thinkful
 
InnerSourcing - Worldwide enterprise development teams collaboration
InnerSourcing - Worldwide enterprise development teams collaborationInnerSourcing - Worldwide enterprise development teams collaboration
InnerSourcing - Worldwide enterprise development teams collaboration
Julian Werba
 
Software Craftsmanship - JAX London 2011
Software Craftsmanship - JAX London 2011Software Craftsmanship - JAX London 2011
Software Craftsmanship - JAX London 2011
Sandro Mancuso
 
Software Development in 21st Century
Software Development in 21st CenturySoftware Development in 21st Century
Software Development in 21st Century
Henry Jacob
 
Product Vs Craft
Product Vs CraftProduct Vs Craft
Product Vs Craft
MagenTys
 
It is a sunny day
It is a sunny dayIt is a sunny day
It is a sunny day
bcoder
 
Friday final test
Friday final testFriday final test
Friday final test
bcoder
 
The Realistic - Future : Web Development
The Realistic - Future : Web DevelopmentThe Realistic - Future : Web Development
The Realistic - Future : Web Development
MalikZohaib27
 

Similar to Software craftsmanship - Imperative or Hype (20)

Trend Micro Star Trek 2020 - Accelerating DevOps transformation through gamif...
Trend Micro Star Trek 2020 - Accelerating DevOps transformation through gamif...Trend Micro Star Trek 2020 - Accelerating DevOps transformation through gamif...
Trend Micro Star Trek 2020 - Accelerating DevOps transformation through gamif...
 
Working with Developers
Working with DevelopersWorking with Developers
Working with Developers
 
Raising the Bar
Raising the BarRaising the Bar
Raising the Bar
 
Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"Sacrificing the golden calf of "coding"
Sacrificing the golden calf of "coding"
 
How to become a Software Engineer Carrier Path for Software Developer
How to become a Software Engineer Carrier Path for Software DeveloperHow to become a Software Engineer Carrier Path for Software Developer
How to become a Software Engineer Carrier Path for Software Developer
 
Case Study: Practical tools and strategies for tackling legacy practices and ...
Case Study: Practical tools and strategies for tackling legacy practices and ...Case Study: Practical tools and strategies for tackling legacy practices and ...
Case Study: Practical tools and strategies for tackling legacy practices and ...
 
What is the Easiest Way to Hire a React Developer?
What is the Easiest Way to Hire a React Developer?What is the Easiest Way to Hire a React Developer?
What is the Easiest Way to Hire a React Developer?
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software EngineeringSoftware Craftsmanship VS Software Engineering
Software Craftsmanship VS Software Engineering
 
Excavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsExcavating the knowledge of our ancestors
Excavating the knowledge of our ancestors
 
Clean Code Part i - Design Patterns and Best Practices -
Clean Code Part i - Design Patterns and Best Practices -Clean Code Part i - Design Patterns and Best Practices -
Clean Code Part i - Design Patterns and Best Practices -
 
Outpost24 Webinar - DevOps to DevSecOps: delivering quality and secure develo...
Outpost24 Webinar - DevOps to DevSecOps: delivering quality and secure develo...Outpost24 Webinar - DevOps to DevSecOps: delivering quality and secure develo...
Outpost24 Webinar - DevOps to DevSecOps: delivering quality and secure develo...
 
Using Product Box to Build the Complete Developer
Using Product Box to Build the Complete DeveloperUsing Product Box to Build the Complete Developer
Using Product Box to Build the Complete Developer
 
Started in-tech-la-nov-21
Started in-tech-la-nov-21Started in-tech-la-nov-21
Started in-tech-la-nov-21
 
InnerSourcing - Worldwide enterprise development teams collaboration
InnerSourcing - Worldwide enterprise development teams collaborationInnerSourcing - Worldwide enterprise development teams collaboration
InnerSourcing - Worldwide enterprise development teams collaboration
 
Software Craftsmanship - JAX London 2011
Software Craftsmanship - JAX London 2011Software Craftsmanship - JAX London 2011
Software Craftsmanship - JAX London 2011
 
Software Development in 21st Century
Software Development in 21st CenturySoftware Development in 21st Century
Software Development in 21st Century
 
Product Vs Craft
Product Vs CraftProduct Vs Craft
Product Vs Craft
 
It is a sunny day
It is a sunny dayIt is a sunny day
It is a sunny day
 
Friday final test
Friday final testFriday final test
Friday final test
 
The Realistic - Future : Web Development
The Realistic - Future : Web DevelopmentThe Realistic - Future : Web Development
The Realistic - Future : Web Development
 

More from SUGSA

Help, the hippies have taken my team to play games... or let’s get real we ha...
Help, the hippies have taken my team to play games... or let’s get real we ha...Help, the hippies have taken my team to play games... or let’s get real we ha...
Help, the hippies have taken my team to play games... or let’s get real we ha...
SUGSA
 
Can PO teams solve the PO problem?
Can PO teams solve the PO problem?Can PO teams solve the PO problem?
Can PO teams solve the PO problem?
SUGSA
 
Agile Adoption Success - Brent Blake
Agile Adoption Success - Brent BlakeAgile Adoption Success - Brent Blake
Agile Adoption Success - Brent Blake
SUGSA
 
Daily Stand up patterns & heuristics - Fadi Stephan
Daily Stand up patterns & heuristics - Fadi StephanDaily Stand up patterns & heuristics - Fadi Stephan
Daily Stand up patterns & heuristics - Fadi Stephan
SUGSA
 
Scrum in publishing - Sharna Sammy
Scrum in publishing - Sharna SammyScrum in publishing - Sharna Sammy
Scrum in publishing - Sharna Sammy
SUGSA
 
It's the culture, stupid!
It's the culture, stupid!It's the culture, stupid!
It's the culture, stupid!
SUGSA
 
Fixed price scrum - Patrick Vine
Fixed price scrum - Patrick VineFixed price scrum - Patrick Vine
Fixed price scrum - Patrick Vine
SUGSA
 
Agile - The Jazz Manifesto
Agile -  The Jazz ManifestoAgile -  The Jazz Manifesto
Agile - The Jazz Manifesto
SUGSA
 
A product owner's guide to saying no - Annu Augustine
A product owner's guide to saying no - Annu AugustineA product owner's guide to saying no - Annu Augustine
A product owner's guide to saying no - Annu Augustine
SUGSA
 

More from SUGSA (9)

Help, the hippies have taken my team to play games... or let’s get real we ha...
Help, the hippies have taken my team to play games... or let’s get real we ha...Help, the hippies have taken my team to play games... or let’s get real we ha...
Help, the hippies have taken my team to play games... or let’s get real we ha...
 
Can PO teams solve the PO problem?
Can PO teams solve the PO problem?Can PO teams solve the PO problem?
Can PO teams solve the PO problem?
 
Agile Adoption Success - Brent Blake
Agile Adoption Success - Brent BlakeAgile Adoption Success - Brent Blake
Agile Adoption Success - Brent Blake
 
Daily Stand up patterns & heuristics - Fadi Stephan
Daily Stand up patterns & heuristics - Fadi StephanDaily Stand up patterns & heuristics - Fadi Stephan
Daily Stand up patterns & heuristics - Fadi Stephan
 
Scrum in publishing - Sharna Sammy
Scrum in publishing - Sharna SammyScrum in publishing - Sharna Sammy
Scrum in publishing - Sharna Sammy
 
It's the culture, stupid!
It's the culture, stupid!It's the culture, stupid!
It's the culture, stupid!
 
Fixed price scrum - Patrick Vine
Fixed price scrum - Patrick VineFixed price scrum - Patrick Vine
Fixed price scrum - Patrick Vine
 
Agile - The Jazz Manifesto
Agile -  The Jazz ManifestoAgile -  The Jazz Manifesto
Agile - The Jazz Manifesto
 
A product owner's guide to saying no - Annu Augustine
A product owner's guide to saying no - Annu AugustineA product owner's guide to saying no - Annu Augustine
A product owner's guide to saying no - Annu Augustine
 

Recently uploaded

Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Jeffrey Haguewood
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
LucaBarbaro3
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
Azure API Management to expose backend services securely
Azure API Management to expose backend services securelyAzure API Management to expose backend services securely
Azure API Management to expose backend services securely
Dinusha Kumarasiri
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
saastr
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
alexjohnson7307
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
Hiike
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 

Recently uploaded (20)

Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
Azure API Management to expose backend services securely
Azure API Management to expose backend services securelyAzure API Management to expose backend services securely
Azure API Management to expose backend services securely
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
Overcoming the PLG Trap: Lessons from Canva's Head of Sales & Head of EMEA Da...
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 

Software craftsmanship - Imperative or Hype

  • 4. Most of this presentation is based on the work of Robert Martin and Corey Haines 4
  • 5. 5
  • 6. OOPSLA 1991 Object-Oriented Programming, Systems, Languages & Applications Conference Bruce Anderson workshop “Towards a Software Architecture Handbook” Dedicated to developing a handbook for software architects Richard Helm, Ralph Johnson, John Vlissides and Erich Gamma met here Collaborated for couple of years to produce “Design Patterns” - GOF 6
  • 7. OOPSLA 1998 Bruce Anderson workshop “Software as a Studio Discipline” Discuss whether developing software is a careful blend of artistry and discipline Pete McBreen inspired In 2001, published book “Software Craftsmanship” Main theme: • Software engineering has run its course • Building software systems requires set of skills and experiences beyond just book learning, training courses, methodologies, and certifications 7
  • 8. Book presented a craftsman paradigm in which apprentice software developer learns from journeyman like other craftsman based professions • Software is a craft: part art, part skill • Developers should be measured on quality of work, ability to deliver value to business and be accountable for what they produce. At the time it was published, it did not generate much noise or interest and did not become a hit like the GoF book. Picture: http://www.flickr.com/photos/25507200@N07/3120849218/ 8
  • 9. Agile 2008 – Toronto Keynote address by uncle Bob Reviewed Agile manifesto Proposed fifth value to agile manifesto: Craftsmanship over crap Huge stage to bring up the same concepts again and created a lot of discussion 9
  • 10. A week later Robert Martin revised it to craftsmanship over execution Most software development teams execute, but they don’t care. We value execution, but we value craftsmanship more. “We're tired of writing crap. We are tired of embarrassing ourselves and our employers by delivering lousy software. We have had enough of telling our customers to reboot at midnight. We don't want bug lists that are a thousand pages long. We don't want code that grows more tangled and corrupt with every passing day. We're tired of doing a bad job. We want to start doing a good job.” http://cleancoder.posterous.com/software-craftsmanship-things-wars-commandmen Did not result in change to manifesto, but started a movement of its own. December 2008, group of aspiring software craftsmen got together and tried to solve some problems they were facing Came up with a statement of things they believe in and crafted another manifesto, the Software Craftsmanship manifesto 10
  • 12. Agile 2008 – Toronto Keynote address by uncle Bob Reviewed Agile manifesto Proposed fifth value to agile manifesto: Craftsmanship over crap Huge stage to bring up the same concepts again and created a lot of discussion 12
  • 13. They felt that we are heading in a bad direction. The state of software development was going downhill. 13
  • 14. Theory vs. practice Mismatch with teaching and what is needed for work Strong theoretical knowledge but can’t write good code Picture: http://www.flickr.com/photos/sakeeb/4647211575/sizes/m/in/photostream/ 14
  • 15. Popularity of Scrum. Scrum focuses on process but does not prescribe technical practices. Ken Schwaber said that we made a fundamental assumption that was wrong Developers smart enough to come up with their own practices But developers spent careers working in large cycles. They were used to it. waiting for 9 months before coding or before QA Now they have to figure out how to do things in 30 days or even in 2 weeks. Agile and Scrum requires skilled developers that know how to keep code base healthy Delivering software every 2 to 4 weeks only possible if build up and keep code highly maintainable Picture: www.mountaingoatsoftware.com/scrum 15
  • 16. Robert Martin bad code video 16
  • 18. Big ball of mud most popular way to design and architect software Includes Greenfield projects that have full benefit of hindsight regarding bad design approaches of past Picture: http://www.flickr.com/photos/24322735@N07/2393833499/sizes/m/in/photostrea m/ 18
  • 19. Code unreadable and looked like spaghetti code jungle 19
  • 20. Become sloppy Use duck tape to fix things The whole code is covered with duck tape. Picture: http://www.flickr.com/photos/wwworks/4471608005/sizes/m/in/photostream/ 20
  • 21. In a minefield Anything you touch might break and explode Now easier to do it all over again than to read and figure out other people’s code Picture: http://www.flickr.com/photos/timrich26/3308513067/sizes/m/in/photostream/ 21
  • 22. Need tools like crap4j - Change Risk Analyzer and Predictor CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m) m = method comp(m) = Cyclometric complexity of method m. cov(m) = Test code coverage for method m. Crap gap measure 22
  • 23. Most interesting man in the world Picture: http://imgur.com/y7Hm9?full 23
  • 24. Software craftsmen: good software does not come from process Comes from people who care about it People have pride in their work Stand by what they do Willing to learn from others to improve By sharing they bring up knowledge of entire team and company Building code requires more than theoretical knowledge, it requires tacit knowledge and experience. 24
  • 25. We Care We consider it our responsibility to gain the trust of the businesses we serve; therefore, we take our customer's problems as seriously as they do and stake our reputation on the quality of the work we produce. We Practice We consider it our responsibility to write code that is defect-free, proven, readable, understandable and malleable; therefore, we follow our chosen practices meticulously even under pressure and practice our techniques regularly. We Learn We consider it our responsibility to hone our craft in pursuit of mastery; therefore, we continuously explore new technologies and read and study the work of other craftsmen. We Share We consider it our responsibility to perpetuate the craft of Software; therefore, we enlist apprentices to learn it and actively engage other craftsmen in dialogue and practice. 25
  • 26. We Care about quality. We stake our reputation on the quality of the work we produce. We Care We consider it our responsibility to gain the trust of the businesses we serve; therefore, we take our customer's problems as seriously as they do and stake our reputation on the quality of the work we produce. 26
  • 27. We Practice: We practice our techniques regularly and follow our practices even under pressure in order to write defect-free, proven, readable, understandable and malleable We Practice We consider it our responsibility to write code that is defect-free, proven, readable, understandable and malleable; therefore, we follow our chosen practices meticulously even under pressure and practice our techniques regularly. 27
  • 28. We Learn: we continuously explore new technologies, read and study the work of other craftsmen. We Learn We consider it our responsibility to hone our craft in pursuit of mastery; therefore, we continuously explore new technologies and read and study the work of other craftsmen. 28
  • 29. We Share: we look for newcomers and actively engage other craftsmen in dialogue and practice We Share We consider it our responsibility to perpetuate the craft of Software; therefore, we enlist apprentices to learn it and actively engage other craftsmen in dialogue and practice. Picture: http://www.flickr.com/photos/das_butzele/227637183/sizes/z/in/photostream/ 29
  • 31. TDD – verifies that our code works and makes it possible to refactor and constantly improve code over time. TDD: Follow 3 rules: 1) not allowed to write production code until you have a failing unit test, 2) you are not allowed to write more of unit test than is sufficient to fail (not compile is failing), 3) you are not allowed to write more production code than is sufficient to pass. This forces us to keep the code executing all the time. Tests make the software flexible and maintainable. 31
  • 32. CI: Use tools like Hudson, CruiseControl, Bamboo, and TeamCity. If build fails, immediately fix build. 32
  • 33. Pairing: If you don’t want to code pair, at least make sure team is communicating, sharing and working closely together. 33
  • 34. Pride and attitude that QA should find nothing 34
  • 36. Apply the boy scout rule: Always leave camp ground cleaner than way you found it. That is, whenever you work on a class or function, spend some extra time to refactor it and clean it a little. Picture: http://www.flickr.com/photos/fotoecke/5177140233/sizes/m/in/photostream/ 36
  • 37. Apply Extract till you drop: Function size should be small. Keeping extracting until you can no longer extract function. This takes all the concepts in the function puts them in well named places. 37
  • 38. No argument is best argument. Functions should have smallest number of arguments possible. Try not to exceed 2 arguments. Do not pass Booleans as arguments; instead create two well named functions. Picture: http://www.flickr.com/photos/drinksmachine/3732782275/sizes/m/in/photostream/ 38
  • 39. Use long names to be as descriptive as possible. 39
  • 40. Avoid duplication. Do not copy and paste. Picture: http://www.flickr.com/photos/popilop/331357312/sizes/z/in/photostream/ 40
  • 42. SOLID Principles S SRP Single responsibility principle the notion that an object should have only a single responsibility. O OCP Open/closed principle the notion that “software entities … should be open for extension, but closed for modification”. L LSP Liskov substitution principle the notion that “objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program”. I ISP Interface segregation principle the notion that “many client specific interfaces are better than one general purpose interface.” D DIP Dependency inversion principle the notion that one should “Depend upon Abstractions. Do not depend upon concretions.”[ Dependency injection is one method of following this principle. 42
  • 48. Abstract away volatility: look at what is likely to change and separate it from what is not likely to change. (do not mix gui with business rules). 48
  • 49. http://www.flickr.com/photos/70981241@N00/3979767112/ Decouple from others: write stubs to ensure your code can run and to define your interface 49
  • 50. http://www.flickr.com/photos/11904001@N00/3983980813/ Work in small increments Use progressive widening: Add a small feature from top to bottom (GUI to database) Use progressive deepening: Get something working in one layer and then move it down to other layers. 1st make it work, then make it right, then make it fast. Avoid grand redesigns. They generally do not work very well. A “tiger” team will constantly be trying to catch up with maintenance team. 50
  • 51. Short iterations (1 or 2 weeks). Plan, code, testing, documentation (complete cycle resulting in deployable software. Participate in the definition process by demonstrating working code. 51
  • 52. Commission instead of omission. It is better to experiment than to wait. Never be blocked: always find some way to make progress Picture: http://www.flickr.com/photos/7821771@N05/4679360979/ 52
  • 53. You Ain’t gonna need it. Avoid turgid viscous architectures. They do harm than good. They slow you down. Don’t try to create a solution for all possible (imaginable) cases. Just try to solve the problem at hand use a simple architecture. Use good coding techniques (like decoupling and SRP) and adding in new cases as they are need should be easy. Picture: http://www.flickr.com/photos/97041449@N00/5261698908/ 53
  • 54. Automate everything. Playing with system should be explorative testing. The other vast majority of testing should be automated. Builds should be automated. Deployments should be automated. Check out the book “Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation” by Jez Humble and David Farley 54
  • 55. Test through the right interface. Do not test business rules through the GUI. Test GUI connected to a dummy (mock) layer. Picture: http://www.flickr.com/photos/37164718@N02/5365226277/ 55
  • 56. Don’t jump into the debugger. Look at the code 1st. Use TDD. Debugger should be last resort. Picture: http://www.flickr.com/photos/71962092@N00/2874328851/ 56
  • 57. Clean code: Only way to go fast is to slow down a minute and write clean code. Readable, obvious, small functions, good names Don’t write bad code: It does not only slow down others months from now but will slow you down immediately. 57
  • 58. Software craftsmanship is about pride in work, team work, mentorship, improving skills, practicing Yet there is some disagreement 58
  • 59. Not everyone agrees Dan North, and David Harvey Argue software craftsmanship manifesto is weak Just adds riders or extensions to agile manifesto Most already covered in agile principles 59
  • 60. Principle #9: continuous attention to technical excellence and good design enhances agility. 60
  • 61. 2nd, manifesto is tame Manifesto - a statement of belief, a call-to-arms, feisty, opinionated, and brash. Marx and Angels communist manifesto Futurist manifesto SCUM manifesto All compelling, persuasive, controversial and polarizing Should be something we can disagree with No reasonable person can disagree with software craftsmanship manifesto No one can say they don’t care about adding value, create community of professionals, having productive partnerships and writing quality software. Not much of a manifesto 61
  • 62. Manifesto is attack on software engineering and scientific research Manifesto is giving permission new generation to ignore all lessons learned from software engineering Lessons like the works of DeMarco, Yourdon, Parnas, Dijkstra, Hoare, Weinberg. 62
  • 63. Language matters choosing inappropriate metaphors, like craftsman, apprentice, journeyman, increases gap between development and business. Software developers have their own definition of craftsmanship, but what matters is perception of customers Associate craft with quality at a flea-market or craft fair - not something can really rely on http://www.flickr.com/photos/58289610@N00/3610407879/ 63
  • 64. Terms "Master", "Journeyman", and "Apprentice“ bring up secretive guilds of middle ages with ritual, mysticism, and intrigue Software craftsmen should be egoless, humble, with focus on outcome rather than code or process 64
  • 65. Manifesto brought people together and made it easier for them to roll out some ideas on how to practice 65
  • 66. Code katas - Dave Thomas from pragmatic programmers Small problems to solve Uncle Bob switched to practice on a solution instead Like martial arts and how you repeat small motions and practice them until they become natural reflexes Do it over and over again until it becomes reflex Katacasts.com – Corey Haines has various screencasts known as katacast that show folks practicing a small kata 66
  • 67. Example Bowling Kata, Poker Kata, Supermarket Kata, Tennis Kata Picture: http://www.flickr.com/photos/49715404@N00/3267627038/ 67
  • 68. Code retreats started worldwide Developers get together on Saturday for full day of practice Work on Conway’s game of life using technique “TDD as if you meant it” Focuses on TDD being all about evolutionary design Pair-up, work on it for 45 minutes, then delete code, swap pairs and do it again 68
  • 69. 2 companies swap employee for week Employees learn practices of another company and come back and try to improve their own environment 69
  • 70. Craftsman journey – you go to company for 1 week and learn what they do Instead of going to conference, company will give you time off to go and work and learn what others are doing 70
  • 71. Craftsman spikes are side projects that you use to practice craftsmanship Companies offers employees 20% time to work on side projects 71
  • 72. Software craftsmanship conferences established and 2 held each year, one in the UK and one in the US Several Software Craftsmanship User groups started 72
  • 73. What does all this mean to you? 73
  • 74. 74
  • 75. 75
  • 77. 77
  • 78. 78
  • 79. 79
  • 80. 80
  • 81. 81