The argument in favour of this advice only checks out when a feature branch is kept out of sync with the main branch. In my experience, the process that works the best is to rebase the feature branch on top of the main every time there is a divergence, resolving all the conflicts right then and there.
> Use a monorepo
Definitely - if you have a monolithic implementation that is deployed as a single unit. Otherwise, monorepos start getting in your way pretty soon.
> Use feature flags
There are pros and cons for this. In my experience, feature flags work best in the front-end, where you want to hide features from certain users at certain times.
> Deploy weekly
The deployment strategy depends primarily of the type of the product you're delivering. For a standard, vanilla SaaS, the continuous deployment is the most efficient.