Sharing code between back-end servers running on the Java web stack and resource-constrained devices in the field. Not only for the purpose of running the same code at the same time, but also so you can easily port functionality back and forth between central servers and field devices. It reduces the cost of fixing design mistakes or just evolving your architecture.