We analyze the motto: "efficiency = parallelism + communications" as an approach for developing parallel programs. Communications are used for deriving suitable program transformations via definition of "eureka" functions or synthesis of "annotations". We also introduce a strategy, called minimal extension strategy, for obtaining new auxiliary functions, and some preliminary ideas for a new theory of communications, which do not effect program correctness, but only program efficiency.