SlideShare une entreprise Scribd logo
1  sur  66
Encouraging Agile Discipline
Motivating developers to follow agile practices




     This work is released under the terms of the         Ashley Moran
     Creative Commons Attribution-Share Alike licence   PatchSpace Ltd
The Business Problem
The Business Problem

You have have to upgrade your legacy software to
keep your competitive advantage
The Business Problem

You have have to upgrade your legacy software to
keep your competitive advantage
Upgrading your legacy software is taking too long -
you’re falling behind and wasting money
The Business Problem

You have have to upgrade your legacy software to
keep your competitive advantage
Upgrading your legacy software is taking too long -
you’re falling behind and wasting money
Software is a technical endeavour, so there’s a
technical solution to your business problem
The Business Problem

You have have to upgrade your legacy software to
keep your competitive advantage
Upgrading your legacy software is taking too long -
you’re falling behind and wasting money
Software is a technical endeavour, so there’s a
technical solution to your business problem
Right?
The Business Problem
Some Technical Solutions
Some Technical Solutions

Move to a more powerful language
  Python, Ruby, Erlang, Smalltalk
Some Technical Solutions

Move to a more powerful language
  Python, Ruby, Erlang, Smalltalk
Create a more flexible architecture
  Marc Johnson: Laying Your Legacy to REST
Some Technical Solutions

Move to a more powerful language
  Python, Ruby, Erlang, Smalltalk
Create a more flexible architecture
  Marc Johnson: Laying Your Legacy to REST
Go “Agile”
Some Technical Solutions
Our Example Problem
Our Example Problem
We want our HTML web app available as a web
service...
Our Example Problem
We want our HTML web app available as a web
service...
...but half of our business logic is in the JavaScript and
half is on the server.
Our Example Problem
We want our HTML web app available as a web
service...
...but half of our business logic is in the JavaScript and
half is on the server.
We need to refactor our code
Our Example Problem
We want our HTML web app available as a web
service...
...but half of our business logic is in the JavaScript and
half is on the server.
We need to refactor our code
We’re scared to refactor because previous attempts
have broken other parts of our app
Our Example Problem
We want our HTML web app available as a web
service...
...but half of our business logic is in the JavaScript and
half is on the server.
We need to refactor our code
We’re scared to refactor because previous attempts
have broken other parts of our app
to be continued...
The Underlying Problem
The Underlying Problem
 Software technologies don’t make you follow good
 practices, they just remove obstacles to them
The Underlying Problem
 Software technologies don’t make you follow good
 practices, they just remove obstacles to them
 You could have followed good practices with your old
 technologies
The Underlying Problem
 Software technologies don’t make you follow good
 practices, they just remove obstacles to them
 You could have followed good practices with your old
 technologies
   Fred Brooks wrote automated tests in the 1970s
The Underlying Problem
 Software technologies don’t make you follow good
 practices, they just remove obstacles to them
 You could have followed good practices with your old
 technologies
   Fred Brooks wrote automated tests in the 1970s
 You still have the same team of developers for the new
 application that you had for the old one
The Underlying Problem
 Software technologies don’t make you follow good
 practices, they just remove obstacles to them
 You could have followed good practices with your old
 technologies
   Fred Brooks wrote automated tests in the 1970s
 You still have the same team of developers for the new
 application that you had for the old one
   Some of them see the need to improve the process
The Underlying Problem
 Software technologies don’t make you follow good
 practices, they just remove obstacles to them
 You could have followed good practices with your old
 technologies
   Fred Brooks wrote automated tests in the 1970s
 You still have the same team of developers for the new
 application that you had for the old one
   Some of them see the need to improve the process
   Some of them don’t
The Underlying Problem
Our Example Problem ctnd.
Our Example Problem ctnd.
...we were left needing to refactor our code
Our Example Problem ctnd.
...we were left needing to refactor our code
In order to refactor we need a comprehensive test suite
Our Example Problem ctnd.
...we were left needing to refactor our code
In order to refactor we need a comprehensive test suite
Why don’t we have one?
Our Example Problem ctnd.
...we were left needing to refactor our code
In order to refactor we need a comprehensive test suite
Why don’t we have one?
    Need unapparent?
Our Example Problem ctnd.
...we were left needing to refactor our code
In order to refactor we need a comprehensive test suite
Why don’t we have one?
    Need unapparent?
    Perceived lack of time?
Our Example Problem ctnd.
...we were left needing to refactor our code
In order to refactor we need a comprehensive test suite
Why don’t we have one?
    Need unapparent?
    Perceived lack of time?
    Apathy?
Our Example Problem ctnd.
...we were left needing to refactor our code
In order to refactor we need a comprehensive test suite
Why don’t we have one?
    Need unapparent?
    Perceived lack of time?
    Apathy?
    Oh shit, it’s too late
Our Example Problem ctnd.
...we were left needing to refactor our code
In order to refactor we need a comprehensive test suite
Why don’t we have one?
    Need unapparent?
    Perceived lack of time?
    Apathy?
    Oh shit, it’s too late
If we tried to create one, would we be successful?
A Field Guide to
Post-Legacy Developers
A Field Guide to
Post-Legacy Developers
Enthusiastic
  “The last project was slow and painful. I was here deploying at 2am on Friday
  night and we spent days firefighting the week after. I want to learn how to
  release software smoothly like the successful agile teams.”
A Field Guide to
Post-Legacy Developers
Enthusiastic
  “The last project was slow and painful. I was here deploying at 2am on Friday
  night and we spent days firefighting the week after. I want to learn how to
  release software smoothly like the successful agile teams.”

Neutral
  “This agile thing sounds like it could work, but I’m not convinced. It seems like
  a lot of work for me. We already know our software works, why should we
  spend time refactoring and testing it?”
A Field Guide to
Post-Legacy Developers
Enthusiastic
  “The last project was slow and painful. I was here deploying at 2am on Friday
  night and we spent days firefighting the week after. I want to learn how to
  release software smoothly like the successful agile teams.”

Neutral
  “This agile thing sounds like it could work, but I’m not convinced. It seems like
  a lot of work for me. We already know our software works, why should we
  spend time refactoring and testing it?”

Lazy
  “Why should I learn agile? I’ve been programming the same way for years and
  I’m not going to change now.”

  “By the way it’s 5.30pm, I’m off home. Have fun with the deploy.”
A Field Guide to
Post-Legacy Developers
Stick vs Carrot
Stick vs Carrot

 Are the members of your team enthusiastic, neutral, or
 lazy?
Stick vs Carrot

 Are the members of your team enthusiastic, neutral, or
 lazy?
 Will they try not to break the continuous integration
 server...
Stick vs Carrot

 Are the members of your team enthusiastic, neutral, or
 lazy?
 Will they try not to break the continuous integration
 server...
   because they want to to keep the code deployable?
Stick vs Carrot

 Are the members of your team enthusiastic, neutral, or
 lazy?
 Will they try not to break the continuous integration
 server...
   because they want to to keep the code deployable?
   or because they get shouted at?
Stick vs Carrot
Skill vs Discipline
Skill vs Discipline
                         Technical skill
                       Low             High

              Poor   Daily WTF        Nerd
 Discipline




                                    Rockstar
              Good     N00b
                                    developer
Skill vs Discipline
                                   Technical skill
                               Low                      High

              Poor         Daily WTF                    Nerd
 Discipline




                                                    Rockstar
              Good             N00b
                                                    developer


              Do you need to move the team in this direction?
Skill vs Discipline
                                   Technical skill
                               Low                      High

                                                                Or do you
              Poor         Daily WTF                    Nerd
 Discipline




                                                                just need
                                                                more
                                                                nerds?

                                                    Rockstar
              Good             N00b
                                                    developer


              Do you need to move the team in this direction?
Skill vs Discipline


                      Or do you
                      just need
                      more
                      nerds?
Skill vs Discipline
Agile Practices
(not an exhaustive list)
Agile Practices
(not an exhaustive list)


  Acceptance tests         Automated deployments
  Unit tests               Continuous integration
  Refactoring              Simplicity / elegance
  Source control           Collective ownership
  Knowledge sharing        Coding standards
Agile Practices
(not an exhaustive list)
Agile needs...
Agile needs...
                                  Technical skill
                            Low                          High

             Poor                                 Simplicity / elegance
Discipline




                     Continuous integration
                         Source control         Test-driven development
                      Collective ownership             Refactoring
             Good      Coding standards        Building deployment scripts
                          Basic testing         Building CI environments
                    Using deployment scripts
Agile needs...
                                          Technical skill
                                    Low                          High

                Poor                                      Simplicity / elegance
Discipline




                             Continuous integration
                                 Source control         Test-driven development
                              Collective ownership             Refactoring
                Good           Coding standards        Building deployment scripts
                                  Basic testing         Building CI environments
                            Using deployment scripts


             Discipline is your initial bottle-neck to becoming agile
Agile needs...
The Underlying Solution
The Underlying Solution

 A highly-disciplined bunch of über-geeks
The Underlying Solution

 A highly-disciplined bunch of über-geeks
   If you are willing to pay 50k+ a head
The Underlying Solution

 A highly-disciplined bunch of über-geeks
   If you are willing to pay 50k+ a head
   Maybe
The Underlying Solution

 A highly-disciplined bunch of über-geeks
   If you are willing to pay 50k+ a head
   Maybe
   Maybe not
The Underlying Solution

 A highly-disciplined bunch of über-geeks
   If you are willing to pay 50k+ a head
   Maybe
   Maybe not
 To upgrade your code from legacy to agile,
 upgrade your team from legacy to agile
The Underlying Solution

Contenu connexe

Tendances

Paving the Way for Agile Engineering Practices
Paving the Way for Agile Engineering PracticesPaving the Way for Agile Engineering Practices
Paving the Way for Agile Engineering PracticesAman King
 
Estimation or, "How to Dig your Grave"
Estimation or, "How to Dig your Grave"Estimation or, "How to Dig your Grave"
Estimation or, "How to Dig your Grave"Rowan Merewood
 
Effective Strategies for Distributed Testing
Effective Strategies for Distributed TestingEffective Strategies for Distributed Testing
Effective Strategies for Distributed TestingAnand Bagmar
 
Devops is not about Tooling
Devops is not about ToolingDevops is not about Tooling
Devops is not about ToolingKris Buytaert
 
Using kanban and cfd to effectively manage agile testing
Using kanban and cfd to effectively manage agile testingUsing kanban and cfd to effectively manage agile testing
Using kanban and cfd to effectively manage agile testingYuval Yeret
 
Scaling Scrum with UX
Scaling Scrum with UXScaling Scrum with UX
Scaling Scrum with UXCaleb Jenkins
 
Getting Comfortable with BDD
Getting Comfortable with BDDGetting Comfortable with BDD
Getting Comfortable with BDDAlex Sharp
 
David Nuescheler: Igniting CQ 5.3: What's New and Roadmap
David Nuescheler: Igniting CQ 5.3: What's New and RoadmapDavid Nuescheler: Igniting CQ 5.3: What's New and Roadmap
David Nuescheler: Igniting CQ 5.3: What's New and RoadmapDay Software
 
Scala: An experience report
Scala: An experience reportScala: An experience report
Scala: An experience reportMark Needham
 
Sensible Metrics for Dojos
Sensible Metrics for DojosSensible Metrics for Dojos
Sensible Metrics for DojosCprime
 
WE are Doing it Wrong - Dmitry Sharkov
WE are Doing it Wrong - Dmitry SharkovWE are Doing it Wrong - Dmitry Sharkov
WE are Doing it Wrong - Dmitry SharkovQA or the Highway
 

Tendances (11)

Paving the Way for Agile Engineering Practices
Paving the Way for Agile Engineering PracticesPaving the Way for Agile Engineering Practices
Paving the Way for Agile Engineering Practices
 
Estimation or, "How to Dig your Grave"
Estimation or, "How to Dig your Grave"Estimation or, "How to Dig your Grave"
Estimation or, "How to Dig your Grave"
 
Effective Strategies for Distributed Testing
Effective Strategies for Distributed TestingEffective Strategies for Distributed Testing
Effective Strategies for Distributed Testing
 
Devops is not about Tooling
Devops is not about ToolingDevops is not about Tooling
Devops is not about Tooling
 
Using kanban and cfd to effectively manage agile testing
Using kanban and cfd to effectively manage agile testingUsing kanban and cfd to effectively manage agile testing
Using kanban and cfd to effectively manage agile testing
 
Scaling Scrum with UX
Scaling Scrum with UXScaling Scrum with UX
Scaling Scrum with UX
 
Getting Comfortable with BDD
Getting Comfortable with BDDGetting Comfortable with BDD
Getting Comfortable with BDD
 
David Nuescheler: Igniting CQ 5.3: What's New and Roadmap
David Nuescheler: Igniting CQ 5.3: What's New and RoadmapDavid Nuescheler: Igniting CQ 5.3: What's New and Roadmap
David Nuescheler: Igniting CQ 5.3: What's New and Roadmap
 
Scala: An experience report
Scala: An experience reportScala: An experience report
Scala: An experience report
 
Sensible Metrics for Dojos
Sensible Metrics for DojosSensible Metrics for Dojos
Sensible Metrics for Dojos
 
WE are Doing it Wrong - Dmitry Sharkov
WE are Doing it Wrong - Dmitry SharkovWE are Doing it Wrong - Dmitry Sharkov
WE are Doing it Wrong - Dmitry Sharkov
 

Similaire à Encouraging Agile Discipline

Atlassian - Software For Every Team
Atlassian - Software For Every TeamAtlassian - Software For Every Team
Atlassian - Software For Every TeamSven Peters
 
How To Do Kick-Ass Software Development, by Sven Peters
How To Do Kick-Ass Software Development, by Sven PetersHow To Do Kick-Ass Software Development, by Sven Peters
How To Do Kick-Ass Software Development, by Sven PetersZeroTurnaround
 
A Business Case for Git - Tim Pettersen
A Business Case for Git - Tim PettersenA Business Case for Git - Tim Pettersen
A Business Case for Git - Tim PettersenAtlassian
 
A journey to_be_a_software_craftsman
A journey to_be_a_software_craftsmanA journey to_be_a_software_craftsman
A journey to_be_a_software_craftsmanJaehoon Oh
 
Paris Web - Javascript as a programming language
Paris Web - Javascript as a programming languageParis Web - Javascript as a programming language
Paris Web - Javascript as a programming languageMarco Cedaro
 
Agile Network India | Impact of Gamification on Agile World | Suvrajith Sarkar
Agile Network India | Impact of Gamification on Agile World | Suvrajith SarkarAgile Network India | Impact of Gamification on Agile World | Suvrajith Sarkar
Agile Network India | Impact of Gamification on Agile World | Suvrajith SarkarAgileNetwork
 
Ntd2015_pt_kanban_ppt
Ntd2015_pt_kanban_pptNtd2015_pt_kanban_ppt
Ntd2015_pt_kanban_pptJokin Aspiazu
 
Achieving Technical Excellence in Your Software Teams - from Devternity
Achieving Technical Excellence in Your Software Teams - from Devternity Achieving Technical Excellence in Your Software Teams - from Devternity
Achieving Technical Excellence in Your Software Teams - from Devternity Peter Gfader
 
James Whittaker - Pursuing Quality-You Won't Get There - EuroSTAR 2011
James Whittaker - Pursuing Quality-You Won't Get There - EuroSTAR 2011James Whittaker - Pursuing Quality-You Won't Get There - EuroSTAR 2011
James Whittaker - Pursuing Quality-You Won't Get There - EuroSTAR 2011TEST Huddle
 
Best practices of project management for small teams
Best practices of project management for small teamsBest practices of project management for small teams
Best practices of project management for small teamsCake YOSHIDA
 
Kickass Agile Development - Agile & Beyond Conference
Kickass Agile Development - Agile & Beyond ConferenceKickass Agile Development - Agile & Beyond Conference
Kickass Agile Development - Agile & Beyond ConferenceDan Chuparkoff
 
Atlassian - The latest and greatest early 2013
Atlassian - The latest and greatest early 2013Atlassian - The latest and greatest early 2013
Atlassian - The latest and greatest early 2013Sven Peters
 
What's new in CQ 5.3? Top 10 features.
What's new in CQ 5.3? Top 10 features.What's new in CQ 5.3? Top 10 features.
What's new in CQ 5.3? Top 10 features.David Nuescheler
 
The Agile Manifesto in the Star Wars Universe
The Agile Manifesto in the Star Wars UniverseThe Agile Manifesto in the Star Wars Universe
The Agile Manifesto in the Star Wars UniverseAaron Griffith
 
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software DevelopmentJAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Developmentjazoon13
 
ANIn Pune March 2023 | XP 2023 – XP Where Are You? by Christian Hujer
ANIn Pune March 2023 | XP 2023 – XP Where Are You? by Christian HujerANIn Pune March 2023 | XP 2023 – XP Where Are You? by Christian Hujer
ANIn Pune March 2023 | XP 2023 – XP Where Are You? by Christian HujerAgileNetwork
 
Pivotal tracker presentation 10-13-2010
Pivotal tracker presentation   10-13-2010Pivotal tracker presentation   10-13-2010
Pivotal tracker presentation 10-13-2010pivotjoe
 
Infusing Agility into the Java Legacy
Infusing Agility into the Java LegacyInfusing Agility into the Java Legacy
Infusing Agility into the Java LegacyAman King
 
TDD for Testers Workshop
TDD for Testers WorkshopTDD for Testers Workshop
TDD for Testers WorkshopSarah Usher
 

Similaire à Encouraging Agile Discipline (20)

Atlassian - Software For Every Team
Atlassian - Software For Every TeamAtlassian - Software For Every Team
Atlassian - Software For Every Team
 
How To Do Kick-Ass Software Development, by Sven Peters
How To Do Kick-Ass Software Development, by Sven PetersHow To Do Kick-Ass Software Development, by Sven Peters
How To Do Kick-Ass Software Development, by Sven Peters
 
A Business Case for Git - Tim Pettersen
A Business Case for Git - Tim PettersenA Business Case for Git - Tim Pettersen
A Business Case for Git - Tim Pettersen
 
Why other ppl_dont_get_it
Why other ppl_dont_get_itWhy other ppl_dont_get_it
Why other ppl_dont_get_it
 
A journey to_be_a_software_craftsman
A journey to_be_a_software_craftsmanA journey to_be_a_software_craftsman
A journey to_be_a_software_craftsman
 
Paris Web - Javascript as a programming language
Paris Web - Javascript as a programming languageParis Web - Javascript as a programming language
Paris Web - Javascript as a programming language
 
Agile Network India | Impact of Gamification on Agile World | Suvrajith Sarkar
Agile Network India | Impact of Gamification on Agile World | Suvrajith SarkarAgile Network India | Impact of Gamification on Agile World | Suvrajith Sarkar
Agile Network India | Impact of Gamification on Agile World | Suvrajith Sarkar
 
Ntd2015_pt_kanban_ppt
Ntd2015_pt_kanban_pptNtd2015_pt_kanban_ppt
Ntd2015_pt_kanban_ppt
 
Achieving Technical Excellence in Your Software Teams - from Devternity
Achieving Technical Excellence in Your Software Teams - from Devternity Achieving Technical Excellence in Your Software Teams - from Devternity
Achieving Technical Excellence in Your Software Teams - from Devternity
 
James Whittaker - Pursuing Quality-You Won't Get There - EuroSTAR 2011
James Whittaker - Pursuing Quality-You Won't Get There - EuroSTAR 2011James Whittaker - Pursuing Quality-You Won't Get There - EuroSTAR 2011
James Whittaker - Pursuing Quality-You Won't Get There - EuroSTAR 2011
 
Best practices of project management for small teams
Best practices of project management for small teamsBest practices of project management for small teams
Best practices of project management for small teams
 
Kickass Agile Development - Agile & Beyond Conference
Kickass Agile Development - Agile & Beyond ConferenceKickass Agile Development - Agile & Beyond Conference
Kickass Agile Development - Agile & Beyond Conference
 
Atlassian - The latest and greatest early 2013
Atlassian - The latest and greatest early 2013Atlassian - The latest and greatest early 2013
Atlassian - The latest and greatest early 2013
 
What's new in CQ 5.3? Top 10 features.
What's new in CQ 5.3? Top 10 features.What's new in CQ 5.3? Top 10 features.
What's new in CQ 5.3? Top 10 features.
 
The Agile Manifesto in the Star Wars Universe
The Agile Manifesto in the Star Wars UniverseThe Agile Manifesto in the Star Wars Universe
The Agile Manifesto in the Star Wars Universe
 
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software DevelopmentJAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
 
ANIn Pune March 2023 | XP 2023 – XP Where Are You? by Christian Hujer
ANIn Pune March 2023 | XP 2023 – XP Where Are You? by Christian HujerANIn Pune March 2023 | XP 2023 – XP Where Are You? by Christian Hujer
ANIn Pune March 2023 | XP 2023 – XP Where Are You? by Christian Hujer
 
Pivotal tracker presentation 10-13-2010
Pivotal tracker presentation   10-13-2010Pivotal tracker presentation   10-13-2010
Pivotal tracker presentation 10-13-2010
 
Infusing Agility into the Java Legacy
Infusing Agility into the Java LegacyInfusing Agility into the Java Legacy
Infusing Agility into the Java Legacy
 
TDD for Testers Workshop
TDD for Testers WorkshopTDD for Testers Workshop
TDD for Testers Workshop
 

Plus de PatchSpace Ltd

Conflict in Complex Systems
Conflict in Complex SystemsConflict in Complex Systems
Conflict in Complex SystemsPatchSpace Ltd
 
Personal Kanban (lightning talk)
Personal Kanban (lightning talk)Personal Kanban (lightning talk)
Personal Kanban (lightning talk)PatchSpace Ltd
 
Parsing for Fun and Profit
Parsing for Fun and ProfitParsing for Fun and Profit
Parsing for Fun and ProfitPatchSpace Ltd
 
Why Won't My Car Start?
Why Won't My Car Start?Why Won't My Car Start?
Why Won't My Car Start?PatchSpace Ltd
 
ShRUG 5 - Scottish Ruby Conf edition
ShRUG 5  - Scottish Ruby Conf editionShRUG 5  - Scottish Ruby Conf edition
ShRUG 5 - Scottish Ruby Conf editionPatchSpace Ltd
 
From Specification To Success
From Specification To SuccessFrom Specification To Success
From Specification To SuccessPatchSpace Ltd
 
Uses & Abuses of Mocks & Stubs
Uses & Abuses of Mocks & StubsUses & Abuses of Mocks & Stubs
Uses & Abuses of Mocks & StubsPatchSpace Ltd
 
NWRUG July 2009 - Darcs
NWRUG July 2009 - DarcsNWRUG July 2009 - Darcs
NWRUG July 2009 - DarcsPatchSpace Ltd
 
Elephants In The Meeting Room
Elephants In The Meeting RoomElephants In The Meeting Room
Elephants In The Meeting RoomPatchSpace Ltd
 

Plus de PatchSpace Ltd (10)

Conflict in Complex Systems
Conflict in Complex SystemsConflict in Complex Systems
Conflict in Complex Systems
 
Personal Kanban (lightning talk)
Personal Kanban (lightning talk)Personal Kanban (lightning talk)
Personal Kanban (lightning talk)
 
Parsing for Fun and Profit
Parsing for Fun and ProfitParsing for Fun and Profit
Parsing for Fun and Profit
 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
 
Why Won't My Car Start?
Why Won't My Car Start?Why Won't My Car Start?
Why Won't My Car Start?
 
ShRUG 5 - Scottish Ruby Conf edition
ShRUG 5  - Scottish Ruby Conf editionShRUG 5  - Scottish Ruby Conf edition
ShRUG 5 - Scottish Ruby Conf edition
 
From Specification To Success
From Specification To SuccessFrom Specification To Success
From Specification To Success
 
Uses & Abuses of Mocks & Stubs
Uses & Abuses of Mocks & StubsUses & Abuses of Mocks & Stubs
Uses & Abuses of Mocks & Stubs
 
NWRUG July 2009 - Darcs
NWRUG July 2009 - DarcsNWRUG July 2009 - Darcs
NWRUG July 2009 - Darcs
 
Elephants In The Meeting Room
Elephants In The Meeting RoomElephants In The Meeting Room
Elephants In The Meeting Room
 

Dernier

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Dernier (20)

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Encouraging Agile Discipline

  • 1. Encouraging Agile Discipline Motivating developers to follow agile practices This work is released under the terms of the Ashley Moran Creative Commons Attribution-Share Alike licence PatchSpace Ltd
  • 3. The Business Problem You have have to upgrade your legacy software to keep your competitive advantage
  • 4. The Business Problem You have have to upgrade your legacy software to keep your competitive advantage Upgrading your legacy software is taking too long - you’re falling behind and wasting money
  • 5. The Business Problem You have have to upgrade your legacy software to keep your competitive advantage Upgrading your legacy software is taking too long - you’re falling behind and wasting money Software is a technical endeavour, so there’s a technical solution to your business problem
  • 6. The Business Problem You have have to upgrade your legacy software to keep your competitive advantage Upgrading your legacy software is taking too long - you’re falling behind and wasting money Software is a technical endeavour, so there’s a technical solution to your business problem Right?
  • 9. Some Technical Solutions Move to a more powerful language Python, Ruby, Erlang, Smalltalk
  • 10. Some Technical Solutions Move to a more powerful language Python, Ruby, Erlang, Smalltalk Create a more flexible architecture Marc Johnson: Laying Your Legacy to REST
  • 11. Some Technical Solutions Move to a more powerful language Python, Ruby, Erlang, Smalltalk Create a more flexible architecture Marc Johnson: Laying Your Legacy to REST Go “Agile”
  • 14. Our Example Problem We want our HTML web app available as a web service...
  • 15. Our Example Problem We want our HTML web app available as a web service... ...but half of our business logic is in the JavaScript and half is on the server.
  • 16. Our Example Problem We want our HTML web app available as a web service... ...but half of our business logic is in the JavaScript and half is on the server. We need to refactor our code
  • 17. Our Example Problem We want our HTML web app available as a web service... ...but half of our business logic is in the JavaScript and half is on the server. We need to refactor our code We’re scared to refactor because previous attempts have broken other parts of our app
  • 18. Our Example Problem We want our HTML web app available as a web service... ...but half of our business logic is in the JavaScript and half is on the server. We need to refactor our code We’re scared to refactor because previous attempts have broken other parts of our app to be continued...
  • 20. The Underlying Problem Software technologies don’t make you follow good practices, they just remove obstacles to them
  • 21. The Underlying Problem Software technologies don’t make you follow good practices, they just remove obstacles to them You could have followed good practices with your old technologies
  • 22. The Underlying Problem Software technologies don’t make you follow good practices, they just remove obstacles to them You could have followed good practices with your old technologies Fred Brooks wrote automated tests in the 1970s
  • 23. The Underlying Problem Software technologies don’t make you follow good practices, they just remove obstacles to them You could have followed good practices with your old technologies Fred Brooks wrote automated tests in the 1970s You still have the same team of developers for the new application that you had for the old one
  • 24. The Underlying Problem Software technologies don’t make you follow good practices, they just remove obstacles to them You could have followed good practices with your old technologies Fred Brooks wrote automated tests in the 1970s You still have the same team of developers for the new application that you had for the old one Some of them see the need to improve the process
  • 25. The Underlying Problem Software technologies don’t make you follow good practices, they just remove obstacles to them You could have followed good practices with your old technologies Fred Brooks wrote automated tests in the 1970s You still have the same team of developers for the new application that you had for the old one Some of them see the need to improve the process Some of them don’t
  • 28. Our Example Problem ctnd. ...we were left needing to refactor our code
  • 29. Our Example Problem ctnd. ...we were left needing to refactor our code In order to refactor we need a comprehensive test suite
  • 30. Our Example Problem ctnd. ...we were left needing to refactor our code In order to refactor we need a comprehensive test suite Why don’t we have one?
  • 31. Our Example Problem ctnd. ...we were left needing to refactor our code In order to refactor we need a comprehensive test suite Why don’t we have one? Need unapparent?
  • 32. Our Example Problem ctnd. ...we were left needing to refactor our code In order to refactor we need a comprehensive test suite Why don’t we have one? Need unapparent? Perceived lack of time?
  • 33. Our Example Problem ctnd. ...we were left needing to refactor our code In order to refactor we need a comprehensive test suite Why don’t we have one? Need unapparent? Perceived lack of time? Apathy?
  • 34. Our Example Problem ctnd. ...we were left needing to refactor our code In order to refactor we need a comprehensive test suite Why don’t we have one? Need unapparent? Perceived lack of time? Apathy? Oh shit, it’s too late
  • 35. Our Example Problem ctnd. ...we were left needing to refactor our code In order to refactor we need a comprehensive test suite Why don’t we have one? Need unapparent? Perceived lack of time? Apathy? Oh shit, it’s too late If we tried to create one, would we be successful?
  • 36. A Field Guide to Post-Legacy Developers
  • 37. A Field Guide to Post-Legacy Developers Enthusiastic “The last project was slow and painful. I was here deploying at 2am on Friday night and we spent days firefighting the week after. I want to learn how to release software smoothly like the successful agile teams.”
  • 38. A Field Guide to Post-Legacy Developers Enthusiastic “The last project was slow and painful. I was here deploying at 2am on Friday night and we spent days firefighting the week after. I want to learn how to release software smoothly like the successful agile teams.” Neutral “This agile thing sounds like it could work, but I’m not convinced. It seems like a lot of work for me. We already know our software works, why should we spend time refactoring and testing it?”
  • 39. A Field Guide to Post-Legacy Developers Enthusiastic “The last project was slow and painful. I was here deploying at 2am on Friday night and we spent days firefighting the week after. I want to learn how to release software smoothly like the successful agile teams.” Neutral “This agile thing sounds like it could work, but I’m not convinced. It seems like a lot of work for me. We already know our software works, why should we spend time refactoring and testing it?” Lazy “Why should I learn agile? I’ve been programming the same way for years and I’m not going to change now.” “By the way it’s 5.30pm, I’m off home. Have fun with the deploy.”
  • 40. A Field Guide to Post-Legacy Developers
  • 42. Stick vs Carrot Are the members of your team enthusiastic, neutral, or lazy?
  • 43. Stick vs Carrot Are the members of your team enthusiastic, neutral, or lazy? Will they try not to break the continuous integration server...
  • 44. Stick vs Carrot Are the members of your team enthusiastic, neutral, or lazy? Will they try not to break the continuous integration server... because they want to to keep the code deployable?
  • 45. Stick vs Carrot Are the members of your team enthusiastic, neutral, or lazy? Will they try not to break the continuous integration server... because they want to to keep the code deployable? or because they get shouted at?
  • 48. Skill vs Discipline Technical skill Low High Poor Daily WTF Nerd Discipline Rockstar Good N00b developer
  • 49. Skill vs Discipline Technical skill Low High Poor Daily WTF Nerd Discipline Rockstar Good N00b developer Do you need to move the team in this direction?
  • 50. Skill vs Discipline Technical skill Low High Or do you Poor Daily WTF Nerd Discipline just need more nerds? Rockstar Good N00b developer Do you need to move the team in this direction?
  • 51. Skill vs Discipline Or do you just need more nerds?
  • 53. Agile Practices (not an exhaustive list)
  • 54. Agile Practices (not an exhaustive list) Acceptance tests Automated deployments Unit tests Continuous integration Refactoring Simplicity / elegance Source control Collective ownership Knowledge sharing Coding standards
  • 55. Agile Practices (not an exhaustive list)
  • 57. Agile needs... Technical skill Low High Poor Simplicity / elegance Discipline Continuous integration Source control Test-driven development Collective ownership Refactoring Good Coding standards Building deployment scripts Basic testing Building CI environments Using deployment scripts
  • 58. Agile needs... Technical skill Low High Poor Simplicity / elegance Discipline Continuous integration Source control Test-driven development Collective ownership Refactoring Good Coding standards Building deployment scripts Basic testing Building CI environments Using deployment scripts Discipline is your initial bottle-neck to becoming agile
  • 61. The Underlying Solution A highly-disciplined bunch of über-geeks
  • 62. The Underlying Solution A highly-disciplined bunch of über-geeks If you are willing to pay 50k+ a head
  • 63. The Underlying Solution A highly-disciplined bunch of über-geeks If you are willing to pay 50k+ a head Maybe
  • 64. The Underlying Solution A highly-disciplined bunch of über-geeks If you are willing to pay 50k+ a head Maybe Maybe not
  • 65. The Underlying Solution A highly-disciplined bunch of über-geeks If you are willing to pay 50k+ a head Maybe Maybe not To upgrade your code from legacy to agile, upgrade your team from legacy to agile

Notes de l'éditeur

  1. Introduce self. This is my first talk/led discussion. If I speak to fast, or too quietly, please stop me as soon as possible. I’ve prepared 12 slides to introduce the subject. To begin with, let’s look at the typical business situation that highlights the need for a technological improvement.
  2. AT END: The most concrete part of this is the programming language. Expressing business logic in Ruby is easier than expressing it in Java. Building a fault-tolerant media server is easier in Erlang than in C++. A more abstract part of the solution is to define the boundaries of your app and build a service-oriented solution. Now your billing and site admin code can be in Ruby, and your video processing code can be in Erlang. The inspiration for this talk was Marc Johnson’s huddle at the previous Sheffield GeekUp, “Laying Your Legacy to REST”. The key idea being that creating a service-oriented suite of web-services will produce more powerful software quicker. Of course, you can’t just go rewriting random bits of you app in a new language, and you can’t just go slicing pieces from your legacy code and turning them into services. To do either of these you will need to follow agile practices. I will present a sample of these layer, but for now I want to give a specific example of a problem they could help solve.
  3. AT END: The most concrete part of this is the programming language. Expressing business logic in Ruby is easier than expressing it in Java. Building a fault-tolerant media server is easier in Erlang than in C++. A more abstract part of the solution is to define the boundaries of your app and build a service-oriented solution. Now your billing and site admin code can be in Ruby, and your video processing code can be in Erlang. The inspiration for this talk was Marc Johnson’s huddle at the previous Sheffield GeekUp, “Laying Your Legacy to REST”. The key idea being that creating a service-oriented suite of web-services will produce more powerful software quicker. Of course, you can’t just go rewriting random bits of you app in a new language, and you can’t just go slicing pieces from your legacy code and turning them into services. To do either of these you will need to follow agile practices. I will present a sample of these layer, but for now I want to give a specific example of a problem they could help solve.
  4. AT END: The most concrete part of this is the programming language. Expressing business logic in Ruby is easier than expressing it in Java. Building a fault-tolerant media server is easier in Erlang than in C++. A more abstract part of the solution is to define the boundaries of your app and build a service-oriented solution. Now your billing and site admin code can be in Ruby, and your video processing code can be in Erlang. The inspiration for this talk was Marc Johnson’s huddle at the previous Sheffield GeekUp, “Laying Your Legacy to REST”. The key idea being that creating a service-oriented suite of web-services will produce more powerful software quicker. Of course, you can’t just go rewriting random bits of you app in a new language, and you can’t just go slicing pieces from your legacy code and turning them into services. To do either of these you will need to follow agile practices. I will present a sample of these layer, but for now I want to give a specific example of a problem they could help solve.
  5. AT END: The most concrete part of this is the programming language. Expressing business logic in Ruby is easier than expressing it in Java. Building a fault-tolerant media server is easier in Erlang than in C++. A more abstract part of the solution is to define the boundaries of your app and build a service-oriented solution. Now your billing and site admin code can be in Ruby, and your video processing code can be in Erlang. The inspiration for this talk was Marc Johnson’s huddle at the previous Sheffield GeekUp, “Laying Your Legacy to REST”. The key idea being that creating a service-oriented suite of web-services will produce more powerful software quicker. Of course, you can’t just go rewriting random bits of you app in a new language, and you can’t just go slicing pieces from your legacy code and turning them into services. To do either of these you will need to follow agile practices. I will present a sample of these layer, but for now I want to give a specific example of a problem they could help solve.
  6. AFTER 2: And who knows which half of the business logic is in the front end? Probably nobody... AFTER 4: And not just broken something once, but turned development into a game of whack-a-mole. Every time we deploy, some random part of the app breaks. And worse, some parts we fix break again later. In short, creating a web service version of our app could put us out of action for weeks if it goes live with serious bugs.
  7. AFTER 2: And who knows which half of the business logic is in the front end? Probably nobody... AFTER 4: And not just broken something once, but turned development into a game of whack-a-mole. Every time we deploy, some random part of the app breaks. And worse, some parts we fix break again later. In short, creating a web service version of our app could put us out of action for weeks if it goes live with serious bugs.
  8. AFTER 2: And who knows which half of the business logic is in the front end? Probably nobody... AFTER 4: And not just broken something once, but turned development into a game of whack-a-mole. Every time we deploy, some random part of the app breaks. And worse, some parts we fix break again later. In short, creating a web service version of our app could put us out of action for weeks if it goes live with serious bugs.
  9. AFTER 2: And who knows which half of the business logic is in the front end? Probably nobody... AFTER 4: And not just broken something once, but turned development into a game of whack-a-mole. Every time we deploy, some random part of the app breaks. And worse, some parts we fix break again later. In short, creating a web service version of our app could put us out of action for weeks if it goes live with serious bugs.
  10. AFTER 2: And who knows which half of the business logic is in the front end? Probably nobody... AFTER 4: And not just broken something once, but turned development into a game of whack-a-mole. Every time we deploy, some random part of the app breaks. And worse, some parts we fix break again later. In short, creating a web service version of our app could put us out of action for weeks if it goes live with serious bugs.
  11. AFTER 1: The Ruby community is probably the most test-obsessed, especially since RSpec was released. The quality of good RSpec code is far higher than most JUnit and NUnit tests I’ve seen because RSpec is a more powerful library (in part because it sits on a more powerful language). But even still, I’m fairly sure most Ruby code is poorly tested, or not tested at all. AFTER 2: Fred Brooks had neither RSpec nor JUnit, and he still automated tests. They certainly weren’t of the quality we can achieve today (now that object-oriented design theory has been embraced), but they were still valuable. AFTER 3, before 3b: Service-oriented architecture was meant to help create good software design. But the idea of single-responsibility, which is very similar, was already a good design principle before SoA. And that didn’t help before, because not all developers followed it.
  12. AFTER 1: The Ruby community is probably the most test-obsessed, especially since RSpec was released. The quality of good RSpec code is far higher than most JUnit and NUnit tests I’ve seen because RSpec is a more powerful library (in part because it sits on a more powerful language). But even still, I’m fairly sure most Ruby code is poorly tested, or not tested at all. AFTER 2: Fred Brooks had neither RSpec nor JUnit, and he still automated tests. They certainly weren’t of the quality we can achieve today (now that object-oriented design theory has been embraced), but they were still valuable. AFTER 3, before 3b: Service-oriented architecture was meant to help create good software design. But the idea of single-responsibility, which is very similar, was already a good design principle before SoA. And that didn’t help before, because not all developers followed it.
  13. AFTER 1: The Ruby community is probably the most test-obsessed, especially since RSpec was released. The quality of good RSpec code is far higher than most JUnit and NUnit tests I’ve seen because RSpec is a more powerful library (in part because it sits on a more powerful language). But even still, I’m fairly sure most Ruby code is poorly tested, or not tested at all. AFTER 2: Fred Brooks had neither RSpec nor JUnit, and he still automated tests. They certainly weren’t of the quality we can achieve today (now that object-oriented design theory has been embraced), but they were still valuable. AFTER 3, before 3b: Service-oriented architecture was meant to help create good software design. But the idea of single-responsibility, which is very similar, was already a good design principle before SoA. And that didn’t help before, because not all developers followed it.
  14. AFTER 1: The Ruby community is probably the most test-obsessed, especially since RSpec was released. The quality of good RSpec code is far higher than most JUnit and NUnit tests I’ve seen because RSpec is a more powerful library (in part because it sits on a more powerful language). But even still, I’m fairly sure most Ruby code is poorly tested, or not tested at all. AFTER 2: Fred Brooks had neither RSpec nor JUnit, and he still automated tests. They certainly weren’t of the quality we can achieve today (now that object-oriented design theory has been embraced), but they were still valuable. AFTER 3, before 3b: Service-oriented architecture was meant to help create good software design. But the idea of single-responsibility, which is very similar, was already a good design principle before SoA. And that didn’t help before, because not all developers followed it.
  15. AFTER 1: The Ruby community is probably the most test-obsessed, especially since RSpec was released. The quality of good RSpec code is far higher than most JUnit and NUnit tests I’ve seen because RSpec is a more powerful library (in part because it sits on a more powerful language). But even still, I’m fairly sure most Ruby code is poorly tested, or not tested at all. AFTER 2: Fred Brooks had neither RSpec nor JUnit, and he still automated tests. They certainly weren’t of the quality we can achieve today (now that object-oriented design theory has been embraced), but they were still valuable. AFTER 3, before 3b: Service-oriented architecture was meant to help create good software design. But the idea of single-responsibility, which is very similar, was already a good design principle before SoA. And that didn’t help before, because not all developers followed it.
  16. AFTER 1: The Ruby community is probably the most test-obsessed, especially since RSpec was released. The quality of good RSpec code is far higher than most JUnit and NUnit tests I’ve seen because RSpec is a more powerful library (in part because it sits on a more powerful language). But even still, I’m fairly sure most Ruby code is poorly tested, or not tested at all. AFTER 2: Fred Brooks had neither RSpec nor JUnit, and he still automated tests. They certainly weren’t of the quality we can achieve today (now that object-oriented design theory has been embraced), but they were still valuable. AFTER 3, before 3b: Service-oriented architecture was meant to help create good software design. But the idea of single-responsibility, which is very similar, was already a good design principle before SoA. And that didn’t help before, because not all developers followed it.
  17. AFTER 1: The Ruby community is probably the most test-obsessed, especially since RSpec was released. The quality of good RSpec code is far higher than most JUnit and NUnit tests I’ve seen because RSpec is a more powerful library (in part because it sits on a more powerful language). But even still, I’m fairly sure most Ruby code is poorly tested, or not tested at all. AFTER 2: Fred Brooks had neither RSpec nor JUnit, and he still automated tests. They certainly weren’t of the quality we can achieve today (now that object-oriented design theory has been embraced), but they were still valuable. AFTER 3, before 3b: Service-oriented architecture was meant to help create good software design. But the idea of single-responsibility, which is very similar, was already a good design principle before SoA. And that didn’t help before, because not all developers followed it.
  18. AFTER “Need unapparent?”: it might be that the code is old, or the app started out simple, and at the time nobody realised how essential it would be in the long run. AFTER “Perceived lack of time?”: maybe somebody thought that writing tests would take too long. That’s fine, because time spent fixing bugs in live code is really cheap. The decision not to pay overtime was ingenious! AFTER “Apathy?”: probably the strongest force in human nature: things are the way they are because nobody could be bothered to change them. A successful team can’t afford to be apathetic. A team that turns apathetic will stagnate. AFTER “Oh shit, it’s too late”: The previous three attitudes have dug you into a hole. AT END: I’m going to assume that we have no major technical or political obstacles to going agile. That means it’s up to our team to implement agile. Let’s look at some of the attitudes developers can have.
  19. AFTER “Need unapparent?”: it might be that the code is old, or the app started out simple, and at the time nobody realised how essential it would be in the long run. AFTER “Perceived lack of time?”: maybe somebody thought that writing tests would take too long. That’s fine, because time spent fixing bugs in live code is really cheap. The decision not to pay overtime was ingenious! AFTER “Apathy?”: probably the strongest force in human nature: things are the way they are because nobody could be bothered to change them. A successful team can’t afford to be apathetic. A team that turns apathetic will stagnate. AFTER “Oh shit, it’s too late”: The previous three attitudes have dug you into a hole. AT END: I’m going to assume that we have no major technical or political obstacles to going agile. That means it’s up to our team to implement agile. Let’s look at some of the attitudes developers can have.
  20. AFTER “Need unapparent?”: it might be that the code is old, or the app started out simple, and at the time nobody realised how essential it would be in the long run. AFTER “Perceived lack of time?”: maybe somebody thought that writing tests would take too long. That’s fine, because time spent fixing bugs in live code is really cheap. The decision not to pay overtime was ingenious! AFTER “Apathy?”: probably the strongest force in human nature: things are the way they are because nobody could be bothered to change them. A successful team can’t afford to be apathetic. A team that turns apathetic will stagnate. AFTER “Oh shit, it’s too late”: The previous three attitudes have dug you into a hole. AT END: I’m going to assume that we have no major technical or political obstacles to going agile. That means it’s up to our team to implement agile. Let’s look at some of the attitudes developers can have.
  21. AFTER “Need unapparent?”: it might be that the code is old, or the app started out simple, and at the time nobody realised how essential it would be in the long run. AFTER “Perceived lack of time?”: maybe somebody thought that writing tests would take too long. That’s fine, because time spent fixing bugs in live code is really cheap. The decision not to pay overtime was ingenious! AFTER “Apathy?”: probably the strongest force in human nature: things are the way they are because nobody could be bothered to change them. A successful team can’t afford to be apathetic. A team that turns apathetic will stagnate. AFTER “Oh shit, it’s too late”: The previous three attitudes have dug you into a hole. AT END: I’m going to assume that we have no major technical or political obstacles to going agile. That means it’s up to our team to implement agile. Let’s look at some of the attitudes developers can have.
  22. AFTER “Need unapparent?”: it might be that the code is old, or the app started out simple, and at the time nobody realised how essential it would be in the long run. AFTER “Perceived lack of time?”: maybe somebody thought that writing tests would take too long. That’s fine, because time spent fixing bugs in live code is really cheap. The decision not to pay overtime was ingenious! AFTER “Apathy?”: probably the strongest force in human nature: things are the way they are because nobody could be bothered to change them. A successful team can’t afford to be apathetic. A team that turns apathetic will stagnate. AFTER “Oh shit, it’s too late”: The previous three attitudes have dug you into a hole. AT END: I’m going to assume that we have no major technical or political obstacles to going agile. That means it’s up to our team to implement agile. Let’s look at some of the attitudes developers can have.
  23. AFTER “Need unapparent?”: it might be that the code is old, or the app started out simple, and at the time nobody realised how essential it would be in the long run. AFTER “Perceived lack of time?”: maybe somebody thought that writing tests would take too long. That’s fine, because time spent fixing bugs in live code is really cheap. The decision not to pay overtime was ingenious! AFTER “Apathy?”: probably the strongest force in human nature: things are the way they are because nobody could be bothered to change them. A successful team can’t afford to be apathetic. A team that turns apathetic will stagnate. AFTER “Oh shit, it’s too late”: The previous three attitudes have dug you into a hole. AT END: I’m going to assume that we have no major technical or political obstacles to going agile. That means it’s up to our team to implement agile. Let’s look at some of the attitudes developers can have.
  24. AFTER “Need unapparent?”: it might be that the code is old, or the app started out simple, and at the time nobody realised how essential it would be in the long run. AFTER “Perceived lack of time?”: maybe somebody thought that writing tests would take too long. That’s fine, because time spent fixing bugs in live code is really cheap. The decision not to pay overtime was ingenious! AFTER “Apathy?”: probably the strongest force in human nature: things are the way they are because nobody could be bothered to change them. A successful team can’t afford to be apathetic. A team that turns apathetic will stagnate. AFTER “Oh shit, it’s too late”: The previous three attitudes have dug you into a hole. AT END: I’m going to assume that we have no major technical or political obstacles to going agile. That means it’s up to our team to implement agile. Let’s look at some of the attitudes developers can have.
  25. AFTER “Need unapparent?”: it might be that the code is old, or the app started out simple, and at the time nobody realised how essential it would be in the long run. AFTER “Perceived lack of time?”: maybe somebody thought that writing tests would take too long. That’s fine, because time spent fixing bugs in live code is really cheap. The decision not to pay overtime was ingenious! AFTER “Apathy?”: probably the strongest force in human nature: things are the way they are because nobody could be bothered to change them. A successful team can’t afford to be apathetic. A team that turns apathetic will stagnate. AFTER “Oh shit, it’s too late”: The previous three attitudes have dug you into a hole. AT END: I’m going to assume that we have no major technical or political obstacles to going agile. That means it’s up to our team to implement agile. Let’s look at some of the attitudes developers can have.
  26. AFTER 1: Please raise your hands if your team is, or your past teams have been: • Largely enthusiastic • Largely neutral • Largely lazy AT END: IS IT REALLY THAT SIMPLE?
  27. AFTER 1: Please raise your hands if your team is, or your past teams have been: • Largely enthusiastic • Largely neutral • Largely lazy AT END: IS IT REALLY THAT SIMPLE?
  28. AFTER 1: Please raise your hands if your team is, or your past teams have been: • Largely enthusiastic • Largely neutral • Largely lazy AT END: IS IT REALLY THAT SIMPLE?
  29. AFTER 1: Please raise your hands if your team is, or your past teams have been: • Largely enthusiastic • Largely neutral • Largely lazy AT END: IS IT REALLY THAT SIMPLE?
  30. AFTER 1: Please raise your hands if your team is, or your past teams have been: • Largely enthusiastic • Largely neutral • Largely lazy AT END: IS IT REALLY THAT SIMPLE?
  31. This is a story I found on the net "Some years ago I was looking for a job and did a lot of online résumé form filling," "One of those many sites had a form that took about a second to uppercase my name when I hit Tab, before putting the focus on the next field. "That puzzled me. One second to uppercase a single-lined string?! "The javascript was something like this:
  32. This is a story I found on the net "Some years ago I was looking for a job and did a lot of online résumé form filling," "One of those many sites had a form that took about a second to uppercase my name when I hit Tab, before putting the focus on the next field. "That puzzled me. One second to uppercase a single-lined string?! "The javascript was something like this:
  33. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  34. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  35. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  36. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  37. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  38. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  39. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  40. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  41. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  42. BEFORE SHOWING CHART: On the other hand AFTER CHART: Daily WTF: If his own code isn’t bad enough, he’ll probably try to fix yours. Nerd: Good news - rewrote the slowest part of you app in a day and now you only need 5% of your server farm; Bad news - he patched it live and left the code on a USB stick, at home. N00b: Can’t fix the problems your Nerd solves in his sleep, but keeps everything running smoothly. Rockstar developer: Rebuilt your whole app last week. Comes in Monday and presses one button that runs every acceptance test, deploys to the live servers, mails the output to the client and makes everyone a brew.
  43. ALLOW A FEW SECONDS TO ABSORB THE CATEGORISATIONS AFTER CHART: Most of the practices lie in the good-discipline band, not in the high-skill band. This does NOT mean that using agile practices reduces your need for technical skill. It does NOT mean that having highly-skilled developers is not a big advantage. It DOES mean that a disciplined team of mediocre programmers has more chance of going agile than an errant bunch of über-geeks.
  44. ALLOW A FEW SECONDS TO ABSORB THE CATEGORISATIONS AFTER CHART: Most of the practices lie in the good-discipline band, not in the high-skill band. This does NOT mean that using agile practices reduces your need for technical skill. It does NOT mean that having highly-skilled developers is not a big advantage. It DOES mean that a disciplined team of mediocre programmers has more chance of going agile than an errant bunch of über-geeks.
  45. ALLOW A FEW SECONDS TO ABSORB THE CATEGORISATIONS AFTER CHART: Most of the practices lie in the good-discipline band, not in the high-skill band. This does NOT mean that using agile practices reduces your need for technical skill. It does NOT mean that having highly-skilled developers is not a big advantage. It DOES mean that a disciplined team of mediocre programmers has more chance of going agile than an errant bunch of über-geeks.
  46. ALLOW A FEW SECONDS TO ABSORB THE CATEGORISATIONS AFTER CHART: Most of the practices lie in the good-discipline band, not in the high-skill band. This does NOT mean that using agile practices reduces your need for technical skill. It does NOT mean that having highly-skilled developers is not a big advantage. It DOES mean that a disciplined team of mediocre programmers has more chance of going agile than an errant bunch of über-geeks.