SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
Worse Is Better,
for Better or for Worse

@KevlinHenney
There are a thousand thoughts lying within a man that
he does not know till he takes up the pen to write.
William Thackeray

I am irritated by my own writing. I am like a violinist
whose ear is true, but whose fingers refuse to reproduce
precisely the sound he hears within.
Gustave Flaubert

When I write, I feel like an armless, legless man with a
crayon in his mouth.
Kurt Vonnegut
Stop Overpromising and Overshooting
We want to do everything all at once. Grand plans!
Sweeping gestures! Epic 23-book  fantasy  cycles!  Don’t  
overreach. Concentrate on what you can complete.
Temper risk with reality.
Chuck Wendig
"25 Things Writers Should Stop Doing"
http://terribleminds.com/ramble/2012/01/03/25-things-writers-should-stop-doing/
In 1990 I proposed a theory, called
Worse Is Better, of why software would
be more likely to succeed if it was
developed with minimal invention.
It is far better to have an underfeatured
product that is rock solid, fast, and
small than one that covers what an
expert would consider the complete
requirements.
The following is a characterization of the
contrasting [the right thing] design philosophy:


Simplicity: The design is simple [...].
Simplicity of implementation is irrelevant.



Completeness: The design covers as many
important situations as possible. All
reasonably expected cases must be covered.



Correctness: The design is correct in all
observable aspects.



Consistency: The design is thoroughly
consistent. A design is allowed to be slightly
less simple and less complete in order to
avoid inconsistency. Consistency is as
important as correctness.
Here are the characteristics of a worse-is-better
software design:


Simplicity: The design is simple in
implementation. The interface should be
simple, but anything adequate will do.



Completeness: The design covers only
necessary situations. Completeness can be
sacrificed in favor of any other quality.



Correctness: The design is correct in all
observable aspects.



Consistency: The design is consistent as far
as it goes. Consistency is less of a problem
because you always choose the smallest
scope for the first implementation.
Implementation characteristics are foremost:


The implementation should be fast.



It should be small.



It should interoperate with the programs
and tools that the expected users are
already using.



It should be bug-free, and if that requires
implementing fewer features, do it.



It should use parsimonious abstractions as
long as they don’t get in the way.
#!/usr/bin/perl
# -------------------------------------------------------# PerlInterpreter must be the first line of the file.
#
# Copyright (c) 1995, Cunningham & Cunningham, Inc.
#
# This program has been generated by the HyperPerl
# generator. The source hypertext can be found
# at http://c2.com/cgi/wikibase. This program belongs
# to Cunningham & Cunningham, Inc., is to be used
# only by agreement with the owner, and then only
# with the understanding that the owner cannot be
# responsible for any behaviour of the program or
# any damages that it may cause.
# --------------------------------------------------------

PerlInterpreter

InitialComments

# InitialComments
print "Content-type: text/htmlnn";
$DBM = "/usr/ward/$ScriptName";
dbmopen(%db, $DBM , 0666) | &AbortScript("can't open $DBM");
$CookedInput{browse} && &HandleBrowse;
$CookedInput{edit}
&& &HandleEdit;
$CookedInput{copy}
&& &HandleEdit;
$CookedInput{links} && &HandleLinks;
$CookedInput{search} && &HandleSearch;
dbmclose (%db);
if ($ENV{REQUEST_METHOD} eq POST) {
$CookedInput{post}
&& &HandlePost;
}
# &DumpBinding(*CookedInput);
# &DumpBinding(*old);
# &DumpBinding(*ENV);
# -------------------------------------------------------- WikiInHyperPerl
I always have it in the back of my head that
I want to make a slightly better C.
But getting everything to fit, top to bottom,
syntax, semantics, tooling, etc., might not
be possible or even worth the effort.
As it stands today, C is unreasonably
effective, and I don't see that changing any
time soon.
Damien Katz
http://damienkatz.net/2013/01/the_unreasonable_effectiveness_of_c.html
There are only two kinds of
languages: the ones people
complain about and the ones
nobody uses.

Bjarne Stroustrup
OOP to me means only messaging,
local retention and protection and
hiding of state-process, and extreme
late-binding of all things.
It can be done in Smalltalk and in
LISP. There are possibly other systems
in which this is possible, but I'm not
aware of them.
Alan Kay
In a purist view of object-oriented
methodology, dynamic dispatch is the only
mechanism for taking advantage of attributes
that have been forgotten by subsumption.

This position is often taken on abstraction
grounds: no knowledge should be obtainable
about objects except by invoking their
methods.
In the purist approach, subsumption provides
a simple and effective mechanism for hiding
private attributes.
One of the most pure objectoriented programming models
yet defined is the Component
Object Model (COM).

It enforces all of these
principles rigorously.
William Cook
"On Understanding Data Abstraction, Revisited"
William Cook, "On Understanding Data Abstraction, Revisited"
William Cook, "On Understanding Data Abstraction, Revisited"
William Cook, "On Understanding Data Abstraction, Revisited"
newStack =
  (let items = ref() 
{
isEmpty =   #items = 0,
depth =   #items,
push =  x  items := xˆitemsy  y  0...#items,
top =   items0
})
var newStack = function() {
var items = []
return {
isEmpty: function() {
return items.length === 0
},
depth: function() {
return items.length
},
push: function(newTop) {
items = items.unshift(newTop)
},
top: function() {
return items[0]
}
}
}
Any application that can be
written in JavaScript, will
eventually be written in
JavaScript.
Atwood's Law
There have always been fairly severe
size constraints on the Unix operating
system and its software. Given the
partially antagonistic desires for
reasonable efficiency and expressive
power, the size constraint has
encouraged not only economy but a
certain elegance of design.
Dennis Ritchie and Ken Thompson
"The UNIX Time-Sharing System", CACM
This is the Unix philosophy: Write
programs that do one thing and do
it well. Write programs to work
together. Write programs to handle
text streams, because that is a
universal interface.

Doug McIlroy
The hard part isn’t writing little
programs that do one thing well.
The hard part is combining little
programs to solve bigger
problems. In McIlroy’s summary,
the hard part is his second
sentence: Write programs to work
together.
John D Cook
http://www.johndcook.com/blog/2010/06/30/where-the-unix-philosophy-breaks-down/
Software applications do things
they’re not good at for the same
reason companies do things
they’re not good at: to avoid
transaction costs.

John D Cook
http://www.johndcook.com/blog/2010/06/30/where-the-unix-philosophy-breaks-down/
Architecture is the decisions that
you wish you could get right early
in a project, but that you are not
necessarily more likely to get them
right than any other.

Ralph Johnson
The "defined" process control model
requires that every piece of work be
completely understood. Given a welldefined set of inputs, the same
outputs are generated every time.

Ken Schwaber
Agile Software Development with Scrum
The empirical process control model,
on the other hand, expects the
unexpected. It provides and exercises
control through frequent inspection
and adaptation for processes that are
imperfectly defined and generate
unpredictable and unrepeatable
results.
Ken Schwaber
Agile Software Development with Scrum
Properly gaining control
of the design process
tends to feel like one is
losing control of the
design process.
The classic essay on
"worse is better" is
either misunderstood
or wrong.

Jim Waldo
Decide for yourselves.

Richard P Gabriel

Más contenido relacionado

Destacado

Measurement and Metrics for Test Managers
Measurement and Metrics for Test ManagersMeasurement and Metrics for Test Managers
Measurement and Metrics for Test ManagersTechWell
 
Lean Management: Lessons from the Field
Lean Management: Lessons from the FieldLean Management: Lessons from the Field
Lean Management: Lessons from the FieldTechWell
 
Testing Challenges within Agile Teams
Testing Challenges within Agile TeamsTesting Challenges within Agile Teams
Testing Challenges within Agile TeamsTechWell
 
How to Survive the Coming Test Automation Zombie Apocalypse
How to Survive the Coming Test Automation Zombie ApocalypseHow to Survive the Coming Test Automation Zombie Apocalypse
How to Survive the Coming Test Automation Zombie ApocalypseTechWell
 
Keynote: Surviving or Thriving: Top Ten Lessons for the Professional Tester
Keynote: Surviving or Thriving: Top Ten Lessons for the Professional TesterKeynote: Surviving or Thriving: Top Ten Lessons for the Professional Tester
Keynote: Surviving or Thriving: Top Ten Lessons for the Professional TesterTechWell
 
Leveraging Core Values for Healthier, More Productive Teams
Leveraging Core Values for Healthier, More Productive TeamsLeveraging Core Values for Healthier, More Productive Teams
Leveraging Core Values for Healthier, More Productive TeamsTechWell
 
Yin and Yang: Metrics within Agile and Traditional Lifecycles
Yin and Yang: Metrics within Agile and Traditional LifecyclesYin and Yang: Metrics within Agile and Traditional Lifecycles
Yin and Yang: Metrics within Agile and Traditional LifecyclesTechWell
 
Patters for Team Collaboration: Toward Whole Team Quality
Patters for Team Collaboration: Toward Whole Team QualityPatters for Team Collaboration: Toward Whole Team Quality
Patters for Team Collaboration: Toward Whole Team QualityTechWell
 
Introducing Keyword-Driven Test Automation
Introducing Keyword-Driven Test AutomationIntroducing Keyword-Driven Test Automation
Introducing Keyword-Driven Test AutomationTechWell
 
Test Estimation for Managers
Test Estimation for Managers Test Estimation for Managers
Test Estimation for Managers TechWell
 
Become a Big Data Quality Hero
Become a Big Data Quality HeroBecome a Big Data Quality Hero
Become a Big Data Quality HeroTechWell
 
Testing After You’ve Finished Testing
Testing After You’ve Finished TestingTesting After You’ve Finished Testing
Testing After You’ve Finished TestingTechWell
 

Destacado (12)

Measurement and Metrics for Test Managers
Measurement and Metrics for Test ManagersMeasurement and Metrics for Test Managers
Measurement and Metrics for Test Managers
 
Lean Management: Lessons from the Field
Lean Management: Lessons from the FieldLean Management: Lessons from the Field
Lean Management: Lessons from the Field
 
Testing Challenges within Agile Teams
Testing Challenges within Agile TeamsTesting Challenges within Agile Teams
Testing Challenges within Agile Teams
 
How to Survive the Coming Test Automation Zombie Apocalypse
How to Survive the Coming Test Automation Zombie ApocalypseHow to Survive the Coming Test Automation Zombie Apocalypse
How to Survive the Coming Test Automation Zombie Apocalypse
 
Keynote: Surviving or Thriving: Top Ten Lessons for the Professional Tester
Keynote: Surviving or Thriving: Top Ten Lessons for the Professional TesterKeynote: Surviving or Thriving: Top Ten Lessons for the Professional Tester
Keynote: Surviving or Thriving: Top Ten Lessons for the Professional Tester
 
Leveraging Core Values for Healthier, More Productive Teams
Leveraging Core Values for Healthier, More Productive TeamsLeveraging Core Values for Healthier, More Productive Teams
Leveraging Core Values for Healthier, More Productive Teams
 
Yin and Yang: Metrics within Agile and Traditional Lifecycles
Yin and Yang: Metrics within Agile and Traditional LifecyclesYin and Yang: Metrics within Agile and Traditional Lifecycles
Yin and Yang: Metrics within Agile and Traditional Lifecycles
 
Patters for Team Collaboration: Toward Whole Team Quality
Patters for Team Collaboration: Toward Whole Team QualityPatters for Team Collaboration: Toward Whole Team Quality
Patters for Team Collaboration: Toward Whole Team Quality
 
Introducing Keyword-Driven Test Automation
Introducing Keyword-Driven Test AutomationIntroducing Keyword-Driven Test Automation
Introducing Keyword-Driven Test Automation
 
Test Estimation for Managers
Test Estimation for Managers Test Estimation for Managers
Test Estimation for Managers
 
Become a Big Data Quality Hero
Become a Big Data Quality HeroBecome a Big Data Quality Hero
Become a Big Data Quality Hero
 
Testing After You’ve Finished Testing
Testing After You’ve Finished TestingTesting After You’ve Finished Testing
Testing After You’ve Finished Testing
 

Similar a ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse

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
 
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
 
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
 
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
 
Excavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsExcavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsUwe Friedrichsen
 
Software Architectures, Week 1 - Monolithic Architectures
Software Architectures, Week 1 - Monolithic ArchitecturesSoftware Architectures, Week 1 - Monolithic Architectures
Software Architectures, Week 1 - Monolithic ArchitecturesAngelos Kapsimanis
 
Hanmer Software Patterns Bosc2009
Hanmer Software Patterns Bosc2009Hanmer Software Patterns Bosc2009
Hanmer Software Patterns Bosc2009bosc
 
Take the Smalltalk Red Pill
Take the Smalltalk Red PillTake the Smalltalk Red Pill
Take the Smalltalk Red PillOSOCO
 
Velocity 2010: Scalable Internet Architectures
Velocity 2010: Scalable Internet ArchitecturesVelocity 2010: Scalable Internet Architectures
Velocity 2010: Scalable Internet ArchitecturesTheo Schlossnagle
 
Architecture In An Agile World
Architecture In An Agile WorldArchitecture In An Agile World
Architecture In An Agile WorldJames Cooper
 
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Arnauld Loyer
 
Models vs Reality: Quest for the Roots of Complexity
Models vs Reality: Quest for the Roots of ComplexityModels vs Reality: Quest for the Roots of Complexity
Models vs Reality: Quest for the Roots of ComplexityJulian Warszawski
 
Notes on Simulation and GHDL
Notes on Simulation and GHDLNotes on Simulation and GHDL
Notes on Simulation and GHDLDIlawar Singh
 
Software Engineering
Software EngineeringSoftware Engineering
Software EngineeringSanjay Saluth
 
Manageability Matters
Manageability MattersManageability Matters
Manageability Matterslkanies
 
Life & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentLife & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentPersistent Systems Ltd.
 
Breathing Data, Competing on Code
Breathing Data, Competing on CodeBreathing Data, Competing on Code
Breathing Data, Competing on CodeVenkatesh Rao
 

Similar a ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse (20)

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
 
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
 
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
 
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
 
Excavating the knowledge of our ancestors
Excavating the knowledge of our ancestorsExcavating the knowledge of our ancestors
Excavating the knowledge of our ancestors
 
Old Is the New New
Old Is the New NewOld Is the New New
Old Is the New New
 
Software Architectures, Week 1 - Monolithic Architectures
Software Architectures, Week 1 - Monolithic ArchitecturesSoftware Architectures, Week 1 - Monolithic Architectures
Software Architectures, Week 1 - Monolithic Architectures
 
Hanmer Software Patterns Bosc2009
Hanmer Software Patterns Bosc2009Hanmer Software Patterns Bosc2009
Hanmer Software Patterns Bosc2009
 
Take the Smalltalk Red Pill
Take the Smalltalk Red PillTake the Smalltalk Red Pill
Take the Smalltalk Red Pill
 
Moore for less
Moore for lessMoore for less
Moore for less
 
Flow based-1994
Flow based-1994Flow based-1994
Flow based-1994
 
Velocity 2010: Scalable Internet Architectures
Velocity 2010: Scalable Internet ArchitecturesVelocity 2010: Scalable Internet Architectures
Velocity 2010: Scalable Internet Architectures
 
Architecture In An Agile World
Architecture In An Agile WorldArchitecture In An Agile World
Architecture In An Agile World
 
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
 
Models vs Reality: Quest for the Roots of Complexity
Models vs Reality: Quest for the Roots of ComplexityModels vs Reality: Quest for the Roots of Complexity
Models vs Reality: Quest for the Roots of Complexity
 
Notes on Simulation and GHDL
Notes on Simulation and GHDLNotes on Simulation and GHDL
Notes on Simulation and GHDL
 
Software Engineering
Software EngineeringSoftware Engineering
Software Engineering
 
Manageability Matters
Manageability MattersManageability Matters
Manageability Matters
 
Life & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentLife & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@Persistent
 
Breathing Data, Competing on Code
Breathing Data, Competing on CodeBreathing Data, Competing on Code
Breathing Data, Competing on Code
 

Más de TechWell

Failing and Recovering
Failing and RecoveringFailing and Recovering
Failing and RecoveringTechWell
 
Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization TechWell
 
Test Design for Fully Automated Build Architecture
Test Design for Fully Automated Build ArchitectureTest Design for Fully Automated Build Architecture
Test Design for Fully Automated Build ArchitectureTechWell
 
System-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good StartSystem-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good StartTechWell
 
Build Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test StrategyBuild Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test StrategyTechWell
 
Testing Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for SuccessTesting Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for SuccessTechWell
 
Implement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlowImplement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlowTechWell
 
Develop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your SanityDevelop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your SanityTechWell
 
Eliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps StrategyEliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps StrategyTechWell
 
Transform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOpsTransform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOpsTechWell
 
The Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—LeadershipThe Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—LeadershipTechWell
 
Resolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile TeamsResolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile TeamsTechWell
 
Pin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile GamePin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile GameTechWell
 
Agile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile TeamsAgile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile TeamsTechWell
 
A Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps ImplementationA Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps ImplementationTechWell
 
Databases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery ProcessDatabases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery ProcessTechWell
 
Mobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to AutomateMobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to AutomateTechWell
 
Cultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for SuccessCultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for SuccessTechWell
 
Turn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile TransformationTurn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile TransformationTechWell
 

Más de TechWell (20)

Failing and Recovering
Failing and RecoveringFailing and Recovering
Failing and Recovering
 
Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization Instill a DevOps Testing Culture in Your Team and Organization
Instill a DevOps Testing Culture in Your Team and Organization
 
Test Design for Fully Automated Build Architecture
Test Design for Fully Automated Build ArchitectureTest Design for Fully Automated Build Architecture
Test Design for Fully Automated Build Architecture
 
System-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good StartSystem-Level Test Automation: Ensuring a Good Start
System-Level Test Automation: Ensuring a Good Start
 
Build Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test StrategyBuild Your Mobile App Quality and Test Strategy
Build Your Mobile App Quality and Test Strategy
 
Testing Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for SuccessTesting Transformation: The Art and Science for Success
Testing Transformation: The Art and Science for Success
 
Implement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlowImplement BDD with Cucumber and SpecFlow
Implement BDD with Cucumber and SpecFlow
 
Develop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your SanityDevelop WebDriver Automated Tests—and Keep Your Sanity
Develop WebDriver Automated Tests—and Keep Your Sanity
 
Ma 15
Ma 15Ma 15
Ma 15
 
Eliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps StrategyEliminate Cloud Waste with a Holistic DevOps Strategy
Eliminate Cloud Waste with a Holistic DevOps Strategy
 
Transform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOpsTransform Test Organizations for the New World of DevOps
Transform Test Organizations for the New World of DevOps
 
The Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—LeadershipThe Fourth Constraint in Project Delivery—Leadership
The Fourth Constraint in Project Delivery—Leadership
 
Resolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile TeamsResolve the Contradiction of Specialists within Agile Teams
Resolve the Contradiction of Specialists within Agile Teams
 
Pin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile GamePin the Tail on the Metric: A Field-Tested Agile Game
Pin the Tail on the Metric: A Field-Tested Agile Game
 
Agile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile TeamsAgile Performance Holarchy (APH)—A Model for Scaling Agile Teams
Agile Performance Holarchy (APH)—A Model for Scaling Agile Teams
 
A Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps ImplementationA Business-First Approach to DevOps Implementation
A Business-First Approach to DevOps Implementation
 
Databases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery ProcessDatabases in a Continuous Integration/Delivery Process
Databases in a Continuous Integration/Delivery Process
 
Mobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to AutomateMobile Testing: What—and What Not—to Automate
Mobile Testing: What—and What Not—to Automate
 
Cultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for SuccessCultural Intelligence: A Key Skill for Success
Cultural Intelligence: A Key Skill for Success
 
Turn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile TransformationTurn the Lights On: A Power Utility Company's Agile Transformation
Turn the Lights On: A Power Utility Company's Agile Transformation
 

Último

"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 

Último (20)

"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 

ADC-BSC EAST 2013 Keynote: Worse Is Better—For Better or for Worse

  • 1. Worse Is Better, for Better or for Worse @KevlinHenney
  • 2.
  • 3.
  • 4. There are a thousand thoughts lying within a man that he does not know till he takes up the pen to write. William Thackeray I am irritated by my own writing. I am like a violinist whose ear is true, but whose fingers refuse to reproduce precisely the sound he hears within. Gustave Flaubert When I write, I feel like an armless, legless man with a crayon in his mouth. Kurt Vonnegut
  • 5. Stop Overpromising and Overshooting We want to do everything all at once. Grand plans! Sweeping gestures! Epic 23-book  fantasy  cycles!  Don’t   overreach. Concentrate on what you can complete. Temper risk with reality. Chuck Wendig "25 Things Writers Should Stop Doing" http://terribleminds.com/ramble/2012/01/03/25-things-writers-should-stop-doing/
  • 6.
  • 7. In 1990 I proposed a theory, called Worse Is Better, of why software would be more likely to succeed if it was developed with minimal invention.
  • 8. It is far better to have an underfeatured product that is rock solid, fast, and small than one that covers what an expert would consider the complete requirements.
  • 9. The following is a characterization of the contrasting [the right thing] design philosophy:  Simplicity: The design is simple [...]. Simplicity of implementation is irrelevant.  Completeness: The design covers as many important situations as possible. All reasonably expected cases must be covered.  Correctness: The design is correct in all observable aspects.  Consistency: The design is thoroughly consistent. A design is allowed to be slightly less simple and less complete in order to avoid inconsistency. Consistency is as important as correctness.
  • 10. Here are the characteristics of a worse-is-better software design:  Simplicity: The design is simple in implementation. The interface should be simple, but anything adequate will do.  Completeness: The design covers only necessary situations. Completeness can be sacrificed in favor of any other quality.  Correctness: The design is correct in all observable aspects.  Consistency: The design is consistent as far as it goes. Consistency is less of a problem because you always choose the smallest scope for the first implementation.
  • 11. Implementation characteristics are foremost:  The implementation should be fast.  It should be small.  It should interoperate with the programs and tools that the expected users are already using.  It should be bug-free, and if that requires implementing fewer features, do it.  It should use parsimonious abstractions as long as they don’t get in the way.
  • 12. #!/usr/bin/perl # -------------------------------------------------------# PerlInterpreter must be the first line of the file. # # Copyright (c) 1995, Cunningham & Cunningham, Inc. # # This program has been generated by the HyperPerl # generator. The source hypertext can be found # at http://c2.com/cgi/wikibase. This program belongs # to Cunningham & Cunningham, Inc., is to be used # only by agreement with the owner, and then only # with the understanding that the owner cannot be # responsible for any behaviour of the program or # any damages that it may cause. # -------------------------------------------------------- PerlInterpreter InitialComments # InitialComments print "Content-type: text/htmlnn"; $DBM = "/usr/ward/$ScriptName"; dbmopen(%db, $DBM , 0666) | &AbortScript("can't open $DBM"); $CookedInput{browse} && &HandleBrowse; $CookedInput{edit} && &HandleEdit; $CookedInput{copy} && &HandleEdit; $CookedInput{links} && &HandleLinks; $CookedInput{search} && &HandleSearch; dbmclose (%db); if ($ENV{REQUEST_METHOD} eq POST) { $CookedInput{post} && &HandlePost; } # &DumpBinding(*CookedInput); # &DumpBinding(*old); # &DumpBinding(*ENV); # -------------------------------------------------------- WikiInHyperPerl
  • 13. I always have it in the back of my head that I want to make a slightly better C. But getting everything to fit, top to bottom, syntax, semantics, tooling, etc., might not be possible or even worth the effort. As it stands today, C is unreasonably effective, and I don't see that changing any time soon. Damien Katz http://damienkatz.net/2013/01/the_unreasonable_effectiveness_of_c.html
  • 14. There are only two kinds of languages: the ones people complain about and the ones nobody uses. Bjarne Stroustrup
  • 15.
  • 16.
  • 17.
  • 18. OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I'm not aware of them. Alan Kay
  • 19.
  • 20. In a purist view of object-oriented methodology, dynamic dispatch is the only mechanism for taking advantage of attributes that have been forgotten by subsumption. This position is often taken on abstraction grounds: no knowledge should be obtainable about objects except by invoking their methods. In the purist approach, subsumption provides a simple and effective mechanism for hiding private attributes.
  • 21. One of the most pure objectoriented programming models yet defined is the Component Object Model (COM). It enforces all of these principles rigorously. William Cook "On Understanding Data Abstraction, Revisited"
  • 22. William Cook, "On Understanding Data Abstraction, Revisited"
  • 23. William Cook, "On Understanding Data Abstraction, Revisited"
  • 24. William Cook, "On Understanding Data Abstraction, Revisited"
  • 25.
  • 26. newStack =   (let items = ref()  { isEmpty =   #items = 0, depth =   #items, push =  x  items := xˆitemsy  y  0...#items, top =   items0 })
  • 27. var newStack = function() { var items = [] return { isEmpty: function() { return items.length === 0 }, depth: function() { return items.length }, push: function(newTop) { items = items.unshift(newTop) }, top: function() { return items[0] } } }
  • 28.
  • 29. Any application that can be written in JavaScript, will eventually be written in JavaScript. Atwood's Law
  • 30.
  • 31.
  • 32. There have always been fairly severe size constraints on the Unix operating system and its software. Given the partially antagonistic desires for reasonable efficiency and expressive power, the size constraint has encouraged not only economy but a certain elegance of design. Dennis Ritchie and Ken Thompson "The UNIX Time-Sharing System", CACM
  • 33. This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface. Doug McIlroy
  • 34. The hard part isn’t writing little programs that do one thing well. The hard part is combining little programs to solve bigger problems. In McIlroy’s summary, the hard part is his second sentence: Write programs to work together. John D Cook http://www.johndcook.com/blog/2010/06/30/where-the-unix-philosophy-breaks-down/
  • 35. Software applications do things they’re not good at for the same reason companies do things they’re not good at: to avoid transaction costs. John D Cook http://www.johndcook.com/blog/2010/06/30/where-the-unix-philosophy-breaks-down/
  • 36.
  • 37. Architecture is the decisions that you wish you could get right early in a project, but that you are not necessarily more likely to get them right than any other. Ralph Johnson
  • 38. The "defined" process control model requires that every piece of work be completely understood. Given a welldefined set of inputs, the same outputs are generated every time. Ken Schwaber Agile Software Development with Scrum
  • 39. The empirical process control model, on the other hand, expects the unexpected. It provides and exercises control through frequent inspection and adaptation for processes that are imperfectly defined and generate unpredictable and unrepeatable results. Ken Schwaber Agile Software Development with Scrum
  • 40.
  • 41. Properly gaining control of the design process tends to feel like one is losing control of the design process.
  • 42. The classic essay on "worse is better" is either misunderstood or wrong. Jim Waldo