Richard, I'm 100% agree with you. Reusable components do help with maintainability, readability, testing, cost. And all these things ultimately save development effort and time.
Like you, I also firmly believe that you can't make the right abstraction on the first try. A good design emerges from lots and lots of refactoring. Moreover, a good developer emerges from lots and lots of refactoring attempts.
And yes, the first attempt to write reusable code, (or broadly attempt to make something new) will lead to an increase in development time.
But with time and practice extracting reusable logic will lead to new skills and power. And there is no doubt that it will lead to faster development.
The core of the article: "by spending a bit extra time today, you save lots of time in the future". By refactoring, extracting reusable logic, writing a test, you spend extra time now; but it will ultimately save you more time in the future.