Well there's a lot of different approaches.
Generally Speaking...
If this is a hobby, you want to have something working rather quickly and just revise/layer/add more things as time goes on. A more professional planned approach has it's merits but also has the risk of being too boring and losing your interest. Although you should do this to some degree.
In simple terms I started small and made thousands of revisions. When I found areas I didn't do so well in, I rewrote those areas of code.
More specifically to my case... (My Story)
I liked games like Goldeneye and GTA, and decided I wanted to make a FPS / 3D Shooter, sandbox styled game. In fact, what got me started was Heavy Metal 2000. It's like you're playing Quake but in the 3rd person.
(A long time ago...)
So I made a prototype character in Milkshape 3D. Then I tried to get it to load up in Dark Basic Classic. I thought I saw a lot of player made characters with awful wrong proportions, so I tried extra hard to make the character not look stupid.
So I got the person to load up on a blue DBC screen. Then I experimented with cycling textures, attaching different heads, and adding glued on clothing objects to make it look better than a simple flat textured person. I thought that was neat so I figured out how to make a ground matrix and texture it. Then I put the character on the matrix, and programmed in controls to move around on the matrix ground. I went into milkshape3d and made walking animations. Then In DBC I figured out how to make it play the walking animation when the character was moving and a standing animation when it was still.
I knew I didn't want to hard code everything so I also wrote editors for things like character creation, scripts, levels, items, game world entities.
Eventually I switched to DBP (also a long time ago) and things just mothballed from there where necessity took me. I always tried to plan ahead with structuring the game code. I knew this would pay off well in the end and it has.
Over time I figured out how to be more efficient. At first the game would be one room, with a couple people and really slow. I fixed a lot of things. For instance, I figured out I could add fog and hide everything behind it. That had it's drawbacks... I figured out how to hide everything outside the camera. I figured out how to designate regions in the game levels and inside the level editor dictate which areas can see each other. That way you don't draw things behind walls. And there's other things...
I mentioned AI briefly before. When you pit AI vs. AI. You really get a sense that what you've made has taken on a life of it's own. I treated AI in levels or stages. Picture you have a character on screen. At the lowest level is things like walking/kicking/punching. Simple actions. Above that you have things like: turn to face player and walk to player and when close enough kick. Then above that you have something cool like: use corridor walking AI and when player is sighted change to attack AI. So you can break AI down to smaller solvable problems using a layered approach. Then you can plug player controls into the lowest level of the AI so the player functions like the other characters in the game world.
Now I have pretty much a full game, I can turn it on and just play for hours. Right now I'm transitioning to Enhanced Animations Plugin. It's taking a little longer then I expected. Splitting the upper and lower body for things like running and shooting is tricky. This is because I also aim the torso/arms and weapon up and down to the characters target. After that I want to convert the lighting system from DBP Default to Evolved Normal Maps, but I have to figure out why awful texture seams are appearing on the character's bodies. I suspect I'll be posting about that some time. Something about the Normals not being calculated properly. Then I'll revise the controls so that buttons can be remapped. This will then put me in a position to release a WIP. Specifically I want something playable at day one. Issues like screen resolution and controls need to be bullet proof.
So it's essentially a matter of figuring out what you want to do, then figuring out how to do it. I should also point out that prior programming experience helps a lot since you'll be better at making code efficient, and planning ahead. I have a College Diploma in Electronics Engineering and a Computer Science Degree. I wouldn't be surprised if someone with Doctorate shows up. But these things are helpful and not necessary.
And most importantly, have fun
Oh yeah, and I like to post pictures sometimes because it's great showing people what you are doing, gives people a better idea what you are talking about, and breaks up walls of text nicely.