Level design principles

Level design principles are not rules, they are more like guidelines that will help a new designer in their process of designing.

Like any other art form, level design requires its own process of discovery through practice.

Guidance

The first thing a level must do in a game is introduce the mechanics of the game.

Some games use tutorial with explicit instructions. Others use visual cues to guide the player to discover the mechanics.

World 1-1 schematic
Image source: https://en.wikipedia.org/wiki/World_1-1

It is also important to intoduce the goal of the game.

The goal of each level should always be clear to the player.

In cases where the ultimate goal of the game may be mysterious, there must be something else compelling the player to move forward, such as a narrative or visual interest.

Obstacles and rewards

Once the mechanics and goals are established, obstacles and rewards are introduced to complicate the experience of the level.

Obstacles or challenges should be fun and engage the player to progress through the game.

Rewards should reinforce the goals of the game and lead the player towards mastery of mechanics.

sonic
Image source: https://en.wikipedia.org/wiki/Green_Hill_Zone

Perfect player principle

This principle states that there should in theory be a perfect player that can complete a level without any prior knowledge of the mechanics or design of the level.

N
Image source: https://www.quora.com/If-you-had-to-play-one-computer-game-for-an-hour-or-two-every-single-day-which-one-would-you-pick-and-why

Unique levels

The levels within a game should have unique qualities.

A good level could be described easily to any player of the game and they should know which level is being described.

milkman conspiracy
Image source: https://en.wikipedia.org/wiki/Milkman_Conspiracy

Pacing

A level should offer a series of challenges without ending too quickly or requiring arduous or repetitive tasks.

water temple
Image source: https://en.wikipedia.org/wiki/Water_Temple_(Ocarina_of_Time)