9. Jacques Carelman
Artist, creator of “The Catalogue of Impossible Objects” in the 60s
http://www.patakosmos.com/wp-content/uploads/2013/09/RDA00147250.jpg
10. Coffee pot for masochists
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/coffeepot-for-masochists.html
11. Absorbent Bottle
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/absorbent-bottle.html
12. Siamese Hammers
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/siamese-hammers.html
14. Donald A. Norman
Author of “The Design of Everyday Things”
http://www.jnd.org/NNg-Photographs/Photo1.jpg
“It is the duty of
machines and those
who design them to
understand people.
It is not our duty to
understand the
arbitrary,
meaningless dictates
of machines.”
15. User Centric Design Process by UXPA
Revolution started by Donald A. Norman's book
http://uxmastery.com/what-does-a-user-centred-design-process-look-like/
16. All designs have an user.
Who is the user of software
design?
Can't be the end user.
Only one answer: the developer is
the user of software design.
So, then, developer-centric
software design is a thing?
How about “Usable Software
Design”?
17. You Are The User: Changing Code
●
Figure out what you need to change
●
Navigate there
●
Read the code, tests, documentation, comments
●
Write/change code, write/change tests
●
Refactor
●
Build
●
Validate
●
Integrate
18. Figure Out What To Change
●
How easy can you reason about the runtime
behavior based on the static structure of the
code?
21. Is Your Design Easy to Navigate?
●
What module / namespace to look in?
– See previous examples
●
How is that thing named?
– Should be Consistent, Memorable, Precise
●
How deep is the inheritance tree?
26. What is Usable Software Design?
Usable Software Design is any code structure
that exhibits design qualities similar to usability
27. 5 Design Qualities of Usability
1. Learnability
2. Efficiency
3. Memorability
4. Errors
5. Satisfaction
http://www.nngroup.com/articles/usability-101-introduction-to-
usability/
How easy it is to accomplish basic tasks the first
time you're using the design?
How quickly can you perform a task once you've
learned the design?
When you go back to the design after a period of
not using it, how easy is to become efficient
again?
How many errors do you make, how severe are
they and how can you recover from them?
How pleasant it is to use the design?
29. Developer Persona For Your Team
●
Kernel Developer
●
Java Enterprise Developer
●
Rails Developer
●
C/C++ Embedded Developer
●
Android Developer
●
Front-end Javascript + html + CSS developer
●
Etc.
Each persona
has different
needs.
Usability
depends on the
user!
30. Example of Team Agreement
Usable Software Design means to us that:
1. It is written for developers to read
2. It is easy to find where to modify the code
3. Any modification has a minimal ripple-effect
4. It is easy AND fast to validate that we did the right thing
5. We don’t have to do similar modifications in several places
Usable Software Design – A Federating Concep
t
by Johan Martinsson
31. Next Step: Practices
“It is written for developers to read”
=> coding guidelines, clean code etc.
“It is easy to find where to modify the code”
=> navigability, consistency etc.
“Any modification has a minimal ripple effect”
=> follow Open Closed Principle, Single Responsibility Principle
etc.
33. 1. Learnability
How easy is it for users to accomplish basic tasks the first
time they encounter the design?
34. Hints: Design For Learnability
Code structure that shows what the application does
Consistency
Minimal Surprise
Use Clearly Defined Modules With Clear APIs
Readability / Clean Code
Navigability
Add Usage examples – tests / comments etc
35. Test Learnability
Measure how long it takes for developers
outside your team to understand the purpose of a
class with as little help as possible.
37. Hints: Design For Efficiency
Use code constructs the whole team understands
Consistency
Fast Validation
38. Test Efficiency
Retro question: “what slowed you down in the
past two weeks?”
Measure how long it takes for developers to
finish typical tasks (not simple, but typical)
39. 3. Memorability
When you go back to the design after a period of not using it,
how easy is to become efficient again?
44. Test Mistake-Proofing
How many bugs do we have?
What is the main cause of the bugs?
(remember, it's typically in the design)
How can we change the design to avoid it?
48. What To Tell Managers
Usable Software Design has the potential to bring
four economical benefits:
●
Faster integration of new developers in the team
(learnability)
●
Faster time to implement typical (not simple) tasks
(efficiency)
●
Making less mistakes (mistake-proofing)
●
Feeling more motivated (satisfaction)
50. Recap
●
The developer is the user of software design
●
Usable software design means code structure that
exhibits the qualities of usability: Learnability, Efficiency,
Memorability, Error Treatment and Satisfaction
●
Define the personas of your team
●
Create a team agreement
●
Start applying practices that help the agreement
●
This is just the beginning