One of the most powerful tools speedrunners have to save time is Skips. Games are usually designed where goals are supposed to be completed in a certain order, a skip is where you complete later goals without completing the prerequisite ones. This can mean completing story flags out of order, or simply going to an area before it’s supposed to be accessible. The thing that makes such skips possible is usually level design in the shape of a horseshoe, where the start and the end are close to each other in physical space, but are separated by a wall inbetween. The Valve Developer Wiki helpfully has some examples of this, which they call Loops and Bounces. Hub areas that unlock into more areas also tend to facilitate skips, if you can find a way to get past the gates blocking you.
John Romero, one of the level designers of Doom, remarked on the Horseshoe level design in the Hangar map in this lets play, as well as some of the benefits of it. You get to see where you’re going, you’re not traveling in a literal straight line, even if you only have one way to go, and you can cut across the horseshoe to the end.
Getting Over It with Bennett Foddy is designed as a series of horseshoes laid over each other, which sometimes makes skips possible, but more frequently is used to dump the player back into earlier areas. The whole map looks like a serpentine pattern, crossing back and forth over itself. Many areas in Super Mario Odyssey are structured similarly, letting you get to later parts of the level if you can perform the advanced jumping tricks. Even ancient games like Castlevania have skips based on connecting the ends of a horseshoe, using the small boost they get from taking damage to climb up and over ledges they can’t quite reach otherwise.
The most practical form of designing for speedrunners that you can do as a developer is simply to make horseshoes in your level design all over the place, and leave it up to them to find a way to connect the ends. Incidentally, this happens to be good level design practice in general, as it gives players sight of the areas they’ll go to in the future (and thus clear eyes on their goal), and frequently gives them more routes through the level.
Speedrunning is fundamentally a big optimization puzzle, similar to the traveling salesman problem. Speedrunners tend to enjoy games that are difficult to route, where they have freedom to choose to pursue a lot of different goals, that each have an effect on completing their other goals. Metroidvanias are popular among speedrunners for this reason, because they typically afford a lot of freedom in which order bosses can be tackled, and powerups can be collected. Those powerups frequently open new routes around the map, or make traversal faster relative to certain geographic features present on some routes. These types of optimization problems can be quantified in how complex they are, through their complexity class, or Big O notation.
Making a game difficult to optimize is difficult in-of itself, but some easy steps are to have multiple active goals at once, to open and close routes relative to certain events, and to give the player multiple routes across the map at any given time, as well as limit teleporters to locations that are out of the way, and avoid central hub locations that are connected to all the other objectives.
Having alternative or optional objectives is also helpful for speedrunners, because they frequently incorporate these into alternative categories (alternative speedrun rulesets whose runs are compared against each other, instead of the general crowd). The most common of these is 100% or all bosses. As skips are found for intended goals, speedrunners make categories for avoiding the use of major glitches, and completing some of the intended goals. More whimsical categories sometimes get introduced as well, such as collecting all the items, or playing with a restriction, such as no jumps, or the fewest powerups possible.
While it might be tempting to leave bugs in, in order to entice speedrunners, or to patch bugs out in the name of releasing a polished product, the real consideration should be: Will a casual player run into this bug by accident? And does this bug create new interesting choices with regards to saving time, or playing the game? For most bugs, the answer is no, but sometimes the answer is yes. A common policy is to leave in any bugs that affect the speedrun after the game is released, unless they’re easily triggered showstopper bugs, such as a crash, or softlock. If the QA team can’t catch it, most players probably won’t either. Rather than blindly sticking to the value that all bugs are bad bugs, it can be helpful to consider more abstractly what creates value for the customer.
In some ways, the way the game is coded or designed can influence what tricks are possible in a game. A lot of glitches in older games involved memory manipulation and corruption that isn’t really possible in modern games, largely because modern engines and modern languages have a level of type safety and memory safety that games from the 90s didn’t. Programmers working in assembly or C frequently made mistakes with pointers, arrays, or structs. They would transform data using a process meant for a different set of data, or jump to the wrong location in memory. This is what made so many glitches possible in pokemon, ocarina of time, and other games from that time period.
Beyond just coding conventions, glitches or exploits are made possible by simply making detailed unique mechanics that had interactions with a number of other elements, which is good game design. Good games tend to also be good speedgames, with the exception of autoscrollers, and beat em ups, because those tend not to allow for much routing freedom, and playing beat em ups for speed tends to deemphasize what makes the combat in beat em ups interesting. When a mechanic is designed to accomplish many different purposes, interact with many other elements, and modulate its output based on the input, it’s almost inevitable that some unintended outcomes will occur. The iceless skip in Megaman X isn’t some weird quirk of the code, it’s just the natural result of giving the player the freedom to jump off walls and near perfect air control.
A general quality of life feature for speedrunners in any game is having a good in-game timer. A good in-game timer will not count loading screens, and sometimes pause time or character creation, but will count every other part of gameplay. Good in-game timers avoid the need for speedrunners to manually remove load times in their video software, or with complicated timer splitting programs that need to be developed per-game. Another quality of life feature is a speedrunner mode where the RNG is deterministic, or where you can input an RNG seed to always get consistent results. Making sure that players can cleanly wipe their save and start from complete scratch is also important.
Building a game that accommodates or even encourages speedrunners is not usually a development goal for most games, but for the few projects that aim to entice speedrunners it can be helpful to know what actually makes a speedgame more interesting instead of assuming that speedrunners want something like a racing game with a single path forward, and you happen to move at a fast unbroken pace. Most games deliberately oriented around speedrunning, such as Speedrunners or SEUM: Speedrunners from Hell, tend not to actually be very popular speedgames, because they don’t really consider what speedrunners enjoy about speedrunning various games, instead building for an aesthetic of speed. It’s more important to build a good game than a good speedgame.
It’s also nice to do the bare minimum to accommodate anyone choosing to speedrun (timer without loads/character creation, good save file management, not actively patching out speed tech). For any game, it’s helpful to avoid actively burning your players. It’s up to the player to decide how they want to play your game, whether it be pacifist, speedrun, or modding. Intentionally snubbing players who play a certain way may not impact your overall sales numbers, but it’s kind of a dick move and many games get a second life from the speedrun community.