Design Thinking
Developer Edition
Pop quiz:
What is computer programming?
A. Art

B. Science

C. Craft

D. Design

E. Engineering



–Donald Knuth

http://www.paulgraham.com/knuth.html
“Computer programming is an art, because it applies
accumulated knowledge to the world, because it
requires skill and ingenuity, and especially because it
produces objects of beauty. A programmer who
subconsciously views himself as an artist will enjoy
what he does and will do it better.”
–Donald Knuth

http://www.paulgraham.com/knuth.html
“When I speak about computer programming as an
art, I am thinking primarily of it as an art form, in an
aesthetic sense. The chief goal of my work as
educator and author is to help people learn how to
write beautiful programs… My feeling is that when we
prepare a program, it can be like composing poetry or
music”
Pop quiz:
What is computer programming?
A. Art

B. Science

C. Craft

D. Design

E. Engineering

F. All of the above!
Pop quiz:
What is computer programming?
A. Art

B. Science

C. Craft

D. Design

E. Engineering

F. All of the above!
Today’s focus
Definitions
• A software architect is a software expert who makes
high-level design choices — Wikipedia

• architect (noun) a person who designs and guides a plan
or undertaking — Merriam-Webster’s Dictionary

• architect (verb) design and make — Google Dictionary
Basics
Don’t make me think
1. Don’t make me think

2. Make each page self-evident (requires
no explanation), or at least self-
explanatory.

3. Omit needless words

4. Facts of life:

• We don’t read pages. We scan them.

• We don’t make optimal choices. We
satisfice.

• We don’t figure out how things work.
We muddle through.
–Don Norman, The Design of Everyday Things
“The idea that a person is at fault when something
goes wrong is deeply entrenched in society. That’s
why we blame others and even ourselves… But in my
experience, human error usually is a result of poor
design: it should be called system error. Humans err
continually; it is an intrinsic part of our nature. System
design should take this into account. Pinning the
blame on the person may be a comfortable way to
proceed, but why was the system ever designed so
that a single act by a single person could cause
calamity? Worse, blaming the person without fixing
the root, underlying cause does not fix the problem:
the same error is likely to be repeated by someone
else.”
–Don Norman, The Design of Everyday Things
“The problem with the designs of most [software]
engineers is that they are too logical. We have to
accept human behavior the way it is, not the way we
would wish it to be.”
–Don Norman, The Design of Everyday Things
“Eliminate the term human error.”
–Don Norman, The Design of Everyday Things
“Designers must please their clients, who are not
always the end users…engineers, developers,
manufacturing, services, sales, and marketing
people…these groups are users, too, not of the
product itself, but of the output of the design team.”
Tools that prevent
developer errors
• source control

• continuous integration

• managed memory

• compiler

• others…
The Ideal Software
Development Process
1. Procrastinate
–Aaron Sorkin
Screenwriter behind “Steve Jobs”, “The West Wing”, “A Few Good Men”, and
more
“You call it procrastination, I call it thinking.”
–John Lasseter
“You must go out and do
research.”
–Ed Catmull
“Craft is what we are expected
to know; art is the unexpected
use of our craft…copying what’s
come before is a guaranteed
path to mediocrity”
–Ed Catmull
“In Korean Zen, the belief that it is good to branch out
beyond what we already know is expressed in a
phrase that means, literally, “not know mind.” To have
a “not know mind” is a goal of creative people. It
means you are open to the new, just as children are.”
NIST: Relative cost to repair defects at
different stages in software development
https://pdfs.semanticscholar.org/
9b68/5f84da00514397d9af7f27cc0b7db7df05c3.pdf
The Ideal Software
Development Process
1. Procrastinate

2. Don’t solve the problem you were assigned
The Double-Diamond
Model
–Don Norman, The Design of Everyday Things
“A brilliant solution to the wrong problem can be
worse than no solution at all: solve the correct
problem.”
The Ideal Software
Development Process
1. Procrastinate

2. Don’t solve the problem you were assigned

3. Avoid writing code
–Rich Skrenta

quoted on: https://blog.codinghorror.com/the-best-code-is-no-code-at-all/
“Code is bad. It rots. It requires periodic
maintenance. It has bugs that need to be found. New
features mean old code has to be adapted. The more
code you have, the more places there are for bugs to
hide. The longer checkouts or compiles take. The
longer it takes a new employee to make sense of your
system. If you have to refactor there's more stuff to
move around.”
https://en.wikipedia.org/wiki/Heuristic
“[A] heuristic is any approach to problem solving,
learning, or discovery that employs a practical
method not guaranteed to be optimal or perfect, but
sufficient for reaching an immediate goal.”
The Double-Diamond
Model
Heuristics for writing code
• Brevity of code

• Featurefulness

• Speed of execution

• Time spent coding

• Robustness

• Malleability

• Memory space

• Disk space
Heuristics for writing code
• Brevity of code

• Featurefulness

• Speed of execution

• Time spent coding

• Robustness

• Malleability

• Memory space

• Disk space
1st
DRY is a prerequisite for SOLID
SOLID
Single responsibility principle: A class should have only one
reason to change.

Open/closed principle: classes should be open for
extension, but closed for modification.
Inputs
1. XML file

2. JSON file

3. Text file

4. hard-coded string

5. user input (textbox)

6. web service
Outputs
1. XML file

2. JSON file

3. Text file

4. hard-coded string

5. user input (textbox)

6. web service

7. console
• Inheritance: multiplication 6 x 7 = 42 classes

• Composition: addition 6 + 7 = 13 classes
–Jon Skeet
https://codeblog.jonskeet.uk/2013/03/15/the-open-closed-principle-in-review/
“I’ve never "got" the open-closed principle.”
–Robert C. Martin (Uncle Bob)
“Always leave the code you’re
editing a little better than you
found it.”
Boy Scout Rule
Thank you!
Matthew Banz

Design Thinking for Developers

  • 1.
  • 2.
    Pop quiz: What iscomputer programming? A. Art B. Science C. Craft D. Design E. Engineering
 

  • 3.
    –Donald Knuth
 http://www.paulgraham.com/knuth.html “Computer programmingis an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better.”
  • 4.
    –Donald Knuth
 http://www.paulgraham.com/knuth.html “When Ispeak about computer programming as an art, I am thinking primarily of it as an art form, in an aesthetic sense. The chief goal of my work as educator and author is to help people learn how to write beautiful programs… My feeling is that when we prepare a program, it can be like composing poetry or music”
  • 6.
    Pop quiz: What iscomputer programming? A. Art B. Science C. Craft D. Design E. Engineering F. All of the above!
  • 7.
    Pop quiz: What iscomputer programming? A. Art B. Science C. Craft D. Design E. Engineering F. All of the above! Today’s focus
  • 8.
    Definitions • A softwarearchitect is a software expert who makes high-level design choices — Wikipedia • architect (noun) a person who designs and guides a plan or undertaking — Merriam-Webster’s Dictionary • architect (verb) design and make — Google Dictionary
  • 9.
  • 10.
    Don’t make methink 1. Don’t make me think 2. Make each page self-evident (requires no explanation), or at least self- explanatory. 3. Omit needless words 4. Facts of life: • We don’t read pages. We scan them. • We don’t make optimal choices. We satisfice. • We don’t figure out how things work. We muddle through.
  • 13.
    –Don Norman, TheDesign of Everyday Things “The idea that a person is at fault when something goes wrong is deeply entrenched in society. That’s why we blame others and even ourselves… But in my experience, human error usually is a result of poor design: it should be called system error. Humans err continually; it is an intrinsic part of our nature. System design should take this into account. Pinning the blame on the person may be a comfortable way to proceed, but why was the system ever designed so that a single act by a single person could cause calamity? Worse, blaming the person without fixing the root, underlying cause does not fix the problem: the same error is likely to be repeated by someone else.”
  • 14.
    –Don Norman, TheDesign of Everyday Things “The problem with the designs of most [software] engineers is that they are too logical. We have to accept human behavior the way it is, not the way we would wish it to be.”
  • 15.
    –Don Norman, TheDesign of Everyday Things “Eliminate the term human error.”
  • 16.
    –Don Norman, TheDesign of Everyday Things “Designers must please their clients, who are not always the end users…engineers, developers, manufacturing, services, sales, and marketing people…these groups are users, too, not of the product itself, but of the output of the design team.”
  • 17.
    Tools that prevent developererrors • source control • continuous integration • managed memory • compiler • others…
  • 19.
    The Ideal Software DevelopmentProcess 1. Procrastinate
  • 22.
    –Aaron Sorkin Screenwriter behind“Steve Jobs”, “The West Wing”, “A Few Good Men”, and more “You call it procrastination, I call it thinking.”
  • 24.
    –John Lasseter “You mustgo out and do research.” –Ed Catmull “Craft is what we are expected to know; art is the unexpected use of our craft…copying what’s come before is a guaranteed path to mediocrity”
  • 25.
    –Ed Catmull “In KoreanZen, the belief that it is good to branch out beyond what we already know is expressed in a phrase that means, literally, “not know mind.” To have a “not know mind” is a goal of creative people. It means you are open to the new, just as children are.”
  • 26.
    NIST: Relative costto repair defects at different stages in software development https://pdfs.semanticscholar.org/ 9b68/5f84da00514397d9af7f27cc0b7db7df05c3.pdf
  • 27.
    The Ideal Software DevelopmentProcess 1. Procrastinate 2. Don’t solve the problem you were assigned
  • 28.
  • 29.
    –Don Norman, TheDesign of Everyday Things “A brilliant solution to the wrong problem can be worse than no solution at all: solve the correct problem.”
  • 31.
    The Ideal Software DevelopmentProcess 1. Procrastinate 2. Don’t solve the problem you were assigned 3. Avoid writing code
  • 32.
    –Rich Skrenta
 quoted on:https://blog.codinghorror.com/the-best-code-is-no-code-at-all/ “Code is bad. It rots. It requires periodic maintenance. It has bugs that need to be found. New features mean old code has to be adapted. The more code you have, the more places there are for bugs to hide. The longer checkouts or compiles take. The longer it takes a new employee to make sense of your system. If you have to refactor there's more stuff to move around.”
  • 33.
    https://en.wikipedia.org/wiki/Heuristic “[A] heuristic isany approach to problem solving, learning, or discovery that employs a practical method not guaranteed to be optimal or perfect, but sufficient for reaching an immediate goal.”
  • 34.
  • 35.
    Heuristics for writingcode • Brevity of code • Featurefulness • Speed of execution • Time spent coding • Robustness • Malleability • Memory space • Disk space
  • 36.
    Heuristics for writingcode • Brevity of code • Featurefulness • Speed of execution • Time spent coding • Robustness • Malleability • Memory space • Disk space 1st
  • 37.
    DRY is aprerequisite for SOLID
  • 38.
    SOLID Single responsibility principle:A class should have only one reason to change. Open/closed principle: classes should be open for extension, but closed for modification.
  • 39.
    Inputs 1. XML file 2.JSON file 3. Text file 4. hard-coded string 5. user input (textbox) 6. web service Outputs 1. XML file 2. JSON file 3. Text file 4. hard-coded string 5. user input (textbox) 6. web service 7. console • Inheritance: multiplication 6 x 7 = 42 classes • Composition: addition 6 + 7 = 13 classes
  • 40.
  • 42.
    –Robert C. Martin(Uncle Bob) “Always leave the code you’re editing a little better than you found it.” Boy Scout Rule
  • 43.