When I start a new project, I tend to look at other people's source code who have implemented the same project. This gives me an idea on how the overall project is supposed to be created and the basic flow and the implementation logic of the program.
The problem with this approach, I feel, is that I am not thinking for myself from scratch, and my own project ends up being almost like a clone of the other project.
Currently I am trying to make a chess engine, and to get started I will have to look at other open source chess engines out there. This will give me an idea of how a chess engine is supposed to work and what its different components are, but as a drawback, I will then just be copying over someone else's design and their personal implementation.
When faced with a new project which is of a reasonable complexity, how do people get started?