Great talk I wish I knew this at the start of my Android journey It seems like a lot of android architecture is totally cargo-culted In fact most of modern development is based on hype and cargo-culting and reinterpreting vague definitions into already used practices
Good presentation. I've not found overuse of interfaces in the wild but I find lack of interfaces of important classes all the time. Android has many examples and there are often times I find abstract classes at the top instead of a badly needed interface. As you indicate, checking types and then reacting to the type, instanceof or "is", indicates a missing abstraction and the code in the switch/when/if-else belongs in the objects as virtual functions. My code sometimes contains a when with "is" branching, and every time I see it I cringe and think it needs to be redesigned (when I have time, that never comes). Seeing a large when statement (or if/else chain) reminds me of coding UI in C long ago (Windows, OS/2, etc). Big switch statements whose cases were message types. Sealed classes are often used in a similar manner and this indicates abstractions leaking into other code. As you point out, interfaces are a must for dependency inversion, but they also hide implementation details and reduce dependencies. Dependency management should be a top priority in design, but is often overlooked. I've yet to see code and thought, "Oh there are too many interfaces and that is causing issue X". An interface keeps doors open, where as concrete/abstract classes immediately close some doors which the designer many have not even considered. Thanks for the presentation (and Simple Stack for Compose)