So many answers already. Here's my take. I have a decent sized graveyard of one-day projects, half dozen serious attempts and one published project with some 10k users. In line with some other suggestions in this thread, the published project scratches my own itch while scrapped ones were meant to be consumed by other people.
If gamedev is your thing, try participating in a game jam or two. They are awesome way to use same limited attention span and actually finish something. If you see yourself spending too much time on graphics/sound, try some heavy constraints. For example, use just 3 colors for everything, or compose all graphics just from single shape.
Introspection is good. Keep doing what you are doing, and keep learning from what worked better or worse for you.
Treat your side project as small sandbox, a place to play. Don't put deadlines, don't worry about sunk cost, allow yourself to write bad code without much planning. You can incrementally get to point where you want it to be. Try to see at which point earliest you can wrap it up and publish as MVP.
I noticed that it is very easy to start, and gets exponentially harder as you go on. When you set up the project, each development time slice doubles the result. First you have nothing, then it's "hello world". Then you put up some dynamic text. Then you hook up some crafty mechanism behind the text. It is exciting and motivating. But after a while the project slows down. It is because there are already some mechanics in there, and each new feature has to be aligned and connected with existing ones. The complexity grows and more and more time has to be invested in each new step. This is nature of software development. Polish also takes surprising amount of time. You have to be aware of it and plan your energy accordingly.
All this accumulated complexity makes your mind crave a new project, a fresh canvas where everything is simple and new. Usually it will manifest in form of new idea that is so much better than the current project. What works for me is to take hour or two and take some notes and flesh out this new idea, and then archive it for time being.
Some more advice I got from other people: A good place to stop the development session is when you are almost done with feature. This will motivate you to pick up the project next day, and you'll quickly get into mindset needed to start next feature.
Don't share with others what you plan to do. There's a psychological effect where you get small amount of gratification by telling others about imagined finished project. You want to delay that gratification until you have something done because it will give you motivation needed to put in the hours. On the other hand, do share your progress on social networks. Getting feedback boosts motivation enormously.
If gamedev is your thing, try participating in a game jam or two. They are awesome way to use same limited attention span and actually finish something. If you see yourself spending too much time on graphics/sound, try some heavy constraints. For example, use just 3 colors for everything, or compose all graphics just from single shape.
Introspection is good. Keep doing what you are doing, and keep learning from what worked better or worse for you.
Treat your side project as small sandbox, a place to play. Don't put deadlines, don't worry about sunk cost, allow yourself to write bad code without much planning. You can incrementally get to point where you want it to be. Try to see at which point earliest you can wrap it up and publish as MVP.
I noticed that it is very easy to start, and gets exponentially harder as you go on. When you set up the project, each development time slice doubles the result. First you have nothing, then it's "hello world". Then you put up some dynamic text. Then you hook up some crafty mechanism behind the text. It is exciting and motivating. But after a while the project slows down. It is because there are already some mechanics in there, and each new feature has to be aligned and connected with existing ones. The complexity grows and more and more time has to be invested in each new step. This is nature of software development. Polish also takes surprising amount of time. You have to be aware of it and plan your energy accordingly.
All this accumulated complexity makes your mind crave a new project, a fresh canvas where everything is simple and new. Usually it will manifest in form of new idea that is so much better than the current project. What works for me is to take hour or two and take some notes and flesh out this new idea, and then archive it for time being.
Some more advice I got from other people: A good place to stop the development session is when you are almost done with feature. This will motivate you to pick up the project next day, and you'll quickly get into mindset needed to start next feature.
Don't share with others what you plan to do. There's a psychological effect where you get small amount of gratification by telling others about imagined finished project. You want to delay that gratification until you have something done because it will give you motivation needed to put in the hours. On the other hand, do share your progress on social networks. Getting feedback boosts motivation enormously.