software differentiation