Essential Skills for the Agile Developer: A Guide to Better Programming and Design