A software developer deals with unique situations almost every day.
Every project, every bug fix, every issue has its own unique challenges and one of a kind circumstances.
Even if the functionality has been built before in other systems or is available on other pieces of software, implementing it on a specific system or integrating it with existing code has its own set of challenges. A developer really does work on “projects” in the sense that they work on unique endeavors that have some degree of uncertainty and risk of failure.
As far as the other side of the formal definition of a project, having a defined start and end date, that’s often a matter of controlling scope creep or change requests
Because developers are working on projects there is no single body of knowledge they can master to have answers to questions right off the bat.
When you ask a doctor about a pain in your side, there is a well documented set of potential answers and a huge body of research on the most probable answer based on other data points/symptoms reported. They can usually give you an answer off the cuff. And if not, there are prescribed recommend tests to further find the answer. This isn’t the case with a software developer.
A software developer is not a doctor. No two bodies of code are the same.
Next time you ask a developer for an answer or an estimate, don’t surprised if they need time to come up with the answer. Or, if the answer they give is inaccurate or if the estimate is off.
The same is true of designers and creative knowledge workers.