Software engineering is far more difficult than you may expect. For instance, when it comes to developing a product and coding, there are many factors to take into consideration, not only the technical requirements but also the business requirements. In addition to this there are so many possible ways to develop one solution, there may be a better approach, a library that is not as feature rich as another but not as stable, so on and so forth... An engineer has to figure out what someone is doing on their phone, i.e., the state, to ensure that the user interface is nice, to test edge cases, and to think about the privacy of users, meet security requirements, amongst lots of other things.