Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Usable Software Design
A Talk by Alex Bolboaca
http://www.nasa.gov/sites/default/files/thumbnails/image/iss043e124426.jpg
My belief:
YOU Deserve Better!
Naomi Weast
Actress, not a programmer
https://plus.google.com/110657773112027365790/posts
It reminds me of something else
Jacques Carelman
Artist, creator of “The Catalogue of Impossible Objects” in the 60s
http://www.patakosmos.com/wp-content/...
Coffee pot for masochists
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/coffe...
Absorbent Bottle
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/absorbent-bott...
Siamese Hammers
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/siamese-hammers...
It reminds me of something I read in a book ...
Donald A. Norman
Author of “The Design of Everyday Things”
http://www.jnd.org/NNg-Photographs/Photo1.jpg
“It is the duty o...
User Centric Design Process by UXPA
Revolution started by Donald A. Norman's book
http://uxmastery.com/what-does-a-user-ce...
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...
You Are The User: Changing Code
●
Figure out what you need to change
●
Navigate there
●
Read the code, tests, documentatio...
Figure Out What To Change
●
How easy can you reason about the runtime
behavior based on the static structure of the
code?
Example: Namespaces
Example: Modules
Is Your Design Easy to Navigate?
●
What module / namespace to look in?
– See previous examples
●
How is that thing named?
...
Example: Consistency
Example: Modules APIs
This is just the beginning
What is Usable Software Design?
What is Usable Software Design?
Usable Software Design is any code structure
that exhibits design qualities similar to usa...
5 Design Qualities of Usability
1. Learnability
2. Efficiency
3. Memorability
4. Errors
5. Satisfaction
http://www.nngroup...
How to Improve The Usability of Software
Design?
Developer Persona For Your Team
●
Kernel Developer
●
Java Enterprise Developer
●
Rails Developer
●
C/C++ Embedded Develope...
Example of Team Agreement
Usable Software Design means to us that:
1. It is written for developers to read
2. It is easy t...
Next Step: Practices
“It is written for developers to read”
=> coding guidelines, clean code etc.
“It is easy to find wher...
Specific practices for Usable Software Design?
(Incomplete list)
1. Learnability
How easy is it for users to accomplish basic tasks the first
time they encounter the design?
Hints: Design For Learnability
Code structure that shows what the application does
Consistency
Minimal Surprise
Use Clearl...
Test Learnability
Measure how long it takes for developers
outside your team to understand the purpose of a
class with as ...
2. Efficiency
Once users have learned the design, how quickly can they
perform tasks?
Hints: Design For Efficiency
Use code constructs the whole team understands
Consistency
Fast Validation
Test Efficiency
Retro question: “what slowed you down in the
past two weeks?”
Measure how long it takes for developers to
...
3. Memorability
When you go back to the design after a period of not using it,
how easy is to become efficient again?
Memorability ≈ Efficiency + Learnability
+ The style is internalized
4. Errors
How many errors do you make?
How severe are these errors?
How easily can they recover from the errors?
Hints: Design For Mistake Proofing
It's the system's fault
Write automated tests
Eliminate exceptions
Pass mandatory argum...
Example: TicTacToe
Mistake-prone
Design
Mistake-proof Design
Test Mistake-Proofing
How many bugs do we have?
What is the main cause of the bugs?
(remember, it's typically in the desig...
4. Satisfaction
How pleasant is it to use the design?
Hints: Design For Satisfaction
Strictly personal, but relevant
Test Satisfaction
What parts of the system are unpleasant to use?
How can we change them to be more pleasant?
What To Tell Managers
Usable Software Design has the potential to bring
four economical benefits:
●
Faster integration of ...
My belief:
YOU Deserve Better!
Recap
●
The developer is the user of software design
●
Usable software design means code structure that
exhibits the quali...
Q&A
“The important
thing is
not to stop
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Upcoming SlideShare
Loading in …5
×

Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015

384 views

Published on

Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015

Published in: Technology
  • Be the first to comment

Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015

  1. 1. Usable Software Design A Talk by Alex Bolboaca http://www.nasa.gov/sites/default/files/thumbnails/image/iss043e124426.jpg
  2. 2. My belief: YOU Deserve Better!
  3. 3. Naomi Weast Actress, not a programmer https://plus.google.com/110657773112027365790/posts
  4. 4. It reminds me of something else
  5. 5. Jacques Carelman Artist, creator of “The Catalogue of Impossible Objects” in the 60s http://www.patakosmos.com/wp-content/uploads/2013/09/RDA00147250.jpg
  6. 6. Coffee pot for masochists Catalogue of Impossible Objects by Jacques Carelman http://impossibleobjects.com/catalogue/coffeepot-for-masochists.html
  7. 7. Absorbent Bottle Catalogue of Impossible Objects by Jacques Carelman http://impossibleobjects.com/catalogue/absorbent-bottle.html
  8. 8. Siamese Hammers Catalogue of Impossible Objects by Jacques Carelman http://impossibleobjects.com/catalogue/siamese-hammers.html
  9. 9. It reminds me of something I read in a book ...
  10. 10. 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.”
  11. 11. 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/
  12. 12. 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”?
  13. 13. 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
  14. 14. Figure Out What To Change ● How easy can you reason about the runtime behavior based on the static structure of the code?
  15. 15. Example: Namespaces
  16. 16. Example: Modules
  17. 17. 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?
  18. 18. Example: Consistency
  19. 19. Example: Modules APIs
  20. 20. This is just the beginning
  21. 21. What is Usable Software Design?
  22. 22. What is Usable Software Design? Usable Software Design is any code structure that exhibits design qualities similar to usability
  23. 23. 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?
  24. 24. How to Improve The Usability of Software Design?
  25. 25. 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!
  26. 26. 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
  27. 27. 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.
  28. 28. Specific practices for Usable Software Design? (Incomplete list)
  29. 29. 1. Learnability How easy is it for users to accomplish basic tasks the first time they encounter the design?
  30. 30. 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
  31. 31. 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.
  32. 32. 2. Efficiency Once users have learned the design, how quickly can they perform tasks?
  33. 33. Hints: Design For Efficiency Use code constructs the whole team understands Consistency Fast Validation
  34. 34. 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)
  35. 35. 3. Memorability When you go back to the design after a period of not using it, how easy is to become efficient again?
  36. 36. Memorability ≈ Efficiency + Learnability + The style is internalized
  37. 37. 4. Errors How many errors do you make? How severe are these errors? How easily can they recover from the errors?
  38. 38. Hints: Design For Mistake Proofing It's the system's fault Write automated tests Eliminate exceptions Pass mandatory arguments to constructor (more difficult when using Dependency Injection libraries) Avoid Primitive Obsession Principle of Minimum Surprise
  39. 39. Example: TicTacToe Mistake-prone Design Mistake-proof Design
  40. 40. 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?
  41. 41. 4. Satisfaction How pleasant is it to use the design?
  42. 42. Hints: Design For Satisfaction Strictly personal, but relevant
  43. 43. Test Satisfaction What parts of the system are unpleasant to use? How can we change them to be more pleasant?
  44. 44. 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)
  45. 45. My belief: YOU Deserve Better!
  46. 46. 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
  47. 47. Q&A “The important thing is not to stop

×