I'm building a 2D Platformer, but really any general advice will do.
It actually matters. the concept of 'enemy' or 'adversity' in a game is intimately tied to the gameplay and objectives.
Since you've mentioned enemies, I will refrain from covering other gameplay ingredients (obstacles such as spikes, etc.)
In a classic platformer where the player has a set number of lives and possible sudden death situations related to the level (holes), enemies come in various shapes and forms, but they almost always serve one of these objectives:
- Push the player (hopefully towards a sudden death or another enemy)
- Hit the player (either through contact, or with the use of projectiles, most platformers give them the advantage in close contact unless attacked from a specific angle (upwards in mario, some back attacks in Rogue Legacy, etc.)
- Manipulate the field (change the scenery on the fly to prevent the player from progressing smoothly).
With regards to Sunandshadow's "movement", note the progression of movement patterns. In Mario 1 for example, some monsters will not fall of a ledge, whereas others will. Also, there is a progression through movement to increase difficulty (a flying turtle is harder to dodge due to the more complex movement pattern)
A more general point can be made about AI movement in many different types of games. In Raptor: Call of the shadows, most enemy ships come vertically, while a few (mainly ships) come horizontally. One particularly annoying enemy works in pairs to make twin diagonal attacks. Though it is particularly easy to kill, it makes it unpredictable and keeps the game engaging. Breaking non-existent rules that all other enemies seem to be observing is often a means to make an enemy memorable.
If, for example, your game engine allows for double-jumping enemies, but that, as a general rule of thumb, none of your enemies use it, tossing an enemy that has the option of double jumping can emulate the feeling of discovery and helm with pacing.