Infrastructure code refers to software layers with APIs that are used by multiple users and teams for different purposes. It supports principles like DRY and helps manage shared resources. Traditionally, infrastructure code is never truly complete, becomes too large to manage effectively, and creates bottlenecks. However, taking an agile approach by having multiple feature teams own infrastructure and developing it iteratively reduces bottlenecks and risk while increasing flexibility and business understanding within teams. This requires effort to implement cross-team communication but yields business benefits.