Yeah, exactly. But what does it mean if even seasoned developers rely on interfaces in all this experimental software staying fixed for all time? The article falls for this disconnect as well, with its great enumeration of the problems contrasting with the repeated references to interfaces as a solution. Interfaces are part of the <i>problem</i>. (Or more precisely, our propensity to freeze interfaces, and our reluctance to rethink interfaces at will.)<p>My favorite bit of the article is something I&#x27;ve been thinking about for years:<p><i>..paradoxically the cleaner and saner your interface the more likely it is to succeed and thus more likely to become constrained by its users, to solidify.</i><p>I&#x27;ve been idly dreaming of a future where we decouple modules not by their interfaces but by their behavior. The major failure mode of our age is premature freezing of interfaces, and it happens because it&#x27;s hard to judge how done the interface is from the outside. An interface that looks really clean can be exposed by a detailed look at the implementation that covers a corner case that hasn&#x27;t been addressed yet. I&#x27;m trying instead to think about the input space of a function. I&#x27;d like in future to be able to make guarantees like this:<p>&gt; The behavior of this function is fixed when argument <i>foo</i> is less than 5. However, for larger values we&#x27;re still nailing down some details.<p>The argument <i>foo</i> might shift from being the first to the third, or its type may change in some subtle way (that still preserves previous guarantees). So upgrading will often cause some pain. However, the upside is that the pain is bounded. You never end up in some 1% situation where upgrading your OS borks up your Rails app and takes days to fix, or breaks things in subtle ways that you don&#x27;t notice for months.<p>You know that the upgrade effort will be bounded because you know that as long as you pass in the right value into the right slot, and as long as it&#x27;s less than 5, behavior won&#x27;t change and all your tests will pass. That seems like it might be superior to an interface, even if it adds a little extra work up-front.<p>More details, in case you have any thoughts:
<a href="http:&#x2F;&#x2F;akkartik.name&#x2F;about" rel="nofollow">http:&#x2F;&#x2F;akkartik.name&#x2F;about</a>
<a href="http:&#x2F;&#x2F;akkartik.name&#x2F;post&#x2F;libraries2" rel="nofollow">http:&#x2F;&#x2F;akkartik.name&#x2F;post&#x2F;libraries2</a>