Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Developers Torment: The Documentation

Developers Torment: The Documentation

You start a new job. You’re excited - new domain, new knowledge to ingest, new practices to learn. Unfortunately, once you start digging into things, excitement starts to fade and is replaced by frustration. It turns out that there is no way to find out about the product unless you somehow get a hold of sales pitch presentation. You can only learn about architecture if you talk to “that guy” and only if he’ll have 3 hours to spare (spoiler alert: he won’t). In short - tribal knowledge is the only way to go. It’s actually not the worst case scenario. Instead of missing documentation, more often than not you’ll stumble upon one that is simply out of date. Described build process always fails? Your fault, why wouldn’t you know about that one file with dependencies version you have to create manually after pulling the repo? Docs say we use Cassandra to store our data? Well, we did - in 2010. There is a different side to this - in some projects, on the other hand, you feel like the only thing you do is writing the docs. Many of those are probably out of date right now. Others, while helpful, will probably just be lost among the ones not helpful at all. How do you enjoy the fact that you’re creating a document that nobody will ever read? Is there no way out of this hell? Does onboarding process have to be the rite of passage, where your enthusiasm is crushed by the heavy weight of hopelessness? How to write and maintain documentation in the way, that it is an actual advantage to you and yours, and not a pile of shame? During our talk, we’ll analyze what are the actual issues with the docs, do we actually need it and how to go with quality, not quantity. Don’t worry, we won’t leave you without the tools to tackle this beast.

Jakub Marchwicki

May 16, 2019
Tweet

More Decks by Jakub Marchwicki

Other Decks in Technology

Transcript

  1. TL;DR documentation must be Just In Time appear promptly (right

    time) in a places we expect (right place) giving us information we need (right context)
  2. public interface Stream<T> { <R> Stream<R> map(Function<? super T, ?

    extends R> mapper); <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper); }
  3. public interface Stream<T> { <R> Stream<R> map(Function<? super T, ?

    extends R> mapper); <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper); } public interface Optional<T> { <U> Optional<U> map(Function<? super T, ? extends U> mapper); <U> Optional<U> flatMap(Function<? super T, ? extends Optional<? extends U>> mapper); }
  4. public interface Stream<T> { <R> Stream<R> map(Function<? super T, ?

    extends R> mapper); <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper); } public interface Optional<T> { <U> Optional<U> map(Function<? super T, ? extends U> mapper); <U> Optional<U> flatMap(Function<? super T, ? extends Optional<? extends U>> mapper); } public interface CompletionStage<T> { <U> CompletionStage<U> … (Function<? super T, ? extends U> fn); <U> CompletionStage<U> … (Function<? super T, ? extends CompletionStage<? extends U>> fn); } thenApply thenCompose
  5. a flexible workshop format for collaborative exploration of complex business

    domains, beyond silo and specialisation boundaries.
  6. EventStorming a flexible workshop format for collaborative exploration of complex

    business domains, beyond silo and specialisation boundaries.
  7. Product is: • Item in sales pitch • Inventory Element

    in API • Inventory Element, Item and Product in the code
  8. My library add series add an episode paid/not paid labels

    run time: 1h 35 min dr Home season 1 episode 29 What PO said What devs understood movies list add category add flv file status [checkbox] tag cloud length: 2 100 000 ms 8fga324jfdsh.flv from: Michał Bartyzel - Oprogramowanie szyte na miare
  9. Example: Data Abstraction Model • Context: (...) there needs to

    be a way for modules to "speak a common language" for data manipulation and persistence. • Decision: provide a lightweight model for data abstraction and persistence, oriented around the Entity/Attribute mode • Status: ACCEPTED • Consequences: ◦ Users and modules can define the shape and structure of their domain data in a way that is independent of any particular database or type of database. ◦ Modules can perform basic data persistence tasks in a database-agnostic way. https://github.com/arachne-framework/architecture/
  10. Simplicity is better It is far more difficult to be

    simple than to be complicated John Ruskin
  11. public interface Stream<T> { <R> Stream<R> map(Function<? super T, ?

    extends R> mapper); <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper); } public interface Optional<T> { <U> Optional<U> map(Function<? super T, ? extends U> mapper); <U> Optional<U> flatMap(Function<? super T, ? extends Optional<? extends U>> mapper); } public interface CompletionStage<T> { <U> CompletionStage<U> thenCompose (Function<? super T, ? extends U> fn); <U> CompletionStage<U> thenApply (Function<? super T, ? extends CompletionStage<? extends U>> fn); }
  12. Consistency is the king! If you work for acme on

    a service called registration then • Repository: http://gilab.com/acme/registration • Production deployment: http://registration.acme.cloud:8080 • Swagger http://registration.acme.cloud:8080/v2/api-docs • Traces: http://zipkin.acme.cloud/zipkin/?serviceName=registration • Metrics: http://grafana.acme.cloud/dashboard/db/registration • The README.adoc contains a section Context which describes the purpose of the service. • Derive upstream services from traces or circuit breakers activity
  13. Usability 101 • Learnability: How easy is it for users

    to accomplish basic tasks the first time after reading the documentation? • Efficiency: Once users have learned the design, how quickly can they perform tasks? • Memorability: When users want to return to the documentation after a period of not using it, how easy they can find it? • Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors? • Satisfaction: How pleasant is it to use the documentation? Is it adequate? Up-to-date? https://www.nngroup.com/articles/usability-101-introduction-to-usability/
  14. • Learnability: How easy is it for users to accomplish

    basic tasks the first time after reading the documentation? • Efficiency: Once users have learned the design, how quickly can they perform tasks? • Memorability: When users want to return to the documentation after a period of not using it, how easy they can find it? • Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors? • Satisfaction: How pleasant is it to use the documentation? Is it adequate? Up-to-date? is it LEMES?
  15. LEMES of business and domain • Learnability: How easy is

    it for users to accomplish basic tasks the first time after reading the documentation? • Efficiency: Once users have learned the design, how quickly can they perform tasks? • Memorability: When users want to return to the documentation after a period of not using it, how easy they can find it? • Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors? • Satisfaction: How pleasant is it to use the documentation? Is it adequate? Up-to-date?
  16. LEMES of decisions and records • Learnability: How easy is

    it for users to accomplish basic tasks the first time after reading the documentation? • Efficiency: Once users have learned the design, how quickly can they perform tasks? • Memorability: When users want to return to the documentation after a period of not using it, how easy they can find it? • Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors? • Satisfaction: How pleasant is it to use the documentation? Is it adequate? Up-to-date?
  17. • Learnability: How easy is it for users to accomplish

    basic tasks the first time after reading the documentation? • Efficiency: Once users have learned the design, how quickly can they perform tasks? • Memorability: When users want to return to the documentation after a period of not using it, how easy they can find it? • Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors? • Satisfaction: How pleasant is it to use the documentation? Is it adequate? Up-to-date? is it LEMES?
  18. Developer’s Torment :: The Documentation :: Links • EventStorming ◦

    Links + timelapse: https://github.com/mariuszgil/awesome-eventstorming ◦ Site: https://www.eventstorming.com/ ◦ Book: https://leanpub.com/introducing_eventstorming • Architecture Decision Records ◦ http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions ◦ Project example: https://github.com/arachne-framework/architecture/ ◦ Tolling: https://adr.github.io/ and https://github.com/npryce/adr-tools/ • DACI ◦ https://bit.ly/2PpHos Zbyszko Papierski #dynatrace @zpapierski Jakub Marchwicki @kubem #casumo