I'd add that it's important to know when you need to break out into internal APIs. It means nothing to do it just because you want to and think you'll get more out of it. Measure the benefit. There are many refactoring techniques to kill app bottlenecks well before it's time to create an internal API.