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

Documentation is King

Documentation is King

Documentation leads to better code, a better workplace, and a better life.

https://github.com/kennethreitz
http://twitter.com/kennethreitz

Kenneth Reitz

April 08, 2013
Tweet

More Decks by Kenneth Reitz

Other Decks in Programming

Transcript

  1. Hi.

  2. Other Interests... • Street Photography • Synthesizers and Music Production

    • World Travel (~140,000 miles last year) • Public Speaker (29 events last year) • Classic Video Games!
  3. The Best Things Prime Lenses, Monophonic Synths, Handheld Games... Pen

    and paper. Mechanical watch. A single carry-on.
  4. The Simple Things Prime Lenses, Monophonic Synths, Handheld Games... Pen

    and paper. Mechanical watch. A single carry-on. Simple! Simple! Simple! Simple! Simple! Simple!
  5. pra•gmat•ic |pragˈmatik|, adj: Dealing with things sensibly and realistically in

    a way that is based on practical rather than theoretical considerations
  6. — Steve Jobs, 1983 People are going to be spending

    two or three hours a day with these machines — more than they spend with a car.
  7. — Steve Jobs, 1983 Software design must be given at

    least as much consideration as we give automobiles today — if not a lot more.
  8. Requests Success • Python is a language built for Humans.

    • Why should HTTP be non-trivial? • I explored and discovered what I really needed, and built it. • I had a real problem that I solved for myself.
  9. Requests Success • At rst, Requests was far from powerful.

    • But, it deeply resonated with people. • Features grew over time, but the API was never compromised.
  10. • Before any code is written, write the README —

    show some examples. • Write some code with the theoretical code that you’ve documented.
  11. Paradigm Shift • Instead of engineering something to get the

    job done, you interact with the problem itself and build an interface that reacts to it. • You discover it. You respond to it.
  12. • Great sculptures aren’t engineered or manufactured—they’re discovered. • The

    sculptor studies and listens to the marble. He identi es with it. • Then, he responds. • Setting free something hidden that inside all along. Sculptures, Etc.
  13. • It’s not about a design that will “work” on

    a phone, tablet, and desktop. • It’s about making something that identi es itself enough to respond to the environment it’s placed in. • Free of arbitrary constraints. Responsive Design
  14. Complex Code is Bad • Tight coupling, monolithic codebases. •

    Lurking, growing technical debt. • Maintenance burden is high. • Self-serving instead of problem-solving.
  15. Simple Code is Good • Code solves problems created by

    humans. • The less code, the less to maintain. • Negative di s are the best di s. • Small, sharp, distributed services.
  16. What is Open Source? • Transparent groups of distributed developers

    working together to make software and projects that make the world a better place.
  17. Open Source is Epic • We have a unique opportunity

    to take part in a powerful social movement, creating the tools that are fundamentally changing the world around us. • Social Media, Elections, Journalism, Wikileaks, etc...
  18. Bad Open Source • Appears unmaintained (20+ pull requests). •

    Fails to solve a clear problem. • Has unclear expectations. (GitX, Facebook SDK, httplib2, hubcap, oauth2, &c)
  19. Great Open Source • Solves a clear problem. • Communicates

    well with users. • Manages expectations realistically. (Jenkins, Python, Django, Pip, Bundler, &c)
  20. Great Open Source • Solves a clear problem. • Communicates

    well with users. • Manages expectations realistically. (Jenkins, Python, Django, Pip, Bundler, &c) Documentation!
  21. Internal Codebase Patterns • Components are tightly coupled. • Broad

    tribal knowledge is required. • Iterative change of components di cult. • Technical debt has a tendency to spread. • Little documentation (if any).
  22. Pretend it’s Open Source • Components become concise & decoupled.

    • Concerns separate themselves. • Best practices emerge (e.g. no creds in code). • Documentation and tests become crucial. • Code can be released at any time.
  23. Documentation = Better Code • Documentation is more important than

    tests. • It changes the way we think about problems. • Speci cally, explaining concepts to users and fellow developers helps uncover asymmetry in APIs.
  24. Documentation = Better Workplace • Every design decision should be

    documented. • Reduces process locks and sync points. • Automates the onboarding process. • Employees can hop from project to project. • Deploy to production without worry. • First step towards automation.
  25. Documentation = Better Lifestyle • Documentation enables asynchronous work ows.

    • Increased autonomy leads to a happier life. • Fewer interruptions, fewer misunderstandings.