Do what works - improve if necessary
Based on the way you worked your question, here's what I'm assuming you mean by "hacker": the pragmatic type who doesn't spend too much effort too soon but knows what tradeoffs are being made and can make something more elegant if necessary. (As opposed to someone who's blindly copying and pasting and doesn't know why the code sucks.)
That approach is really the foundation of agile development. And I've seen a great example of that, which has helped me tremendously.
I watched my good friend, who is an excellent developer, create a product in a brand new niche which he guessed was about to explode in popularity. He built his product quick and dirty to grab market share. His mantra was "do the simplest thing that works," and initially, it didn't work that great. But it was better than nothing, which was his competition at the time, and hour by hour he was improving it, based not on his guesses but on actual user feedback.
I would have been paralyzed about launching his initial version because it wasn't awesome. But he wisely chose what was "good enough for now" and went with it. If the project had utterly failed to attract users, he wouldn't have wasted much effort.
As it turned out, it was very popular. He has invested hundreds of hours of effort, and has refactored several times in order to allow new features and make the code more maintainable. He has a solid architecture, and more important, a great product with TONS of users.
This is agile development, and it's what I learned from watching a "hacker" succeed. In a sense, it's the old lesson: "don't optimize prematurely." Whether for speed or for clean architecture, the time to optimize is when 1) you can see that you need to and 2) you've got real-world data to know what to fix. Until then, you're just guessing.