Recompiling dependent objects in Oracle
The trick is get the packages and dependent code recompiled in one go. If you are refreshing a development database with new data you will have an enormous list of invalid procedures. As well, with dependent code you find yourself recompiling over and over.  You  can use this command located in  $ORACLE_HOME/rdbms/admin/utlrcmp.sql:

BEGIN
 UTL_RECOMP.RECOMP_SERIAL(schema =&gt; ‘MY_SCHEMA_NAME’);
END;


(available from 9i but improved for 10g and 11)

If you have packages that are not valid and will not be valid, for whatever reason, you can use this package from Martin Mares which will recursively compile all invalid objects except the ones you specify.

As far as best practice goes I try to limit the dependency chain. It's always a toss up between "Don't repeat yourself" which encourages dependencies and having stand alone packages.  

My rule of thumb is that if the package/trigger/object interacts with another database try to reduce dependencies so if there is a issue you have less places to look for sources of the problem.