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

Developer Experience in the PHP World

F5dfeeef276fcfd4751f4063487a5a3f?s=47 weaverryan
February 06, 2015

Developer Experience in the PHP World

We're sharing more, we're writing more blog posts and we're building libraries with increasingly clever names. So why does it sometimes *still* feel like rage-tossing my computer out of the window is part of solving development problems? I thought the future would let me composer install unicorns and rainbows directly into my app!? Shouldn't my experience as a developer be smoother? Having *only* great tools is just about as useful as locking me inside a Home Depot and asking me to build a house. So in this talk, we'll look at developer experience (DX) in the PHP world by going through some DX wins and some DX fails, um, "todos". I'll also share what some communities and libraries are doing specifically to make our lives easier and more productive. But ultimately, DX starts with *us*: developers who notice when things are too difficult and improve them. By the end of this talk, I hope the PHP world will have a few more DX heroes.



February 06, 2015

More Decks by weaverryan

Other Decks in Technology


  1. by your friend: Ryan Weaver @weaverryan Developer Experience in the

    PHP World
  2. KnpUniversity.com github.com/weaverryan Who is this Hipster? > Lead for the

    Symfony documentation
 > KnpLabs US - Symfony Consulting, training & general Kumbaya > Writer for KnpUniversity.com Tutorials
  3. We <3 Cake Big plate of cake

  4. Ephemeralization* @weaverryan

  5. * shamelessly “borrowed” from David Zuelke http://bit.ly/dzuelke-ephem

  6. R. Buckminster Fuller

  7. None
  8. do more and more with less and less until eventually

    you can do everything with nothing “
  9. https://www.flickr.com/photos/chandramarsono/4324373384

  10. https://www.flickr.com/photos/krawcowicz/4153762400

  11. limited by site https://www.flickr.com/photos/40132991@N07/3715292940

  12. https://www.flickr.com/photos/avlxyz/4999120709

  13. Easiest scaling ever Simplest Deployment Process @weaverryan

  14. Do More, With Less

  15. Less is not about size

  16. Less …
 …drain on my patience …drain on my

    energy …design on this slide
  17. UX @weaverryan

  18. Do more with less Ephemeralization for Development

  19. Less is not (necessarily) about code written

  20. Less… …Dev Time …Learning Curve …Complexity

  21. DX

  22. A Path to DX in 6 Steps

  23. 1. Architecture First (Simple) @weaverryan

  24. Complexity: Consisting of many different and connected parts

  25. Simple vs. Easy @weaverryan

  26. Architecture First: Don’t Sacrifice for DX @weaverryan

  27. None
  28. 1. mammoth class
 2. Expects a “signed request” on either

 3. Sends a curl request to exchange the OAuth code for the access_token
 4. Send another curl request to fetch user data
  29. Perceived Affordances @weaverryan

  30. Nope! Possibilities are easily Perceivable

  31. Yep! Possibilities are easily Perceivable

  32. Nope!

  33. Yep!

  34. Design Principles @weaverryan

  35. Use Private Methods Nope!

  36. Use Private Methods Yep!

  37. Limit Mutability Nope!

  38. Limit Mutability Yep!

  39. Callbacks instead of Interfaces Nope!

  40. Yep! Callbacks instead of Interfaces

  41. Expressive Naming Nope!

  42. RUN! Expressive Naming

  43. On My Side? or In My Way? @weaverryan

  44. @weaverryan 2. Easy

  45. @weaverryan Feature-Driven (personae) Think about the problems that need to

    be solved
  46. @weaverryan Add Layers

  47. @weaverryan Nope!

  48. @weaverryan Yep!

  49. @weaverryan Yep! Accessible to Beginners

  50. @weaverryan Yep! … clear path for noob -> expert

  51. @weaverryan 3. The 5 Minute Experience

  52. @weaverryan Yep! Instant Gratification

  53. Nope!

  54. Nope!

  55. Nope!

  56. Nope!

  57. A real app can evolve from this @weaverryan

  58. @weaverryan 4. Big Giant Exception Messages with Links (because, why

  59. Users can avoid the docs before getting the first-use pay-off

  60. @weaverryan Going that direction is unwise. Nope!


  62. @weaverryan Could not load type "enitity" Nope!

  63. @weaverryan Unknown field type “enitity” when creating your form. Did

    you mean “entity”? Yep!
  64. @weaverryan Credentials Error. Nope!

  65. @weaverryan Error retrieving credentials from the instance profile metadata server.

    When you are not running inside of Amazon EC2, you must provide your AWS access key ID and secret access key in the "key" and "secret" options when creating a client or provide an instantiated Aws\Common \Credentials\CredentialsInterface object. Yep!
  66. @weaverryan 5. Documentation

  67. Quick Navigation: 2 Clicks @weaverryan Nope!

  68. Quick Navigation: 2 Clicks @weaverryan Yep!

  69. @weaverryan One Page per Topic OK

  70. @weaverryan Yep! One Page per Topic

  71. @weaverryan Tutorial-Style … with code examples Nope!

  72. Tutorial-Style … with code examples Yep! + API Docs

  73. @weaverryan Simple Homepage Yep!

  74. @weaverryan Yep! Editable

  75. Comments? Online Playground? Where can I get help? @weaverryan

  76. @weaverryan 6. Backwards Compatibility

  77. Thanks for Learning and Using my Library @weaverryan

  78. @weaverryan Also, screw you!

  79. A Call to DX @weaverryan

  80. You say: “this kinda sucks” First @weaverryan

  81. None
  82. We (all) work to fix it Second @weaverryan

  83. Hi! I can improve that for you!

  84. Celebrate! Third

  85. None
  86. None
  87. Repeat Finally @weaverryan

  88. You drive DX… @weaverryan

  89. …and move us towards Ephemeralization @weaverryan

  90. … so we can accomplish so much more with less

  91. @weaverryan PHP & Symfony Video Tutorials KnpUniversity.com Thank You! https://joind.in/13433

  92. Thanks to… http://developerexperience.org/ http://softwareas.com/patterns-of-developer-experience/ http://blog.oshineye.com/2011/05/what-is-devexp.html http://blog.pamelafox.org/ @mtdowling @crell https://joind.in/13433

  93. @weaverryan Open Symfony Training knplabs.com/training in Nashville, TN March 4,

    5 & 6 https://joind.in/13433