3 major keys for effective custom software