Tune each SQL call. SQL being called from PL/SQL causes some additional overhead called a context switch. The SQL and result come from the SQL engine so PL/SQL has to request each row, or sets of row, from SQL. I have classes on SQL performance tuning, check my website for details.
Use the PL/SQL profiler to help identify long-running SQL. There are two different PL/SQL profilers now, the PL/SQL Profiler, introduced in Oracle8i and the Hierarchical Profiler, introduced in Oracle10g. Toad has a nice interface to the PL/SQL profiler.
1. Modular programming/sharing of code