What is one of the toughest things that must be done?
Software developers create and maintain software systems. It sounds easy, but often times I've encountered that the toughest aspect of being a software developer is coping with complexity and ambiguity. Since complexity adds value in software via the addition of new features/functionality, this means that software systems inevitability get larger/more complex over time.
In addition, most software systems are developed with specific applications in mind for a variety of industries. So you often have to rely on the expertise of outside stakeholders (ie. your prospective users), to come up with an adequate list of requirements describing what the software should do.
This is where ambiguity creeps in, because more often than not users/stakeholders are not sure of what they want to begin with. This leaves an individual developer/team with the task of taking a rather vague mission statement and extrapolating a fully functional software system based off of it.
In my opinion, the challenge in software development is managing complexity and ambiguity, while at the same time developing a quality product/user experience on a tight time schedule.