It is a complex process that requires a lot of experience and time. Of course, along each step, various challenges can be encountered. First, game developers have to make the game “run” on the target platform. Sometimes, the original tools they use do not support the new platform, so the code must be rewritten in another language that is accepted by the platform.
The next step is to add proper graphics support, which involves extracting the graphics calls to a standard interface for all platforms. This is effectively seeing how the game performs and where it needs changing for the new platform. Once the new graphics settings are set, game developers need to work on the performance. There are various challenges in this step, such as CPU performance, shaders throughput, fill rate, etc.
After solving these issues, the controls need to be tweaked for the new platform, and the interface must be adapted to the size of the new screen. The resolution must also be changed, and the text on the screen must be checked to fit well. Each platform has its checklist of certification requirements that the game must comply with. These are just a few of the challenges that porting developers encounter.