The symptom of a timeout when retrieving a pooled connection can be due to various causes. Assuming the application does properly close/dispose connections (e.g. with a using block in C# or VB.NET), the symptom can be caused long-running queries (extended blocking or query/index tuning needed), undersized database tier, undersized, application tier, or slowness in retrieving large result sets.
Examine activity during the problem timeframe to determine next steps to resolve.