A lot of developers seem to think the difference between a "free to play" game and a "premium" game is simply adding a bunch of timers or items for purchase. The reality is quite different. To create a sustainable free to play game, you need to create a game of infinite possibility.
The business model changes everything about the game. It's not just a matter of slapping on a few incidental purchases to a game. That doesn't work. It's not just a matter of restricting content behind timers. A good "free to play" game is a service.
In most games, you pay $ and you get X. It's a deal that a lot of people are used to, and people understand it well. Then there is a different model, where people pay $/month, and get X as an ongoing service. It's pretty well established, but one big tradeoff of subscriptions is that because you know you're signing up for an ongoing expense, there's a huge amount of overhead to make that decision. "Will I play this every month enough to justify the expense? Will I remember to cancel the subscription? Will I actually get value out of this?" It's a transaction people have a lot of experience with for very specific things (magazines, TV, etc.), but for something like a game where they don't know what they're getting, it's a really difficult "ask", because convincing the player that your game will have ongoing value is difficult. Most games don't have long-term lasting value.
If your game is based on microtransactions, everything changes. First, you need to provide something the players want. Second, you have to keep the game engaging over the very long term, so people keep playing it.
That last one is something a lot of folks gloss over. Your game needs to be not just expandable, but nearly infinitely expandable. It has to be expandable via more in-game content. Developers should have a huge number of ways to expand the in-game content. Not just along one axis, which can get "tired", but along many axes. New content that expands the number of features. New features, that enable new content.
Expandable as more people play the game. When a small number of people are playing, you need different ways of matching them up than when many people are playing. You don't need to build the latter at the start, but you need to be able to build it when it's necessary.
You don't need to build the whole game. You don't need to build in the expandability. But what you do need to do is create a core game mechanic that can expand, develop over time, and constantly surprise people with new stuff.
I know this seems sort of obvious, but the weird thing is that almost no one does it right. Take a platformer, for instance. Let's say Super Mario Bros. F2P Super Mario? Great - just sell more levels. But the problem is that eventually, folks master the mechanics, and the possibility space of the level design is exhausted. Then people get bored. This is where most F2P game design falls apart.
You don't just need one axis of content expansion. You need, over time, to be able to evolve in many ways. Maybe start by adding new levels. Then add a double jump. No - don't do that, because it will upset the design of all the current levels. But add a new building block for the levels that enhances all the existing mechanics. Add social speed runs, which enhances all the existing mechanics. Add the ability to comment on others' playthroughs. Some kinds of games can handle this kind of expansion gracefully, and others can't.
Start with a concept that is intended from the start to handle this kind of expansion. You don't have to build it. You just have to know that it's in the future if you're lucky enough to keep developing the game. Ignore this, and eventually your core concept hits a wall it can't recover from.