This is my workflow:
1. Put crystals and decoupling caps near their pins.
2. Next, before doing any hand routing I let Eagle auto route a bunch of times from scratch and I move the parts around until Eagle starts doing a pretty good job.
Move the chips around to both minimize overall trace length
Look for places in the board that have dense routes and sparse routes and try to move the chips around to even it out (without increasing overall trace length).
3. Use net classes for power and ground
4. Route the "trunk" of power and ground yourself, and if you are using SMT you will have to hand route any fat net classes to the tiny SMT pins.
5. Now start doing Eagle routing.
Use the eyeball tool to look for traces that go the long way around, called "spaghetti traces". Often you'll find that it can't go the short way because 2 chips are a little too close together. Widen these a bit and reroute
Shift stuff around until you get 99 to 100% routed.
6. Now optimize. Eagle is terrible at final optimization.
In fact, you'll find places where a trace goes thru a via and then right back up through another via! Clearly there used to be another trace that got optimized away.
I tend to hand optimize to try to minimize vias since that is often where PCBs have issues. But generally very few boards fail so it is mostly a look thing.
Try to reroute any spaghetti traces more directly. You'll find as you do this that it actually creates more space making subsequent rerouting easier. Ultimately you can remove LOTS of vias, but the more you do the more time you are wasting :-), esp if you then realize that you want to change the board!
Make sure that you do the DRC so ensure that your hand routes are within tolerances.
7. If you have any open spaces under chips, put a big metal region there extending beyond the edges of the chip for better heat dissipation.
-- Lightuino LED driver board (Arduino clone, 16 500mA sources, 70 constant current sinks).