Depends on what's on the engine.
Dirt/dust/mud bugs/etc the best I've used is ATV wash sold by liquid performance. Works excellent for dirt and mudbugs.
Grease/oil you'll want something a little stronger. Kerosene works well. Also B52, but it's strong stuff-don't leave it on for very long especially on bare aluminum. I use soem stuff at work that was supplied to us by some guy who jumped town, it doesn't have a name...it's yellow, looks and smells a little like pine-sol, but it works really good for degreasing mildly oily engines and doesn't hurt plastic, bare metals, or wiring. Ez-off will eat aluminum up and removes paint like nobody's business. Purple Power will too but nowhere near as fast as EZ-off will. I use ez-off on transmission cases that will get painted. It blackens the aluminum but removes ALL grease and paint.
Pressure washer is your friend. Stay away from the major ignition components. On a really nasty engine, I'll remove the ignitor/switchbox/power pack and some of the wiring to clean it. The Yamaha stuff (which is the only brand I'm familiar with) usually isn't that nasty, so a little ATV wash works on most of them. That said, I picked up a 15 hp 4 stroke tiller this past week that is COVERED with engine oil because the PO (I can think of more appropriate names but will keep 'em to myself) had it stored upside down in his shop. Cowling on the floor and foot sticking straight up in the air.
believe it or not, Dawn dish soap works wonders on oils, but doesn't cut into the really thick, tough grease very well.