Not semi serious. Absolutely serious. As soon as you start writing a program that takes more than one person to complete, or where you're writing not for you to be the one and only user, people problems come in. And I'm just talking about communicating intent and design among people. The bigger the project, the more that's a problem.
Then there's the unrelated problem of dealing with other peoples' personalities. The bigger the project, the more different people, and the more this aspect is a problem as well.
I remember once on a complex project a senior manager going "That may be what I asked for, but its not what I want" and in a startup I joined where the CEO was adamant that any feature he could think of could be implemented in less than 48 hours - and this was a video technology/devices startup not a web app!
I've made horrific technical mistakes at various points in my career - but at least it is possible to learn straightforward lessons from those. Learning about people - now that's a challenge!
I find it quite interesting that a natural inclination of some people is to believe that if it was simple for someone to think, in some way, of the feature they want, that it should also be simple to implement. Have seen this a lot.
It needs to be built into every phase of computing, starting with the CPU micro-code, going through network protocols, up to the topmost JS framework layer.
Screw up one piece and you may end up with a major vulnerability.
Many software project owners avoid it due to complexity. To some extent, even academia sometimes eschews it.
Making your code so simple (and well documented!) that it can be understood by programmers with much less experience than you, while not compromising speed or functionality.
“Everything should be made as simple as possible, but no simpler.”
This is the one I strive for. Making a challenging thing self-evident and appear like it wasn't that much work, even when it was an explosion of code later distilled.
1) Keeping up with an ever growing and changing tech environment.
2) Dreading visiting my parents, because you always hear:'Oh good, come here and look at this problem I have'. My wife even volunteers me to fix other peoples stuff, which is real annoying.
I'm like you in that I enjoy just making things work, even when they're trivial. I particularly like doing it for other individuals.
On the other hand, I also enjoy harder research problems. Obsessing and learning new things quickly is probably the biggest joy I get out of work.
What I hate is the middle ground. I hate solving trivial problems, but in a high-pressure environment, for people I'm only circumstantially committed to.
Determining the next Busy Beaver number. Every time you determine one, a harder problem takes its place. And eventually the problem becomes unsolvable, as only finitely many values can be determined.
More seriously, robustness/security. Everything we “engineer” is incredibly fragile. Nothing is built and able to be “done” if it needs continuous security maintenance for its entire life.
The hardest thing is to accept that you don't really need CS as a software developer. Even programming tasks - digging into legacy code, implementing features etc. - requires no CS knowledge, and programming is just one thing sw devs do.
Other words: there's no CS topic which helps you during an estimation meeting.
I don't mean to sound flippant but there actually seems to be lots of different hard problems in computer science, or computing (to be honest I'm not sure which we're talking about here) but all of the ones that I know of are hard due to complexity. Our science is good at reductionism, finding fundamentals, but when it comes to complex systems it simply informs our inadequate simulations. So I think the hardest problems in computer science will exist where we try and apply it in the real world to complex machines. In computing there are many hard things to make, databases, operating systems, programming languages, the list goes on - and they are hard because they are big and complicated and so making them is hard because to some extent it doesn't matter how much resource or intelligence you have because the problems that arise in complex systems start to get chaotic and intractable.
"There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors."