Choices

Players want to have lots of interesting choices on their turn, and feel like they're in control of what they're doing.

As a rule, a player should have ten different things they can do on their turn.

More is fine. Less is probably not. This is such an easy thing to do, so make sure you apply it to your games.

Particularly in the late game, Magic often lacked choices. They had few or no cards in hand, and almost half the cards they drew were useless land cards. However, in recent years, this is much less so. The designers now let players much more easily draw cards, and there are many cards which can return, or have ongoing effects.
In Radlands, each card can be "junked" — you discard it for free to get a small effect of some sort. So, each card has two ways to use it. Also, each player has three camp cards in play at the start, which each have an ability.

Always-available actions

There are things that players must be able to do in your game, to make it function. They must always be able to go somewhere. You can't have a state where they can't make any move. They also need access to the game's main currency, and the resources they have should always be spendable.

Don't try to make this work, by using the random components of your game. That's not reliable. Create actions that players can always take, regardless of the game state, that make the game function properly.

In my farming game, there's a space that any number of people can go to. It gives out a bundle of food, and other basic resources. This enables the player to do a wide variety of things on their next turn.
In my gangster game, I've just made sure that there are enough spaces to go to that it's impossible that they're all taken at once. Also, of the twenty locations, fifteen are random, but the other five are always the same. These locations contain everything that are important (or necessary) for the game to function, if the other fifteen cards are all similar, or you get a freak draw.
In a friend's Wild West game, you can pass your turn, and get two dollars, plus a tornado. The tornado is great here, as it resets a row of cards, which will give the player even more choices next turn.
In Radlands, you can always spend all your 3 water. You can always draw another card for 2 water, and you can use the Water Silo to save a water for a future turn.

Restrictions

There may be restrictions on how a player can use an action (e.g. a card, ability or object.) These may be costs, spatial arrangements, or other requirements.

The purpose you're using the action for can be a kind of a restriction too, if not all actions are useful.

Avoid putting more than one restriction on using something, or it will just be too hard to do anything. Trying to actually do something will be the game, rather than it being about the choice of what to do.

A friend's Wild West game had weapons. If they were untapped, you could use them to fight an outlaw, and then you tapped them. The game also had guns. These required that you used bullets, as well as being untapped. This was one restriction too many, and made the guns difficult to use, and feelbad. I suggested that guns don't tap, leaving only bullets as their restriction.
In my gangster game, there are locations you can go to, and they have costs. You want to go to a location that does something useful for you, and you also have to be able to afford the location's cost. However, you don't move around the board. You can just go anywhere. If you could only go to spaces you could move to, that would be a second restriction, which would be too many.

If you were making a game about fitting pieces onto a board, they could be all kinds of wacky shapes. However, if you decided you wanted players to be able to build upwards, allowing them to place pieces on top of lower pieces, you'd probably want to make the pieces simple rectangles.

Incentivise

If one or two restrictions are the fundamental walls of your game, that's fine. Beyond that, you should try to incentivise, rather than restrict. You'll get most of the same feeling, without taking away too much choice.

In my farming game, I wanted the terrain to matter, so I made the terrain different colours. There was one for each category of tokens, and you had to put the token on the matching terrain. This extra restriction made the game painfully difficult, so I went back to letting players put tokens anywhere, but gave a bonus if you put the token on the matching terrain.
In my gangster game, I realised that having to move adjacently was too restrictive. However, it was still interesting. So, I made some special player powers that give you a benefit whenever you move adjacently, and also made a few spaces that you can only move to from an adjacent space.

Lots of cards

I'm now of the opinion that cards shouldn't really be a resource, in games where cards are central. The resources should be the resource. Give the player multiple new cards, or a new hand, each turn, but don't give them enough resources to play them all. Alternatively, let them buy cards very cheaply with their resources. This hand of cards always provides choice.

Access

Look at your game's components. Look across the board, and at all the cards, tokens, tiles, and chits. How much of it can I interact with, this turn? This is what I call access.

This window of choice should include much of the game.

Access gives the player a feeling of control. The absence of access gives a feeling of powerlessness, or, at best, makes people feel like they're building a ship in a bottle.

In Machi Koro, players buy cards from ten piles. I like the game, and have tried out a few different combinations of cards. However, this game has very minimal replayability, as these ten piles are always the same.

In the "Harbor" expansion, the game shuffles all the piles of cards, and many more, into a giant deck, from which ten random cards are displayed. This destroyed the access, as I could no longer buy the cards I wanted. I had to just buy from the ten random cards. Much of the long-term strategy went out of the game.
In one of my prototypes, players could move one space per turn. However, this gave them only a few possible spaces they could go to. By simply allowing players to move up to two spaces per turn, they could reach far more spaces.
Race for the Galaxy is an excellent game. In the game, you draw lots of cards, but you also discard cards as the resource to pay for other cards. This lets you see many of the deck's cards, and the game has very high access for a card game.

If you're a beginner designer, worker placement is an excellent foundation for a game. In a worker placement game, there's a board of spaces. On each player's turn, they put one of their workers on an unoccupied space, and do what it says. Typically, once players run out of workers, they're all returned, and a new round begins.

Worker placement has very high access, as you can do almost anything you like. It also comes with a reasonable level of player interaction, as players can't take a space that another player has taken.