In the hard part of software you could easily chose to read the word “hard” as “sucky,” which makes it seem like a big whine on the topic of “polishing your work is hard and annoying,” but really, that’s unfair.
I think it’s probably better to read the word “hard” as “important” rather than “sucky”.
While you may be able to get someone to try your software on the basis of its core implementation or design, people keep using software because it’s reliable (i.e. “has tests”) understandable (i.e. “has documentation”) and is easy to operate (i.e. “has a user interface.")
Furthermore, doing the hard work of adding infrastructure to a project is what allows software to grow in awesome ways. When you do the hard work, you make it possible to:
- add functionality and utility without needing to rewrite large amounts of code.
- add options and globules to expose features and behaviors in response to users needs.
Basically infrastructure begets agility.