I'm learning C#, WPF, and SQL as a hobby during the few free hours I have each day. My long-term goal is to build an integrated ERP and CRM system for my family's company. I love the feeling of finally understanding something, but I also frequently lose confidence. I have no formal programming background and am still learning how computers, applications, controls, bindings, and larger software systems fit together. Sometimes even a simple button click takes me two hours, and thinking about the size and complexity of a complete business application feels overwhelming. I know the usual advice is to break the work into smaller steps, but even the number of small steps can feel intimidating. How do you stay motivated when progress is slow and the goal seems years away? Do you use a mantra, track your progress, keep a picture of the end goal, or have another method that helps you choose learning over games or sleep?
5 Answers
You don't need to follow tutorials forever. Pick something you want to build and use tutorials, documentation, and examples to solve problems as they appear. Your knowledge compounds over time, and the same fundamentals become easier to recognize in different languages and frameworks. Two hours for a small feature is fine now; with practice, similar work may take ten minutes. Even difficult bugs leave you with experience that helps the next time you see one.
Keep a simple changelog or progress journal. Write down what you learned or fixed each day, even if it seems trivial. Looking back at an old problem that is now easy provides evidence that you're improving. The project may take years, and that's normal, but you aren't building the entire ERP today. You're solving one appropriately sized problem, such as a login screen or a single data form.
Keep coming back to the reason you started. It may help to sketch or print a picture of the finished product so the long-term goal feels more tangible. When the individual tasks feel disconnected, remembering who the software is for can give them some meaning.
For me, the motivation mostly comes from enjoying the process. Programming combines problem-solving with creativity, so even though getting stuck for several days can be frustrating, the satisfaction of making something work keeps pulling me back. If you genuinely enjoy parts of the work, motivation doesn't always have to come from a mantra.
Use the real project as your guide instead of trying to learn every topic in the abstract. Build one small piece of the system, then learn only what you need for that piece. For example, when adding a database-driven table, first get the query working and print the results to the debug output. Once that works, handle the binding and user interface separately. Debugging tools make large tasks much less intimidating.
Exactly. Also, don't compare yourself with finished commercial software. Those systems were built by teams over many years. Spending two hours on a button is still progress when you're building the foundation from scratch.

The debug output approach makes sense. It feels less overwhelming than trying to connect the database, bindings, and interface all at once.