At John’s blog The Endevour, read this great analogy. It struck a chord. I am an engineering person at heart and did software as an hobby, but now working on creating engineering software that other engineers use, I know for real what he is talking about.
One of the differences between amateur and professional software development is whether you’re writing software for yourself or for someone else. It’s like the difference between keeping a journal and being a journalist.
People who have only written software for their own use have no idea how much work goes into writing software for others. You have to imagine a thousand things a user might do that you would never do. You have to decide which of these things you will accommodate, and which you will disallow. And when you decide to disallow an action, you have to decide how to do so while causing minimal irritation to the user.
If you develop software and are into engineering, I strongly recommend John’s blog.