Netflix/denominator — pull request #196 by adriancole (2013-07-02 23:31:10+00:00)
Title: No guava

relating to https://groups.google.com/forum/#!topic/denominator-dev/WrGkuZEMikw

This pull request breaks compatibility relating to interfaces that expose guava (ex. `Optional` to `nullable X`, and from `Multimap` to `Map>`). There are two major reasons to permit this:

* Denominator can be deployed as a part of a parent classloader where children use guava. For example, being a part of Netflix platform code, but not being pinned to guava, implies less conflicts.
* When we don't use guava-specific types, our model serializes properly by default. Ex. `Optional` and `Multimap` don't serialize by default in gson, yaml, or jackson. Moving off these types makes serialization a lot easier.

Both of these issues relate directly to more adoption of Denominator in Netflix. For example, we'd like to reuse denominator for registration and deregistration of EC2 instances to route53. This implies packaging denominator into the default classpath of our platform. "Denominatrix" is frequently complicated only because denominator uses Multimaps and Optional fields. The additional type-conversion is an unnecessary pain to maintain.

If guava significantly reduced our code complexity, or the structures we used were unmappable without it, I'd suggest we retain it. As you can see from this pull request, at least in core, the codebase is actually smaller and not significantly more or less complex.