The Value of Building From Scratch
Ever since reading Dan Abramov's "RSC From Scratch," I have been inspired by the idea of building things from scratch to understand them deeply. And I realized this wasn't exactly news to me, either. In high school, I learned about computers by building them (although not technically from scratch, but rather by assembling components). When I started programming, a database (MySQL) and a programming language (PHP) were the only components I used for building websites and applications. Only later did I discover the value that further layers of abstractions bring by first adapting Zend Framework for PHP (which was more library than framework) and later discovering the magic of Ruby on Rails. With Ruby on Rails, I was even learning the framework before (or rather, in parallel to) the language itself.
Don't get me wrong, I still strongly believe in building on top of established best practices by adopting libraries and frameworks. One of the main success factors of the JavaScript ecosystem is the proliferation of its module system, which has made it very easy to incorporate and build upon capabilities built elsewhere. And even though the whole concept of building upon "dependencies" comes with its own challenges, I recognize that the opposite end of the spectrum, building everything yourself (also referred to as NIH - not invented here syndrome), arguably leads to worse results.
As is often the case, there is probably a healthy middle ground. Relying on a core set of well-established dependencies while not letting the number of dependencies get out of hand (looking at you, is-odd) is a solid basis. This should be coupled with a truly deep understanding of how those core dependencies work. And sometimes, the best way to achieve this is to just rebuild them from scratch.