I'm learning programming and can come up with small practice projects, but I struggle to find ideas substantial enough to work on for several months. How do experienced programmers discover larger projects? Do they notice problems in daily life, combine programming with their hobbies, improve existing tools, or use some other process? Is finding worthwhile projects mainly a matter of experience, or are there practical ways to generate and evaluate ideas?
4 Answers
Most large projects don’t begin as large projects. Start with a small weekend-sized idea, then add improvements only when you find a real reason to build them. As you learn more, you’ll notice additional features, edge cases, and possible users. That gradual expansion is often how a simple tool turns into a much larger application.
Look for inconveniences and repetitive tasks. Ask yourself, “Could I automate this?” or “Why does this process take so many steps?” Your own frustrations are a good source of project ideas because you already understand the problem and can tell whether your solution is useful. You can also ask friends, family, or mentors what tasks they find tedious.
Just be careful not to automate something that takes an hour by spending six hours building the automation. That can still be worthwhile for learning, but it’s useful to recognize when the project is mainly an experiment.
Keep an idea list. Write down anything that sounds interesting, even if it seems impractical or half-formed. When you have time, review the list and choose an idea that matches your current skills and interests. Letting an idea sit for a while also helps you see whether you genuinely want to build it or merely liked the initial thought.
You don’t need an entirely original concept. Build your own version of something that already exists, or apply familiar software to a hobby or community you understand. A game for friends, a tool for organizing an activity, a custom editor, or a service for solving a personal need can all become meaningful projects. Start small, learn through the process, and let the scope grow naturally instead of trying to design a months-long project from day one.

It helps to think of the first version as the foundation of a platform. For example, a small computer-vision experiment might later support multiple model types, optimization options, and different input formats—but only add those once the core version is useful.