What many people enamored with the idea of agile fail to realize is where the limits are. Agile is efficient when the cost of making a change is lower than the cost of an iteration. In other words, your iterations have to be profitable (at least in aggregate.).
Deploying software to a server costs almost nothing, so you can iterate every five minutes and make money. Except when you make a mistake and deploy something broken, which can cost you in damaged customer reputation. In many cases these are costs that can be absorbed, but fail too often and the product is doomed.
Agile works by holding time and effort constant, but letting scope vary. That means using agile techniques to handle hardware projects where scope can't vary (like deploying routers to remote sites) can fail much more easily. If any component is delayed, the whole product is delayed, and other expenses rise: rescheduling installers often has a cascading effect on the rest of the project.