I agree with Mike's point. Given the code structure as it stands we should be doing a full build before checking changes is. This doesn't prevent any kind of profile being created for intermediate builds but on check in we need to ensure that everything works. You will of course say "but we don't do that sometimes" and I agree however the point is that we should do it.
Now, could we do things differently? Firstly is there a way of getting maven to build a module and all the modules that depend on it (either directly or transitively)? If not can we generate build files for another system that will do incremental builds (I remember that we used to have an incremental builder at some point in the past but I don't know how good it was) Alternatively we have to take a manual approach. I see the code separated into a core and the extensions that the core supports. We could make some rules/profiles for the types of build you need to do depending on which files you change. For example, core change = build all while extension change = build the extension and its tests and samples. Alternatively, rely more heavily on the contract between core and extensions so that features can be built independently. None of this says anything about how the code is released b.t.w. That is a separate question. Simon