Decomposing complex applications