  Decision-making is a key software engineering skill. Developers constantly
make choices throughout the software development process, from requirements to
implementation. While prior work has studied developer decision-making, the
choices made while choosing what solution to write in code remain understudied.
In this mixed-methods study, we examine the phenomenon where developers select
one specific way to implement a behavior in code, given many potential
alternatives. We call these decisions implementation design decisions. Our
mixed-methods study includes 46 survey responses and 14 semi-structured
interviews with professional developers about their decision types,
considerations, processes, and expertise for implementation design decisions.
We find that implementation design decisions, rather than being a natural
outcome from higher levels of design, require constant monitoring of higher
level design choices, such as requirements and architecture. We also show that
developers have a consistent general structure to their implementation
decision-making process, but no single process is exactly the same. We discuss
the implications of our findings on research, education, and practice,
including insights on teaching developers how to make implementation design
decisions.
