The invisible role-switching problem and Need-Driven Design

What is really challenging in software design?