While bowlturner's answer provides a list of processes to work with, I think that, since this is about worldbuilding, there should be some technique in applying all of these possibilities in a practical way.
Practical means, since we're not talking about software explicitly here, possible to do with pen & paper and fit it all in your head.
Keep in mind, the following technique is intended to give a realistic result, but it doesn't necessarily depend on absolute realism or application of mainstream theory in every step
Elevation
Starting out with a barren rocky planet, we can apply some elevation to reduce how smooth it is, which can help later. This can be done randomly - a nice noise algorithm can help of course, but since we're on paper here, we can just divide the world into a few large sections and roll dice for the elevation at each intersection.
To do this properly, we need a range of elevations that make sense. We need a mean elevation and a higher bound. We can't define the lowest elevation as sea-level since we have no sea yet. Since Mars is considered to be close enough to a young Earth, we can use its elevations at this point since there's less corrosion there (which gives us room to apply our own corrosion later).
The highest and lowest points on Mars are 30km apart, the highest mountain is 22km and the mean elevation (datum surface) is at around 8km. Apply any elevation at the intersections within these bounds and adjust until you have a proper mean elevation. Then subdivide the grid and perform the process again at all new intersections. This will give a very artificial look to it, so just merge and divide peaks and valleys until it looks more reasonable.
Now is the time to place craters and stuff if you have to - make sure they're big impact craters since smaller ones will erode away anyway.Decide whether to apply the surface features due to elevation over or under the craters (did the impact happen after a mountain was formed?) Craters should be large and cover a 2 digit percentage of the surface. They should also not be too deep, at most a tenth of the elevation range (in this case 3km, but less is better).
If you don't want oceans in the world, you can pretty much stop here. If you want earth-like, it's time to break it up. This will give you continents.
Seas & Continents
Create fault lines around the caps and across the entire surface, more if you want lots of continents, less if you want less of them. Then, recede the surface from the fault lines - the further away land is from the faults, the larger the oceans and the deeper they will be. Feel free to reduce dry land to 30% of the surface or less. All of this doesn't need to be done with detail, just roughly.
After you're done getting continents, create more fault lines all over the place. Don't recede them - these are your tectonic plates. If you're unsure about how they should look, here's a pic. From the picture it's obvious the plates neither coincide exactly with continents nor are they completely random.
Volcanoes
Now randomly place volcanoes - all over the place. The previous grid approach can work. The number of volcanoes throughout history is probably too high to work with, but it seems that today there are about 1500 potentially active ones. About 15 volcanoes should be enough because, as you can see here, they're pretty well clustered along the tectonic plate fault lines. After randomly placing them, bias them heavily towards those lines. Those that are very close should be multiplied to cover large lines along the faults. There should still be a few left far from those lines however. If they are placed on dry land, they create volcanic mountains, if they're close to land but not on it, you get an island - if they're far from land, in the ocean, you get an underwater volcano.
After noting the spots, their scale needs to be decided. There's the VEI scale for that. The scale goes from zero to 8, where zero is relatively inert and 8 is apocalyptic.
We need to make sure we've got the volcano's surroundings covered as well. The tephra would be ejected into the atmosphere and would eventually be deposited on the ground. There's also lava covering the surroundings. How far would these go? We can divide the total volume of tephra (find it out by the scale of each volcano, from the VEI) by a thickness and get an area of settled tephra for that thickness. Apply it to the surrounding area. Wind and weather would of course affect things, but we can be freeform about this since simulating weather for each eruption etc. will quickly get too tiresome for this. The magma bubbling out based on index can be seen here. You can assume that all those cubic meters turn into a large mountain. But how tall and wide does it get? We can use the right circular cone formula and solve for either height or radius to get a result - fortunately, google has us covered - search for "cone volume" and it should give you a calculator to work with, along with the formula if you need it.
Obviously this is hard to do for 1.5k volcanoes, so just do some quick calculations for those that are solitary and then pick some points along the volcano lines, calculate something for those and interpolate the rest of the volcanos (so that they are larger when closer to large ones and they get smaller as they get near the small ones). If you need a thickness for the line, use the average volcano radius for that - you can also just assume the tephra is distributed in a circle and take that radius for the tephra circle line. Fuzzy it up a bit for "realism".
An alternative would be to distribute the sizes based on frequencies, that you can derive from a chart like this.
Canyons, Mountain Ranges, Island Series
This is where our plates start to matter the most. Canyons and mountain ranges are easy. Look at an example - here's a rough map of mountain ranges. It's obvious there is a fault-line relationship. Since both canyons and mountain ranges are results of plate interactions, we need to shake them to get some of these made. An easy way is to place random vectors on each tectonic plate - for each plate, make an arrow of a length and direction. They should start roughly from the center of each plate. To get the horizontal and vertical components and make our life easier, use a calculator or more easily, just draw a rectangle aligned to the grid for which the vector is its diagonal - the left and right sides are your vertical component and the up and down sides are your horizontal.
Now look at where all the new arrows are pointing. If two plates are pointing to each other, make it a mountain range if they meet on land or a series of islands (can be underwater islands) if they meet at sea. If they're pointing away from each other, that's a canyon.
We need to know how tall these ranges are going to be and how deep the canyones are going to be. There's two quick approaches to this - use the same range of elevations from above, from Mars (since we're going to erode mountains to 2/3rds to 1/2 later, don't use Earth ranges - highest point should be ~20km and lowest trench underwater should be ~5 km below sea level - canyons should go at most 1.5km below sea level) or move around the plates multiple times (like 3-5 times) and count collisions and retractions for each edge within the total number of movements; divide the total elevation with the number of iterations to know how much difference each ones makes and then do a simple addition to make out their depths and heights.
All of these collisions are earthquakes - like volcanoes, if you want a rough estimate of how powerful they can be and how often they can happen (for more detail) take a look at this.
What about erosion?
Seems to be planned for later, so I'm stopping here.