Also, plain old data interfaces are very desirable. They decrease coupling. Get the data off the interface and restructure it (renaming, preprocessing...) in a suitable way before implementing the actual functionality. This decrease in coupling makes representation changes in the interface more practiceable.<p>Of course sometimes stateful (procedural) interfaces are a must, but it&#x27;s surprising how many painful OOP classes can be replaced with a &quot;const struct foo&quot; interface with a clear meaning to the data in it.