Programmer Dilemmas: A Journey of Many Decisions