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

Serving for the win - deployments and infrastructure for the rest of us

Serving for the win - deployments and infrastructure for the rest of us

You’ve chosen your frameworks and libraries. You’ve learned how to write code which satisfies the buzzword and performance gods. Now you need to serve it to a global audience, and make things easy to preview, to test, to sign-off, and to evolve. But infrastructure design is difficult and boring for most of us. We just want to get our work out into the wild.

If only we had tools which would make us go, “Oh yeah! It all deploys perfectly every time” and shout, “You need another release? BAM! What’s next?

This talk looks at some case studies of projects making common mistakes, and some which benefit from a better approach. We’ll explore tools and techniques which ease the path to production. Things anyone can do to boost confidence in every release. And ways to optimise our hosting for performance, hassle free localisation and genuine A/B testing.

Phil Hawksworth

March 23, 2018
Tweet

More Decks by Phil Hawksworth

Other Decks in Technology

Transcript

  1. SERVING FOR THE WIN
    DEPLOYMENTS AND HOSTING FOR THE REST OF US
    PHIL HAWKSWORTH

    View full-size slide

  2. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    HELLO

    View full-size slide

  3. netlify Serving for the win Render Conference, 2018 @philhawksworth
    SOCK FETISH CONF
    OXFORD 2018

    View full-size slide

  4. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    PHIL HAWKSWORTH
    @

    View full-size slide

  5. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    MAKING THINGS

    View full-size slide

  6. Serving for the win Render Conference, 2018 @philhawksworth
    netlify

    View full-size slide

  7. Serving for the win Render Conference, 2018 @philhawksworth
    netlify

    View full-size slide

  8. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    SALES PITCH

    View full-size slide

  9. Serving for the win Render Conference, 2018 @philhawksworth
    netlify

    View full-size slide

  10. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    MY TRACK RECORD

    View full-size slide

  11. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    STATIC SITES
    GO ALL HOLLYWOOD
    7
    7
    @PHILHAWKSWORTH
    FRONTEERS, AMSTERDAM, 2015
    ~
    I
    C
    CAN SMELL YOUR
    MS

    View full-size slide

  12. netlify Serving for the win Render Conference, 2018 @philhawksworth
    SO, FOR THIS TALK

    View full-size slide

  13. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    TIME TO JAZZ IT UP

    View full-size slide

  14. SERVING FOR THE WIN
    DEPLOYMENTS AND HOSTING FOR THE REST OF US
    PHIL HAWKSWORTH

    View full-size slide

  15. SERVING FOR THE WIN
    DEPLOYMENTS AND HOSTING FOR THE REST OF US
    PHIL HAWKSWORTH

    View full-size slide

  16. SERVING FOR THE WIN
    DEPLOYMENTS AND HOSTING FOR THE REST OF US
    PHIL HAWKSWORTH

    View full-size slide

  17. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    EXOTIC OR NEW

    View full-size slide

  18. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    FUNDAMENTALS

    View full-size slide

  19. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    WE LEARN A LOT
    AT CONFERENCES

    View full-size slide

  20. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    CAPTIONS
    AREN'T
    OPTIONAL
    — Laura

    View full-size slide

  21. ENVIRONMENT
    VARIABLE
    EXFILTRATION 

    WITH NPM
    — Asim

    View full-size slide

  22. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    HEEBEEGEEBEES
    the

    View full-size slide

  23. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    CONFINING THESE LEARNINGS
    TO THEORY IS A WASTE

    View full-size slide

  24. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    CONFINING THESE LEARNINGS
    TO OUR LOCAL ENVIRONMENTS
    IS A WASTE

    View full-size slide

  25. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    LET’S MAKE SURE
    THE GOOD STUFF
    REACHES YOUR USERS

    View full-size slide

  26. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    PERFORMANCE?

    View full-size slide

  27. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DESIGNING FOR PERFORMANCE
    — Lara Callender Hogan

    View full-size slide

  28. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DESIGNING INFRASTRUCTURE
    FOR PERFORMANCE

    View full-size slide

  29. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEPLOYMENTS
    DESIGNING
    INFRASTRUCTURE
    FOR PERFORMANCE

    View full-size slide

  30. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEPLOYMENTS
    DESIGNING
    INFRASTRUCTURE
    FOR PERFORMANCE
    PROCESSES

    View full-size slide

  31. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEPLOYMENTS
    DESIGNING
    INFRASTRUCTURE
    FOR PERFORMANCE
    PROCESSES
    MINDSET

    View full-size slide

  32. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    MINDSET

    View full-size slide

  33. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    OH GREAT…

    HALF AN HOUR OF SLIDES
    ABOUT PROCESS
    ALL OF YOU

    View full-size slide

  34. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    FOR THE NEXT 30 MINUTES OR SO
    / WHERE DOES IT HURT?
    / 3 STORIES
    / MINDSETS AND RESOURCES

    View full-size slide

  35. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    FOR THE NEXT 30 MINUTES OR SO
    / WHERE DOES IT HURT?
    / 3 STORIES
    / MINDSETS AND RESOURCES

    View full-size slide

  36. netlify Serving for the win Render Conference, 2018 @philhawksworth
    WHERE DOES IT HURT?

    View full-size slide

  37. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    CLIENTS / DEADLINES / COMPLEXITY
    PROJECTS USUALLY INVOLVE

    View full-size slide

  38. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    SLEEPLESS NIGHTS

    View full-size slide

  39. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    THE PERFECT PROJECT TIMELINE
    BRIEF AWARDS
    LAUNCH
    START
    SCOPE 

    RE-SCOPE CLIENT

    REVIEW
    FINAL 

    SIGN OFF
    FIXES
    “ ”
    "
    :lemon:

    View full-size slide

  40. netlify Serving for the win Render Conference, 2018 @philhawksworth
    LAUNCH DAY

    View full-size slide

  41. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    PROJECTS CAN BE HARD
    NEWSFLASH

    View full-size slide

  42. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    LEARNING
    PROJECTS USUALLY INVOLVE

    View full-size slide

  43. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    CHANGE
    PROJECTS USUALLY INVOLVE

    View full-size slide

  44. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    INFRASTRUCTURE

    View full-size slide

  45. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    OUR EVOLVING APPROACH TO INFRASTRUCTURE
    ON SITE
    HARDWARE
    SOME
    RACK SPACE
    VIRTUAL
    SERVER
    SOFTWARE

    AAS
    FUNCTIONS

    AAS
    (not Rackspace)
    (perhaps Rackspace)

    View full-size slide

  46. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    NEW DEPLOYMENT
    CONVENTIONS

    View full-size slide

  47. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    APPROACH

    View full-size slide

  48. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    MANAGING CHANGE
    MANAGING THE UNKNOWABLE
    THIS IS WHERE IT HURTS

    View full-size slide

  49. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    AT CRUNCH TIME,
    AS THE PRESSURE MOUNTS
    THIS IS WHERE IT HURTS

    View full-size slide

  50. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    WHEN THE PLAN GOES
    IN THE TRASH
    THIS IS WHERE IT HURTS

    View full-size slide

  51. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    CAN WE PLAN FOR
    THE PLAN GOING IN THE TRASH?

    View full-size slide

  52. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    FOR THE NEXT 30 MINUTES OR SO
    / WHERE DOES IT HURT?
    / 3 STORIES
    / MINDSETS AND RESOURCES

    View full-size slide

  53. netlify Serving for the win Render Conference, 2018 @philhawksworth
    DEPLOYING ON MY FIRST DAY
    Story one

    View full-size slide

  54. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    A LARGE NATION-WIDE
    HEALTHCARE SITE

    View full-size slide

  55. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    ONE TO NOT F**K UP

    View full-size slide

  56. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    IT SHOULD HAVE
    GONE LIVE
    ON FRIDAY
    MY NEW BOSS

    View full-size slide

  57. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    #

    View full-size slide

  58. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    CAN YOU HELP THE TEAM
    FIGURE OUT
    THE DEPLOYMENT?
    MY NEW BOSS

    View full-size slide

  59. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    THE PERFECT PROJECT TIMELINE
    BRIEF AWARDS
    LAUNCH
    START
    SCOPE 

    RE-SCOPE CLIENT

    REVIEW
    FINAL 

    SIGN OFF
    FIXES
    “ ”
    "
    “FIGURE OUT” DEPLOYMENT

    View full-size slide

  60. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    THE DEPLOYMENT

    View full-size slide

  61. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    STAGING
    BOB
    ALICE
    PROD

    View full-size slide

  62. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    FFFFFFFFFTP

    View full-size slide

  63. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    UNKNOWABLE STATE

    View full-size slide

  64. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    UNREPEATABLE PROCESS

    View full-size slide

  65. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DID IT GO LIVE?
    YES, IT DID
    WAS IT CORRECT?
    YES.
    PROBABLY.
    HONESTLY, I DON’T THINK WE
    CAN EVERY REALLY KNOW

    View full-size slide

  66. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    HOW DID THE NEXT
    DEPLOYMENT GO?
    I’M NOT READY TO
    TALK ABOUT THAT
    DO YOU NEED A HUG?
    YES. YES I DO

    View full-size slide

  67. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    VERSION CONTROL SHOULD
    EXTEND TO YOUR DEPLOYMENTS
    Lessons
    HUMAN INTERVENTION IN
    DEPLOYMENTS IS UNDESIRABLE
    ATOMIC DEPLOYS ARE PREFERABLE
    TO PIECEMEAL DEPLOYS

    View full-size slide

  68. netlify Serving for the win Render Conference, 2018 @philhawksworth
    SEARCHING FOR SYRIA
    Story two

    View full-size slide

  69. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  70. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    PLENTY OF CHANGE

    View full-size slide

  71. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    SIGNIFICANT POLITICAL SENSITIVITY

    View full-size slide

  72. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    GREATER STAKEHOLDER DIVERSITY

    View full-size slide

  73. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    A GLOBAL LAUNCH

    View full-size slide

  74. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    ONE TO NOT F**K UP

    View full-size slide

  75. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  76. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    ONE TO NOT F**K UP
    DEFINITELY

    View full-size slide

  77. “FIGURE OUT” DEPLOYMENT
    Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    THE PERFECT PROJECT TIMELINE
    BRIEF AWARDS
    LAUNCH
    START
    SCOPE 

    RE-SCOPE CLIENT

    REVIEW
    FINAL 

    SIGN OFF
    FIXES
    “ ”
    $

    View full-size slide

  78. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    AUTOMATE AS EARLY
    AND AS FAST AS YOU CAN
    BENEDEK GAGYI, RENDER 2018

    View full-size slide

  79. Serving for the win Render Conference, 2018 @philhawksworth
    netlify

    View full-size slide

  80. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DELIVERIES

    View full-size slide

  81. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DELIVER to QA

    View full-size slide

  82. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DELIVER to PRODUCERS

    View full-size slide

  83. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DELIVER to TRANSLATIONS
    TEAMS

    View full-size slide

  84. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DELIVER to THE CLIENT

    View full-size slide

  85. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DELIVER to THE CLIENT’S

    BOSSES

    View full-size slide

  86. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DELIVER to THE PUBLIC

    View full-size slide

  87. netlify Serving for the win Render Conference, 2018 @philhawksworth
    LET’S DELIVER ANY
    VERSION AT ANY TIME
    OUR AMBITION

    View full-size slide

  88. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    VERSION CONTROL

    View full-size slide

  89. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    TAGS SHOULD CREATE
    RESOURCES AT URLS

    View full-size slide

  90. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    URLS FTW

    View full-size slide

  91. netlify Serving for the win Render Conference, 2018 @philhawksworth
    AITCH TEE TEE PEE

    DOUBLE MEH
    ALEX SEXTON

    View full-size slide

  92. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    http foobar.com
    http foobar.com
    ://

    View full-size slide

  93. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    TAGS SHOULD CREATE
    RESOURCES AT URLS

    View full-size slide

  94. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEV
    PROD
    STAGE
    GIT CI

    View full-size slide

  95. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  96. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEV
    PROD
    STAGE
    GIT CI

    View full-size slide

  97. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEV
    PROD
    LIVE
    GIT CI
    STAGE
    STAGE
    STAGE
    STAGE
    STAGE
    STAGE

    View full-size slide

  98. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEV
    PROD
    LIVE
    GIT CI
    STAGE
    STAGE
    STAGE
    STAGE
    STAGE
    STAGE

    View full-size slide

  99. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEMOS / DISCUSSIONS
    TESTS / ISSUES / SIGNOFF
    ALL HAPPENED AGAINST KNOWN VERSIONS

    View full-size slide

  100. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    ADDRESSABLE AND ACCESSIBLE
    BUILD VERSIONS ARE A HUGE WIN
    Lessons
    DECIDING WHEN AND WHAT TO TAG
    REQUIRES COORDINATION
    ATOMIC DEPLOYS TO PROD REMOVE
    UNCERTAINTY FROM LAUNCH DAY

    View full-size slide

  101. netlify Serving for the win Render Conference, 2018 @philhawksworth
    NETLIFY BUILDING NETLIFY
    Story three

    View full-size slide

  102. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  103. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    NETLIFY.COM IS A JAMSTACK
    SITE HOSTED ON NETLIFY USING
    NETLIFY TO NETLIFY NETLIFY

    View full-size slide

  104. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEV
    PROD
    LIVE
    GIT CI
    STAGE
    STAGE
    STAGE
    STAGE
    STAGE
    STAGE

    View full-size slide

  105. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    DEV
    NETLIFY
    LIVE
    GIT
    CI
    STAGE
    STAGE
    STAGE
    CDN

    View full-size slide

  106. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    A GIT-BASED WORKFLOW
    ALL THE WAY TO PRODUCTION

    View full-size slide

  107. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    jamstack
    JAVASCRIPT / API / MARKUP

    View full-size slide

  108. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    APIs SITE
    (JAVASCRIPT)
    JAVASCRIPT
    MARKUP

    View full-size slide

  109. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    APIs SITE
    (JAVASCRIPT)
    JAVASCRIPT
    MARKUP

    View full-size slide

  110. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    BUILDS ARE BASED ON
    GIT COMMITS,

    SO WE HAVE HISTORY

    View full-size slide

  111. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  112. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    APIs SITE
    (JAVASCRIPT)
    JAVASCRIPT
    MARKUP

    View full-size slide

  113. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  114. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  115. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  116. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    APIs SITE
    (JAVASCRIPT)
    JAVASCRIPT
    MARKUP

    View full-size slide

  117. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    AUTOMATION BASED
    ON GIT ACTIVITY

    View full-size slide

  118. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    GENERATING PREVIEWS
    FROM PULL REQUESTS

    View full-size slide

  119. netlify Serving for the win Render Conference, 2018 @philhawksworth

    View full-size slide

  120. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    CONFIDENCE IN THE
    FUTURE STATE

    View full-size slide

  121. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    A/B TESTING

    View full-size slide

  122. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    A/B TESTING

    View full-size slide

  123. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    Lessons EMBRACING VERSION CONTROL
    CONVENTIONS REMOVES NEED TO
    REINVENT THEM
    REDUCED FRICTION BRINGS
    AGILITY AND CONFIDENCE
    JAMSTACK GOES BEYOND
    STATIC SITES

    View full-size slide

  124. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    FOR THE NEXT 30 MINUTES OR SO
    / WHERE DOES IT HURT?
    / 3 STORIES
    / MINDSETS AND RESOURCES

    View full-size slide

  125. netlify Serving for the win Render Conference, 2018 @philhawksworth
    RESOURCES
    CIRCLE CI JENKINS

    View full-size slide

  126. netlify Serving for the win Render Conference, 2018 @philhawksworth
    RESOURCES
    THENEWDYNAMIC.ORG JAMSTACK.ORG

    View full-size slide

  127. netlify Serving for the win Render Conference, 2018 @philhawksworth
    RESOURCES
    THEPOWEROFSERVERLESS.INFO HEADLESSCMS.ORG

    View full-size slide

  128. netlify Serving for the win Render Conference, 2018 @philhawksworth
    THEPOWEROFSERVERLESS.INFO

    View full-size slide

  129. netlify Serving for the win Render Conference, 2018 @philhawksworth
    MINDSETS

    View full-size slide

  130. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    EVERYTHING
    VERSION CONTROLFor

    View full-size slide

  131. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    EXPOSE THE RED LIGHTS

    View full-size slide

  132. Serving for the win Render Conference, 2018 @philhawksworth
    netlify

    View full-size slide

  133. Serving for the win Render Conference, 2018 @philhawksworth
    netlify

    View full-size slide

  134. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    1. MAKE IT SCRIPTED
    2. MAKE IT AUTOMATED
    3. MAKE IT REAL
    4. MAKE IT FIRST
    A NOTE ON DEPLOYMENT

    View full-size slide

  135. netlify Serving for the win Render Conference, 2018 @philhawksworth
    EXPECT TIMES
    OF CHAOS

    View full-size slide

  136. netlify Serving for the win Render Conference, 2018 @philhawksworth
    DON’T LET
    A LACK OF PROCESS
    BE WHAT CREATES IT

    View full-size slide

  137. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    IT’S AN AWFULLY FULL STACK
    A NOTE ON EXPERTISE

    View full-size slide

  138. Serving for the win Render Conference, 2018 @philhawksworth
    netlify
    USE THE SKILLS OF OTHERS
    A NOTE ON EXPERTISE

    View full-size slide

  139. netlify Serving for the win Render Conference, 2018 @philhawksworth
    BUILD BEAUTIFUL THINGS

    View full-size slide

  140. THANK YOU
    PHIL HAWKSWORTH
    HAWKSWORX.COM / TALKS / SERVE

    View full-size slide