That's strange.
For me, considering everything as a an API is one of the major forces which powers my agile development. Every class I create is designed to satisfy a particular need, driven by
unit tests for its API and operation, with other code in the system acting as clients of its API.
This is agile in the sense that the code base consists of a collection of minimal, expressive, reliable pieces, each with clear responsibilities, which can be assembled and/or refactored in any way appropriate to the evolving needs of the business.
In the great majority of cases, the API provided by individual classes is not propagated to the exterior of an application, but it is there nonetheless. These internal APIs are continually policed by a growing body of developer tests and unit tests to make sure that they are always ready (and trustable) for reuse.
To me this approach also seems "lean" in the sense that no code is written unless it is justified by a failing test (which may be a recently added test for a missing feature), and in the way that duplication is mercilessly refactored away to eliminate waste of code and developer effort.
Did Bloch approach this from a different direction?