The fastest development for me has happened always when two things combine:

1) quiet period where I have the time to dig deep into new area on theoretical/play level - distributed systems, functional programming, etc.

2) serious real-world situation (e.g. Project) where I am given the space and freedom to experiment with the new skills. More often than not big part of the experiment has been failure, but always there would be significant advancement in my skills as well as valuable tech improvements for the business

My personal experience shows that 3mo is good duration for learn/apply cycle.

Looking at the teams I have managed, this type of situation has also benefitted my people, when I have been able to set it up like this.

Real world project without the free space is inevitably executed in "this is how we have always done it" manner. I have been able to sometimes secretly sneak in experiments, but thats extremely risky and not very professional.

Too much theory without doing something for real lacks the feedback loop, so quickly turns into pure waste.