Mostly I can't resist and I spend a lot of time planing and designing
before I code. Even the most basic tasks....I always try to make
certain code VERY SIMPLE, design everything very elegantly and always
to leave space for flexible changes later on. I think too much about
what else could happen.
There's nothing wrong with planning and designing. On some projects, such as guidance systems or certain kinds of control systems, you have to provide A LOT of justification for any change you want to make, and having a very clear understanding of exactly what you're going to do and exactly what risks are involved is essential.
However, it's important to get things done. I'm not talking about slapping something quick and dirty together (although there's a time for that, too), but just being pragmatic and knowing that minimizing cost and maximizing value to your customer is far more important than maximizing elegance. Sometimes you hear the expression done is better than perfect -- it means that it's often better to get a project to a useable state and move on to more important things than to make your code a work of art. Along the same lines: don't let perfect be the enemy of good.
Taking that a step further, when you're working under contract, if you spend too much time gilding the lily you risk being accused of "fraud, waste, and abuse." If a contract requires you to provide a working solution that runs in some specified amount of time, and you not only meet that goal but spend an extra three weeks making the system run ten times faster than is required, your customer may not only be unhappy but may refuse to pay for the extra time you spent making the project even better than they asked for.
The point here is that you'll probably be able to work in any industry, but to be successful you're going to have to learn to set aside some of your preference for perfection. That's okay -- it's part of what you'll learn as you gain experience. Try to find an experienced programmer who can help you learn how to balance good design with expedience, pragmatism, and speedy results.