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

Third-Party or Custom Code? The Art of Software Decisions

Third-Party or Custom Code? The Art of Software Decisions

Do you often find yourself struggling with deciding whether to use a third-party library or write custom code? In this talk, we'll dive into the challenges and benefits of both approaches and provide practical tips for making informed decisions. You'll learn how to weigh the pros and cons of each option, consider architectural decisions, and create better products and apps.

Glenn Reyes

February 14, 2023
Tweet

More Decks by Glenn Reyes

Other Decks in Programming

Transcript

  1. The missing guide for deciding between
    3rd party and custom code
    @glnnrys

    View Slide

  2. @glnnrys

    View Slide

  3. @glnnrys

    View Slide

  4. Glenn Reyes


    @glnnrys

    View Slide

  5. Why do we love building apps?
    @glnnrys

    View Slide

  6. View Slide

  7. Open Source is


    💜
    @glnnrys

    View Slide

  8. Vincent van Gogh
    “Great things are done by a series
    of small things brought together.”
    @glnnrys

    View Slide

  9. @glnnrys

    View Slide

  10. What React framework?
    @glnnrys

    View Slide

  11. What React framework?
    Next.js
    Remix
    CRA 🫡
    None 🫠
    @glnnrys

    View Slide

  12. What date library?
    @glnnrys

    View Slide

  13. What date library?
    moment
    dayjs
    date-fns
    luxon
    @glnnrys

    View Slide

  14. View Slide

  15. Making decisions can be
    hard and time consuming
    @glnnrys

    View Slide

  16. View Slide

  17. Just pick the next
    from top to bottom
    @glnnrys

    View Slide

  18. View Slide

  19. View Slide

  20. View Slide

  21. View Slide

  22. View Slide

  23. Analysis Paralysis

    View Slide

  24. Decision fatigue
    Decision

    Quality
    Decision

    Quantity

    View Slide

  25. The Paradox of Choice
    🤩
    Amount of choices
    🫠
    Sweet spot

    View Slide

  26. The Paradox of Choice
    Selecting speakers for the conference
    🤩
    Amount of proposals
    🫠
    Sweet spot
    1000
    30
    0

    View Slide

  27. 🤩
    Amount of proposals
    🫠
    Sweet spot
    0 40
    30
    The Paradox of Choice
    Selecting speakers for the conference

    View Slide

  28. 🤩
    Amount of proposals
    🫠
    Sweet spot
    0 90
    30
    The Paradox of Choice
    Selecting speakers for the conference

    View Slide

  29. 👩💻👨💻
    @glnnrys

    View Slide

  30. In any case ...
    @glnnrys

    View Slide

  31. @glnnrys
    🤓 👩💻 👷
    @glnnrys

    View Slide

  32. @glnnrys
    🤓 👩💻 👷


    🐒 👩🎤 🔮 🥑 🍌
    @glnnrys

    View Slide

  33. Architectural Decisions
    @glnnrys

    View Slide

  34. Complexity Speed API
    Size Bugs Docs
    Time Environment License

    View Slide

  35. Analyzing Complexity
    @glnnrys

    View Slide

  36. // $(el).toggleClass(className)


    function toggleClass(el, className) {


    if (el.classList) {


    el.classList.toggle(className);


    } else {


    var classes = el.className.split(' ');


    var existingIndex = classes.indexOf(className);




    if (existingIndex >= 0)


    classes.splice(existingIndex, 1);


    else


    classes.push(className);




    el.className = classes.join(' ');


    }


    }
    youmightnotneedjquery.com
    @glnnrys

    View Slide

  37. // $(el).toggleClass(className)


    function toggleClass(el, className) {


    if (el.classList) {


    el.classList.toggle(className);


    } else {


    var classes = el.className.split(' ');


    var existingIndex = classes.indexOf(className);




    if (existingIndex >= 0)


    classes.splice(existingIndex, 1);


    else


    classes.push(className);




    el.className = classes.join(' ');


    }


    }
    } else {


    var classes = el.className.split(' ');


    var existingIndex = classes.indexOf(className);




    if (existingIndex >= 0)


    classes.splice(existingIndex, 1);


    else


    classes.push(className);




    el.className = classes.join(' ');


    }


    @glnnrys

    View Slide

  38. // $(el).toggleClass(className)


    function toggleClass(el, className) {


    if (el.classList) {


    el.classList.toggle(className);


    } else {


    var classes = el.className.split(' ');


    var existingIndex = classes.indexOf(className);




    if (existingIndex >= 0)


    classes.splice(existingIndex, 1);


    else


    classes.push(className);




    el.className = classes.join(' ');


    }


    }
    } else {


    var classes = el.className.split(' ');


    var existingIndex = classes.indexOf(className);




    if (existingIndex >= 0)


    classes.splice(existingIndex, 1);


    else


    classes.push(className);




    el.className = classes.join(' ');


    }


    🧐
    @glnnrys

    View Slide

  39. @glnnrys

    View Slide

  40. element.classList.toggle(className);
    @glnnrys

    View Slide

  41. @glnnrys
    New libraries


    every day

    View Slide

  42. Use what
    works best for you
    @glnnrys

    View Slide

  43. Support 🤝 Contribution
    @glnnrys

    View Slide

  44. @glnnrys

    View Slide

  45. People love solving problems
    @glnnrys

    View Slide

  46. How are problems solved


    in web development?
    @glnnrys

    View Slide

  47. Is it over-engineered?

    View Slide

  48. Confidence & Trust 😌
    @glnnrys

    View Slide

  49. The node_modules folder
    doesn’t byte you 🤗
    @glnnrys

    View Slide

  50. Let others know about your
    problem, ideas &
    improvements
    @glnnrys

    View Slide

  51. Dealing with
    popularity
    @glnnrys

    View Slide

  52. @glnnrys

    View Slide

  53. ⭐ GitHub Stars


    💎 Value
    🛠 Active maintenance


    🍃 Active community


    💻 Platforms
    @glnnrys

    View Slide

  54. Writing your own code 🖋
    @glnnrys

    View Slide

  55. Rolling our own code allows us to
    Tailor code to our exact needs
    @glnnrys

    View Slide

  56. Rolling our own code gives us
    full control
    @glnnrys

    View Slide

  57. With full control
    it's our responsibility to maintain
    and keep track of our code
    @glnnrys

    View Slide

  58. View Slide

  59. Where to
    draw the line?
    @glnnrys

    View Slide

  60. Value 💎


    vs


    Constraints 🔒

    View Slide

  61. Identify the sweet spot
    @glnnrys
    🤩
    🫠

    View Slide

  62. Identify the sweet spot
    @glnnrys
    🤩
    🫠

    View Slide

  63. Trust your Gut 😌
    @glnnrys

    View Slide

  64. Understand the
    importance
    @glnnrys

    View Slide

  65. Understand the
    risks and drawbacks
    @glnnrys

    View Slide

  66. Harm reduction
    @glnnrys

    View Slide

  67. Try to get the best outcome
    but reduce potential risks
    @glnnrys

    View Slide

  68. Decisions
    @glnnrys

    View Slide

  69. Good decisions
    @glnnrys

    View Slide

  70. Good decisions


    Clean decisions
    @glnnrys

    View Slide

  71. Good decisions


    Clean decisions


    Right decisions
    @glnnrys

    View Slide

  72. Good decisions


    Clean decisions


    Right decisions


    Smart decisions
    @glnnrys

    View Slide

  73. Good decisions


    Clean decisions


    Right decisions


    Smart decisions


    Reasonable decisions
    @glnnrys

    View Slide

  74. More code often means
    more possibilities for bugs
    @glnnrys

    View Slide

  75. Take risks and
    keep moving forward
    @glnnrys

    View Slide

  76. Simplicity is key
    @glnnrys

    View Slide

  77. Don't let new things


    intimidate you
    @glnnrys

    View Slide

  78. Always write
    the best code possible
    @glnnrys

    View Slide

  79. “ ”
    Kent C. Dodds
    We should be mindful of the fact that we
    don't really know what requirements will
    be placed upon our code in the future.
    @glnnrys

    View Slide

  80. Thank you!


    Glenn Reyes · @glnnrys

    View Slide