In a January 4, 2002, InfoWorld interview, Java designer Joshua Bloch argued that good software design starts with clear, loosely coupled abstractions—and that public APIs should stay small because every feature can become a lasting commitment. His advice connects API design to reuse, maintenance, refactoring, software quality, and trust between components. It is a historical conversation, not a current Java specification.
Why did Joshua Bloch emphasize API design?
Bloch’s answer was that large systems become easier to build and maintain when they are divided into subsystems that are themselves well-designed, freestanding abstractions. The boundary matters: if one module can change without forcing changes throughout the rest of the system, maintenance becomes more manageable.
That kind of independence also makes a component more useful beyond the system for which it was first written. A component tightly coupled to one client’s assumptions is difficult to reuse elsewhere; a clean abstraction with fewer dependencies has a better chance of serving other clients.
How important is reuse—and why is it difficult?
Bloch called reuse extremely important but difficult to achieve. In his account, reuse does not emerge automatically from writing code once. Developers have to deliberately decompose systems into clean abstractions, then make those components independently debuggable and testable.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
#1 Best Overall
- API Design Patterns
- ABIS BOOK
- Manning Publications
He offered a personal example from his previous systems-building job: he said 75 percent of the code written for a given system was reusable in other systems. That is Bloch’s retrospective account of work at one job, not a measured industry-wide rate or a prediction for other projects.
Why keep a public API minimal?
A public API is a promise to its clients. Once people build against a feature, removing or changing it can break their software, so each addition can create obligations that persist long after the original design decision. Bloch’s concise rule was: “So, when in doubt, leave it out.”
Rank #2
This is not a case for omitting necessary capabilities. It is a reason to be deliberate: add a feature when it solves a real need and its long-term cost is understood, rather than including speculative options that expand the contract without clear value.
How do design and refactoring work together?
Bloch described design as iterative. Developers do not reliably discover the right API by thinking about it in isolation; implementing and using it reveals whether the abstraction is clear and whether the interface fits its clients. Refactoring then lets the design improve as that experience accumulates.
Recommended Free Tools
Rank #3
He put the point plainly: “Nobody gets it right the first time, even if you have years of experience.” In this view, changing an interface or its implementation in response to what use teaches is part of design, not evidence that design has failed. For a public API, however, improvements must account for clients who may already depend on its existing behavior.
What does it mean for software components to trust contracts?
A component relies on other objects to meet their contracts: the stated expectations about how they behave. Bloch’s point was that software can be designed around those expectations instead of treating every interaction as though no other component can be trusted.
He suggested assertions as a way to check assumptions during debugging. That is interview advice about development practice, not a complete modern policy for security, validation, or reliability. An assertion can help expose a violated assumption while debugging; the interview does not establish that assertions replace other safeguards.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Read the original conversation
Bill Venners interviewed Joshua Bloch for InfoWorld’s “Joshua Bloch: A conversation about design”, published January 4, 2002. The interview also discusses Bloch’s book Effective Java, which it describes as containing his programming guidelines; it does not identify a current edition.
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

