I would call it the design.
I would describe the steps slightly differently.
Step 1: you are studying the functionality. If you have a project to build the software you first consider what the software should do, you gather requirements. These don't just include the functionality but also factors such as speed and reliability. We gather functional requirements and non-functional requirements.
Step 2: we design the implementation. Probably we have some important algorithms, but also we consider how to break the problem down into smaller pieces, and then need to consider how those pieces communicate. We design interfaces as well as implementation.
Step 3: we write the source code, we are implementing (and testing!).