4. Future thinking is future trashing
Solve the problem at hand. Don't think "We can do this in a more general way and, in the future, it will be easier to add more". Adding more will never come and you'll have to deal with a pile of trash.
Solve one problem, then solve the next. A patter of problem will emerge -- or not.
(Addendum to the "integrated documentation": The same can be said to languages with integrated testing frameworks: They come with good tests.)
functional.cafe is an instance for people interested in functional programming and languages.