SlideShare a Scribd company logo
1 of 2
Download to read offline
A
BUG IS NO MORE AND NO LESS THAN A SOFTWARE
defect. However, the less harsh and less direct
name “bug” masks the nature of the beast and helps
toeasetheconscienceofprogrammersandtheorgan-
isations around them. The term also helps plays
down the frustrations of software users, to the point
that defects have become accepted as a normal and
reasonable state of affairs. The word has left its jar-
gon origins and joined mainstream English.
OK, so now we know what a bug is, what is it
worth? In practice, a bug has negative value: it uses
up good will; it costs money and time to discover it
and uncover its modus operandi; it takes time and
concentration away from whatever else we were
doing.
However, in principle, a bug also offers us a learn-
ing experience. There is the potential for some-
thing positive to come from it: we learn about a
particular usage or situation we had previously
overlooked; we learn more about a requirement
that was poorly articulated or tacitly assumed; we
learn that a piece of code we assumed to be cor-
rect was subtly problematic or obviously wrong –
deeply and systemically or because of a simple
thinko or typo – and we learn how to fix it. We also
learn that there might be an opportunity for us to
change our habits and choice of practices to reduce
the likelihood of such defects occurring again in
future.
With the exception of the last learning point, all
of these are the direct and
immediate lessons we take
from bug reports. They are
fairly local in their effect
and often we look no fur-
ther. But the last point is the
meta-lesson that could real-
ly add the most value. A
development model that
emphasises debugging after
the fact over practices that
reduce enbugging in the first
place has its priorities back to
front and represents a failure
of learning.
Learning to develop software
The idea of learning having a central position in
software development is more than a metaphor: it
identifies one dominant aspect of the software
development process. Pundits are often happy to
brand software developers as knowledge workers.
One image this inspires is of knowledge as some
kind of artefact or workpiece with the software
developer as the artisan standing over it, crafting
it with all manner of knowledge lathes and con-
ceptual hammers. However, knowledge is not phys-
ical enough to support such a metaphor. It cannot
simply be shipped and shaped as iron or wood.
The acquisition and presentation of knowledge
is all part of the established topic of learning.
Learning involves accumulation, consolidation,
exploration, articulation and feedback, all of which
can be seen in effective software development
processes. The emphasis on an iterative and incre-
mental approach is something that distinguishes
agile development processes from more bureau-
cratic and master-planned processes. A cyclic and
cumulative approach reflects a learning process.
When “learning” is normally mentioned in the
context of software development, it is assumed to
refer to development skills. This is the gap filled and
fulfilled by books, training courses and so on. But
more generally learning and the expression of the
knowledge acquired defines the axis along which
software development runs: what we learn is
embodied and revealed in the code behind the
software 1
.
For example, there is learning about the domain
in which a piece of software runs or is to run, and
the specific needs that define the scope and purpose
of the software and any changes to it. This respon-
sibility is not only restricted to someone with the
title “analyst”; it applies to all those who are
involved in formulating the software, including
the party for whom the software is intended. A
common criticism of software customers is that
they do not know what they want even though they
know they want it; it is easier to reason about this
perception from the perspective of learning. Unless
there is a process that encourages learning on all
sides, how else is the knowledge
going to emerge clearly? Mir-
acles and master plans?
Feedback obviously plays a
significant role in all this, and
shortening long feedback
loops is one of the optimisa-
tions that can make any
approach more effective.
Design education
Software development is a
design-based activity. Some
people assume that design
means “drawings and docu-
ments about the software, but
PROGRAMMERS’WORKSHOP
48 WWW.APPDEVADVISOR.CO.UK
KEVLIN
HENNEY
Software development can be more of an education
than you might first think. Kevlin Henney studies
what there is to learn
Learning curve
not the software”. However, this is not a particularly useful or
accurate reflection of what design-based professions do. Design
is about the creation and expression of structure, physical or
virtual, which fulfils a number of goals and satisfies a number
of constraints. It is a creative and intentional act with many
modes of expression and levels of detail.
Goals and constraints can be decomposed recursively from
the highest-level of granularity into finer levels of detail. Require-
ments exist at the application level with respect to its users,
but requirements also exist locally in the way that one method
uses another 2
. However, there is no simple sausage machine that
successfully turns a handful of use cases captured in natural lan-
guage into an effective running system. Design is involved in
everything from framing the requirements to demonstrating the
effectiveness of a running system.
Design embraces all the kinds of expression of structure
from whiteboard sketches in ad hoc UML to lines of code in
Java. This means that the view of code as no more than an
implementation detail – and therefore one that is not a prop-
er concern or activity of design – is one of those unhelpful
myths that has dogged software development for too long,
and yet fails to stand up to close scrutiny.
Code is a formal notation used to express structure and exe-
cution in a virtual world – very little code, even that written in
something as metal hugging as assembler, can claim to be
describing structures and execution in a strictly physical world.
Code creates and inhabits a designed domain 3
. A significant
number of decisions that affect the final software are made at
the keyboard in a code editor. This is not necessarily always a
good thing, but it is necessarily inevitable. Any sustainably
realistic view of development needs to do more than just
acknowledge this inevitability; it needs to take advantage of it.
To understand the inevitability, consider detail: all design
activities are in some way based on abstraction, but not all
are or aim to be complete. A package diagram sketched out on
a whiteboard may be accurate, but it does not offer a com-
plete view of what has been or is to be developed – if it did, it
would be unreadable and useless, defeating the very purpose
of using such a sketch. By contrast, the definition of a wire-level
protocol needs to be both accurate and precise for it to be of use
– a sentence such as “...and the bits ought to be laid out in
some order or other” is unlikely to be of much use. Code, in its
many forms, is still abstract, but it demands a high level of
both precision and accuracy. There is no cheating on the com-
pleteness of the detail needed – the variation across various pro-
gramming languages and infrastructures is with respect to
the amount of detail needed, not its completeness.
Of course, this is not to say that all designers are – or should
be – equally good at all kinds of design. Such a statement
would not be well supported by the facts. However, it does
indicate that design is a very broad church that cuts across
many different concepts and practices; successful design
involves playing on and bridging these differences to best
effect.
Shaker loops
Successful design is inevitably incremental, although some
steps might be larger than others. It inevitably involves accept-
ance of change, and therefore renewal and removal, rather
than the obstruction of change. Of course, just to be clear,
acceptance of change is not the same as an absence of stabil-
ity. And, to take us back to where we started, successful design
does not rely on software defects as its primary source of feed-
back.
Design is both a feedforward and a feedback process, which
makes it a dialogue: between people; between people and the
design; between people and the results of the design. This is
where learning fits in. So there is a need to shorten long feed-
back loops, but there is also a need to increase signal to noise
ratio by reducing interference – continuous unregulated feed-
back is noisy rather than helpful.
Active testing
To take an example people often associate with the issue of bugs,
consider the role of testing in software development. Is testing,
as is often articulated, concerned only with the discovery of
defects in software as built? Is testing, as is sometimes assumed,
the sole preserve of a testing department and individuals with
“tester” in their job title? Is testing, as expressed in many tra-
ditional development processes, something that necessarily
falls in the closing phases of the lifecycle after all the “devel-
opment” has been done?
If testing is divorced from other activities in software devel-
opment and placed towards the end of the development life-
cycle, carried out only by individuals who were not involved in
the design of the system, its main contribution to the software
is pretty much limited to one thing: defect reports. This is cer-
tainly better than nothing (and also better than many compa-
nies manage) but it represents a wasted opportunity for learning
and a poor distribution of responsibilities, schedule and money.
In such lifecycles, testing is consigned to play a passive rather
than active role, a role that cannot influence the framing of
requirements, the design decisions, the coding guidelines or the
team and its individuals until after the fact. If there is any
genuine learning, it will typically be localised and lost or, at best,
deferred to the next project.
As I said, a wasted opportunity. It is generally considered
wiser to close the stable door before the horses bolt. Testing
offers a form of empirical feedback that can be used to drive
design, clarifying requirements and providing a health check
for code. Running testing along the main axis of software
development and across more than one development role
shakes up the pipeline model of traditional development
processes. It closes many of the open feedback loops and
shortens many of the others, while at the same time ensuring
that the signal is stronger than the noise. Instead of treating
testing as a critical passenger, shoved into the backseat, it
becomes an informative driver. Testing ceases merely to be a
synonym for bug hunting and becomes a proactive form of
learning. s
References
1. Kevlin Henney, “Code versus Software”, artima.com,
August 2004, www.artima.com/weblogs/viewpost.jsp?
thread=67178
2. Kevlin Henney, “Inside Requirements”, Application
Development Advisor, May 2003.
3. Michael Jackson, Problem Frames, Addison-Wesley,
2001.
Kevlin Henney is an independent software development con-
sultant and trainer. He can be reached at www.curbralan.com
PROGRAMMERS’WORKSHOP
MARCH-APRIL 2005 49

More Related Content

What's hot

Responsibility Driven Design
Responsibility Driven DesignResponsibility Driven Design
Responsibility Driven DesignHarsh Jegadeesan
 
How I Learned To Apply Design Patterns
How I Learned To Apply Design PatternsHow I Learned To Apply Design Patterns
How I Learned To Apply Design PatternsAndy Maleh
 
Systematic error management - we ported rudder to zio
Systematic error management - we ported rudder to zioSystematic error management - we ported rudder to zio
Systematic error management - we ported rudder to ziofanf42
 
Refactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialRefactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialTushar Sharma
 
Design patterns through refactoring
Design patterns through refactoringDesign patterns through refactoring
Design patterns through refactoringGanesh Samarthyam
 
How To Navigate And Extend The Flex Infrastructure
How To Navigate And Extend The Flex InfrastructureHow To Navigate And Extend The Flex Infrastructure
How To Navigate And Extend The Flex Infrastructuremichael.labriola
 
Tdd and-design-draft
Tdd and-design-draftTdd and-design-draft
Tdd and-design-draftPrabudhGupta1
 
Another Tale of Two Patterns
Another Tale of Two PatternsAnother Tale of Two Patterns
Another Tale of Two PatternsKevlin Henney
 
Comparing the Effectiveness of Reasoning Formalisms for Partial Models
Comparing the Effectiveness of Reasoning Formalisms for Partial Models Comparing the Effectiveness of Reasoning Formalisms for Partial Models
Comparing the Effectiveness of Reasoning Formalisms for Partial Models Michalis Famelis
 

What's hot (20)

Exceptional Naming
Exceptional NamingExceptional Naming
Exceptional Naming
 
What's in a Name?
What's in a Name?What's in a Name?
What's in a Name?
 
09 grasp
09 grasp09 grasp
09 grasp
 
Responsibility Driven Design
Responsibility Driven DesignResponsibility Driven Design
Responsibility Driven Design
 
Final grasp ASE
Final grasp ASEFinal grasp ASE
Final grasp ASE
 
How I Learned To Apply Design Patterns
How I Learned To Apply Design PatternsHow I Learned To Apply Design Patterns
How I Learned To Apply Design Patterns
 
Systematic error management - we ported rudder to zio
Systematic error management - we ported rudder to zioSystematic error management - we ported rudder to zio
Systematic error management - we ported rudder to zio
 
Presentation
PresentationPresentation
Presentation
 
Refactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialRefactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 Tutorial
 
Put to the Test
Put to the TestPut to the Test
Put to the Test
 
Design patterns through refactoring
Design patterns through refactoringDesign patterns through refactoring
Design patterns through refactoring
 
Grasp
GraspGrasp
Grasp
 
How To Navigate And Extend The Flex Infrastructure
How To Navigate And Extend The Flex InfrastructureHow To Navigate And Extend The Flex Infrastructure
How To Navigate And Extend The Flex Infrastructure
 
Ian Cooper webinar for DDD Iran: Kent beck style tdd seven years after
Ian Cooper webinar for DDD Iran: Kent beck style tdd   seven years afterIan Cooper webinar for DDD Iran: Kent beck style tdd   seven years after
Ian Cooper webinar for DDD Iran: Kent beck style tdd seven years after
 
Thoughtful Software Design
Thoughtful Software DesignThoughtful Software Design
Thoughtful Software Design
 
Clean code-v2.2
Clean code-v2.2Clean code-v2.2
Clean code-v2.2
 
Tdd and-design-draft
Tdd and-design-draftTdd and-design-draft
Tdd and-design-draft
 
Another Tale of Two Patterns
Another Tale of Two PatternsAnother Tale of Two Patterns
Another Tale of Two Patterns
 
Comparing the Effectiveness of Reasoning Formalisms for Partial Models
Comparing the Effectiveness of Reasoning Formalisms for Partial Models Comparing the Effectiveness of Reasoning Formalisms for Partial Models
Comparing the Effectiveness of Reasoning Formalisms for Partial Models
 
Lecture 18
Lecture 18Lecture 18
Lecture 18
 

Viewers also liked

Collections for States
Collections for StatesCollections for States
Collections for StatesKevlin Henney
 
Worse Is Better, for Better or for Worse
Worse Is Better, for Better or for WorseWorse Is Better, for Better or for Worse
Worse Is Better, for Better or for WorseKevlin Henney
 
Stringing Things Along
Stringing Things AlongStringing Things Along
Stringing Things AlongKevlin Henney
 
Promoting Polymorphism
Promoting PolymorphismPromoting Polymorphism
Promoting PolymorphismKevlin Henney
 
Making Steaks from Sacred Cows
Making Steaks from Sacred CowsMaking Steaks from Sacred Cows
Making Steaks from Sacred CowsKevlin Henney
 
The Next Best String
The Next Best StringThe Next Best String
The Next Best StringKevlin Henney
 

Viewers also liked (13)

Objects of Value
Objects of ValueObjects of Value
Objects of Value
 
Collections for States
Collections for StatesCollections for States
Collections for States
 
The Perfect Couple
The Perfect CoupleThe Perfect Couple
The Perfect Couple
 
Worse Is Better, for Better or for Worse
Worse Is Better, for Better or for WorseWorse Is Better, for Better or for Worse
Worse Is Better, for Better or for Worse
 
One Careful Owner
One Careful OwnerOne Careful Owner
One Careful Owner
 
Stringing Things Along
Stringing Things AlongStringing Things Along
Stringing Things Along
 
Promoting Polymorphism
Promoting PolymorphismPromoting Polymorphism
Promoting Polymorphism
 
Substitutability
SubstitutabilitySubstitutability
Substitutability
 
Bound and Checked
Bound and CheckedBound and Checked
Bound and Checked
 
Making Steaks from Sacred Cows
Making Steaks from Sacred CowsMaking Steaks from Sacred Cows
Making Steaks from Sacred Cows
 
Flag Waiving
Flag WaivingFlag Waiving
Flag Waiving
 
The Next Best String
The Next Best StringThe Next Best String
The Next Best String
 
The Programmer
The ProgrammerThe Programmer
The Programmer
 

Similar to Learning Curve

Software engineering
Software engineeringSoftware engineering
Software engineeringsweetysweety8
 
214214Michael FaganPresident, Michael Fagan Associates.docx
214214Michael FaganPresident, Michael Fagan Associates.docx214214Michael FaganPresident, Michael Fagan Associates.docx
214214Michael FaganPresident, Michael Fagan Associates.docxeugeniadean34240
 
The Ultimate DevOps Playbook
The Ultimate DevOps PlaybookThe Ultimate DevOps Playbook
The Ultimate DevOps PlaybookJalpesh Patel
 
The Ultimate DevOps Playbook
The Ultimate DevOps PlaybookThe Ultimate DevOps Playbook
The Ultimate DevOps PlaybookEggplant
 
Adaptive software development (asd) a minimalist approach to complex software...
Adaptive software development (asd) a minimalist approach to complex software...Adaptive software development (asd) a minimalist approach to complex software...
Adaptive software development (asd) a minimalist approach to complex software...Katy Slemon
 
Software Engineering in a Quick and Easy way - v1.pdf
Software Engineering in a Quick and Easy way - v1.pdfSoftware Engineering in a Quick and Easy way - v1.pdf
Software Engineering in a Quick and Easy way - v1.pdfKAJAL MANDAL
 
Site-Reliability-Engineering-v2[6241].pdf
Site-Reliability-Engineering-v2[6241].pdfSite-Reliability-Engineering-v2[6241].pdf
Site-Reliability-Engineering-v2[6241].pdfDeepakGupta747774
 
CTLR 2010 Issue 7 Waterfall Contract
CTLR 2010 Issue 7 Waterfall ContractCTLR 2010 Issue 7 Waterfall Contract
CTLR 2010 Issue 7 Waterfall Contractsusanatkinson
 
Interaction Room - Creating Space for Developments (Software Projects)
Interaction Room - Creating Space for Developments (Software Projects)Interaction Room - Creating Space for Developments (Software Projects)
Interaction Room - Creating Space for Developments (Software Projects)adesso Turkey
 
Scrum an extension pattern language for hyperproductive software development
Scrum an extension pattern language  for hyperproductive software developmentScrum an extension pattern language  for hyperproductive software development
Scrum an extension pattern language for hyperproductive software developmentShiraz316
 
Test-Driven Developments are Inefficient; Behavior-Driven Developments are a ...
Test-Driven Developments are Inefficient; Behavior-Driven Developments are a ...Test-Driven Developments are Inefficient; Behavior-Driven Developments are a ...
Test-Driven Developments are Inefficient; Behavior-Driven Developments are a ...Abdelkrim Boujraf
 
SAD07 - Project Management
SAD07 - Project ManagementSAD07 - Project Management
SAD07 - Project ManagementMichael Heron
 
Aspects of the sustainability of software
Aspects of the sustainability of softwareAspects of the sustainability of software
Aspects of the sustainability of softwarePaul Walk
 
Software design.edited (1)
Software design.edited (1)Software design.edited (1)
Software design.edited (1)FarjanaAhmed3
 
Software risk management
Software risk managementSoftware risk management
Software risk managementJose Javier M
 
2107010-SE-Prototyping Model.pptx
2107010-SE-Prototyping Model.pptx2107010-SE-Prototyping Model.pptx
2107010-SE-Prototyping Model.pptxDevangGentyal
 

Similar to Learning Curve (20)

Software engineering
Software engineeringSoftware engineering
Software engineering
 
214214Michael FaganPresident, Michael Fagan Associates.docx
214214Michael FaganPresident, Michael Fagan Associates.docx214214Michael FaganPresident, Michael Fagan Associates.docx
214214Michael FaganPresident, Michael Fagan Associates.docx
 
The Ultimate DevOps Playbook
The Ultimate DevOps PlaybookThe Ultimate DevOps Playbook
The Ultimate DevOps Playbook
 
The Ultimate DevOps Playbook
The Ultimate DevOps PlaybookThe Ultimate DevOps Playbook
The Ultimate DevOps Playbook
 
Software developer
Software developerSoftware developer
Software developer
 
Adaptive software development (asd) a minimalist approach to complex software...
Adaptive software development (asd) a minimalist approach to complex software...Adaptive software development (asd) a minimalist approach to complex software...
Adaptive software development (asd) a minimalist approach to complex software...
 
Software Engineering in a Quick and Easy way - v1.pdf
Software Engineering in a Quick and Easy way - v1.pdfSoftware Engineering in a Quick and Easy way - v1.pdf
Software Engineering in a Quick and Easy way - v1.pdf
 
Site-Reliability-Engineering-v2[6241].pdf
Site-Reliability-Engineering-v2[6241].pdfSite-Reliability-Engineering-v2[6241].pdf
Site-Reliability-Engineering-v2[6241].pdf
 
7 Myths of Agile Development
7 Myths of Agile Development7 Myths of Agile Development
7 Myths of Agile Development
 
CTLR 2010 Issue 7 Waterfall Contract
CTLR 2010 Issue 7 Waterfall ContractCTLR 2010 Issue 7 Waterfall Contract
CTLR 2010 Issue 7 Waterfall Contract
 
Interaction Room - Creating Space for Developments (Software Projects)
Interaction Room - Creating Space for Developments (Software Projects)Interaction Room - Creating Space for Developments (Software Projects)
Interaction Room - Creating Space for Developments (Software Projects)
 
Agile Methodologies & Key Principles
Agile Methodologies & Key Principles Agile Methodologies & Key Principles
Agile Methodologies & Key Principles
 
Scrum an extension pattern language for hyperproductive software development
Scrum an extension pattern language  for hyperproductive software developmentScrum an extension pattern language  for hyperproductive software development
Scrum an extension pattern language for hyperproductive software development
 
Test-Driven Developments are Inefficient; Behavior-Driven Developments are a ...
Test-Driven Developments are Inefficient; Behavior-Driven Developments are a ...Test-Driven Developments are Inefficient; Behavior-Driven Developments are a ...
Test-Driven Developments are Inefficient; Behavior-Driven Developments are a ...
 
SAD07 - Project Management
SAD07 - Project ManagementSAD07 - Project Management
SAD07 - Project Management
 
Aspects of the sustainability of software
Aspects of the sustainability of softwareAspects of the sustainability of software
Aspects of the sustainability of software
 
Software design.edited (1)
Software design.edited (1)Software design.edited (1)
Software design.edited (1)
 
Lecture1422914635
Lecture1422914635Lecture1422914635
Lecture1422914635
 
Software risk management
Software risk managementSoftware risk management
Software risk management
 
2107010-SE-Prototyping Model.pptx
2107010-SE-Prototyping Model.pptx2107010-SE-Prototyping Model.pptx
2107010-SE-Prototyping Model.pptx
 

More from Kevlin Henney

The Case for Technical Excellence
The Case for Technical ExcellenceThe Case for Technical Excellence
The Case for Technical ExcellenceKevlin Henney
 
Empirical Development
Empirical DevelopmentEmpirical Development
Empirical DevelopmentKevlin Henney
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that LetterKevlin Henney
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that LetterKevlin Henney
 
Solid Deconstruction
Solid DeconstructionSolid Deconstruction
Solid DeconstructionKevlin Henney
 
Procedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayProcedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayKevlin Henney
 
Structure and Interpretation of Test Cases
Structure and Interpretation of Test CasesStructure and Interpretation of Test Cases
Structure and Interpretation of Test CasesKevlin Henney
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to ImmutabilityKevlin Henney
 
Turning Development Outside-In
Turning Development Outside-InTurning Development Outside-In
Turning Development Outside-InKevlin Henney
 
Giving Code a Good Name
Giving Code a Good NameGiving Code a Good Name
Giving Code a Good NameKevlin Henney
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Kevlin Henney
 
Thinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation QuadrantThinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation QuadrantKevlin Henney
 

More from Kevlin Henney (20)

Program with GUTs
Program with GUTsProgram with GUTs
Program with GUTs
 
The Case for Technical Excellence
The Case for Technical ExcellenceThe Case for Technical Excellence
The Case for Technical Excellence
 
Empirical Development
Empirical DevelopmentEmpirical Development
Empirical Development
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that Letter
 
Lambda? You Keep Using that Letter
Lambda? You Keep Using that LetterLambda? You Keep Using that Letter
Lambda? You Keep Using that Letter
 
Solid Deconstruction
Solid DeconstructionSolid Deconstruction
Solid Deconstruction
 
Get Kata
Get KataGet Kata
Get Kata
 
Procedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went AwayProcedural Programming: It’s Back? It Never Went Away
Procedural Programming: It’s Back? It Never Went Away
 
Structure and Interpretation of Test Cases
Structure and Interpretation of Test CasesStructure and Interpretation of Test Cases
Structure and Interpretation of Test Cases
 
Agility ≠ Speed
Agility ≠ SpeedAgility ≠ Speed
Agility ≠ Speed
 
Refactoring to Immutability
Refactoring to ImmutabilityRefactoring to Immutability
Refactoring to Immutability
 
Old Is the New New
Old Is the New NewOld Is the New New
Old Is the New New
 
Turning Development Outside-In
Turning Development Outside-InTurning Development Outside-In
Turning Development Outside-In
 
Giving Code a Good Name
Giving Code a Good NameGiving Code a Good Name
Giving Code a Good Name
 
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...
 
Thinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation QuadrantThinking Outside the Synchronisation Quadrant
Thinking Outside the Synchronisation Quadrant
 
Code as Risk
Code as RiskCode as Risk
Code as Risk
 
Software Is Details
Software Is DetailsSoftware Is Details
Software Is Details
 
Game of Sprints
Game of SprintsGame of Sprints
Game of Sprints
 
Good Code
Good CodeGood Code
Good Code
 

Recently uploaded

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 

Recently uploaded (20)

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 

Learning Curve

  • 1. A BUG IS NO MORE AND NO LESS THAN A SOFTWARE defect. However, the less harsh and less direct name “bug” masks the nature of the beast and helps toeasetheconscienceofprogrammersandtheorgan- isations around them. The term also helps plays down the frustrations of software users, to the point that defects have become accepted as a normal and reasonable state of affairs. The word has left its jar- gon origins and joined mainstream English. OK, so now we know what a bug is, what is it worth? In practice, a bug has negative value: it uses up good will; it costs money and time to discover it and uncover its modus operandi; it takes time and concentration away from whatever else we were doing. However, in principle, a bug also offers us a learn- ing experience. There is the potential for some- thing positive to come from it: we learn about a particular usage or situation we had previously overlooked; we learn more about a requirement that was poorly articulated or tacitly assumed; we learn that a piece of code we assumed to be cor- rect was subtly problematic or obviously wrong – deeply and systemically or because of a simple thinko or typo – and we learn how to fix it. We also learn that there might be an opportunity for us to change our habits and choice of practices to reduce the likelihood of such defects occurring again in future. With the exception of the last learning point, all of these are the direct and immediate lessons we take from bug reports. They are fairly local in their effect and often we look no fur- ther. But the last point is the meta-lesson that could real- ly add the most value. A development model that emphasises debugging after the fact over practices that reduce enbugging in the first place has its priorities back to front and represents a failure of learning. Learning to develop software The idea of learning having a central position in software development is more than a metaphor: it identifies one dominant aspect of the software development process. Pundits are often happy to brand software developers as knowledge workers. One image this inspires is of knowledge as some kind of artefact or workpiece with the software developer as the artisan standing over it, crafting it with all manner of knowledge lathes and con- ceptual hammers. However, knowledge is not phys- ical enough to support such a metaphor. It cannot simply be shipped and shaped as iron or wood. The acquisition and presentation of knowledge is all part of the established topic of learning. Learning involves accumulation, consolidation, exploration, articulation and feedback, all of which can be seen in effective software development processes. The emphasis on an iterative and incre- mental approach is something that distinguishes agile development processes from more bureau- cratic and master-planned processes. A cyclic and cumulative approach reflects a learning process. When “learning” is normally mentioned in the context of software development, it is assumed to refer to development skills. This is the gap filled and fulfilled by books, training courses and so on. But more generally learning and the expression of the knowledge acquired defines the axis along which software development runs: what we learn is embodied and revealed in the code behind the software 1 . For example, there is learning about the domain in which a piece of software runs or is to run, and the specific needs that define the scope and purpose of the software and any changes to it. This respon- sibility is not only restricted to someone with the title “analyst”; it applies to all those who are involved in formulating the software, including the party for whom the software is intended. A common criticism of software customers is that they do not know what they want even though they know they want it; it is easier to reason about this perception from the perspective of learning. Unless there is a process that encourages learning on all sides, how else is the knowledge going to emerge clearly? Mir- acles and master plans? Feedback obviously plays a significant role in all this, and shortening long feedback loops is one of the optimisa- tions that can make any approach more effective. Design education Software development is a design-based activity. Some people assume that design means “drawings and docu- ments about the software, but PROGRAMMERS’WORKSHOP 48 WWW.APPDEVADVISOR.CO.UK KEVLIN HENNEY Software development can be more of an education than you might first think. Kevlin Henney studies what there is to learn Learning curve
  • 2. not the software”. However, this is not a particularly useful or accurate reflection of what design-based professions do. Design is about the creation and expression of structure, physical or virtual, which fulfils a number of goals and satisfies a number of constraints. It is a creative and intentional act with many modes of expression and levels of detail. Goals and constraints can be decomposed recursively from the highest-level of granularity into finer levels of detail. Require- ments exist at the application level with respect to its users, but requirements also exist locally in the way that one method uses another 2 . However, there is no simple sausage machine that successfully turns a handful of use cases captured in natural lan- guage into an effective running system. Design is involved in everything from framing the requirements to demonstrating the effectiveness of a running system. Design embraces all the kinds of expression of structure from whiteboard sketches in ad hoc UML to lines of code in Java. This means that the view of code as no more than an implementation detail – and therefore one that is not a prop- er concern or activity of design – is one of those unhelpful myths that has dogged software development for too long, and yet fails to stand up to close scrutiny. Code is a formal notation used to express structure and exe- cution in a virtual world – very little code, even that written in something as metal hugging as assembler, can claim to be describing structures and execution in a strictly physical world. Code creates and inhabits a designed domain 3 . A significant number of decisions that affect the final software are made at the keyboard in a code editor. This is not necessarily always a good thing, but it is necessarily inevitable. Any sustainably realistic view of development needs to do more than just acknowledge this inevitability; it needs to take advantage of it. To understand the inevitability, consider detail: all design activities are in some way based on abstraction, but not all are or aim to be complete. A package diagram sketched out on a whiteboard may be accurate, but it does not offer a com- plete view of what has been or is to be developed – if it did, it would be unreadable and useless, defeating the very purpose of using such a sketch. By contrast, the definition of a wire-level protocol needs to be both accurate and precise for it to be of use – a sentence such as “...and the bits ought to be laid out in some order or other” is unlikely to be of much use. Code, in its many forms, is still abstract, but it demands a high level of both precision and accuracy. There is no cheating on the com- pleteness of the detail needed – the variation across various pro- gramming languages and infrastructures is with respect to the amount of detail needed, not its completeness. Of course, this is not to say that all designers are – or should be – equally good at all kinds of design. Such a statement would not be well supported by the facts. However, it does indicate that design is a very broad church that cuts across many different concepts and practices; successful design involves playing on and bridging these differences to best effect. Shaker loops Successful design is inevitably incremental, although some steps might be larger than others. It inevitably involves accept- ance of change, and therefore renewal and removal, rather than the obstruction of change. Of course, just to be clear, acceptance of change is not the same as an absence of stabil- ity. And, to take us back to where we started, successful design does not rely on software defects as its primary source of feed- back. Design is both a feedforward and a feedback process, which makes it a dialogue: between people; between people and the design; between people and the results of the design. This is where learning fits in. So there is a need to shorten long feed- back loops, but there is also a need to increase signal to noise ratio by reducing interference – continuous unregulated feed- back is noisy rather than helpful. Active testing To take an example people often associate with the issue of bugs, consider the role of testing in software development. Is testing, as is often articulated, concerned only with the discovery of defects in software as built? Is testing, as is sometimes assumed, the sole preserve of a testing department and individuals with “tester” in their job title? Is testing, as expressed in many tra- ditional development processes, something that necessarily falls in the closing phases of the lifecycle after all the “devel- opment” has been done? If testing is divorced from other activities in software devel- opment and placed towards the end of the development life- cycle, carried out only by individuals who were not involved in the design of the system, its main contribution to the software is pretty much limited to one thing: defect reports. This is cer- tainly better than nothing (and also better than many compa- nies manage) but it represents a wasted opportunity for learning and a poor distribution of responsibilities, schedule and money. In such lifecycles, testing is consigned to play a passive rather than active role, a role that cannot influence the framing of requirements, the design decisions, the coding guidelines or the team and its individuals until after the fact. If there is any genuine learning, it will typically be localised and lost or, at best, deferred to the next project. As I said, a wasted opportunity. It is generally considered wiser to close the stable door before the horses bolt. Testing offers a form of empirical feedback that can be used to drive design, clarifying requirements and providing a health check for code. Running testing along the main axis of software development and across more than one development role shakes up the pipeline model of traditional development processes. It closes many of the open feedback loops and shortens many of the others, while at the same time ensuring that the signal is stronger than the noise. Instead of treating testing as a critical passenger, shoved into the backseat, it becomes an informative driver. Testing ceases merely to be a synonym for bug hunting and becomes a proactive form of learning. s References 1. Kevlin Henney, “Code versus Software”, artima.com, August 2004, www.artima.com/weblogs/viewpost.jsp? thread=67178 2. Kevlin Henney, “Inside Requirements”, Application Development Advisor, May 2003. 3. Michael Jackson, Problem Frames, Addison-Wesley, 2001. Kevlin Henney is an independent software development con- sultant and trainer. He can be reached at www.curbralan.com PROGRAMMERS’WORKSHOP MARCH-APRIL 2005 49