Step 1: Target your users, understand their needs, desires, hopes, frustrations, aspirations, shoe size. Pretty much understand whatever you can, so that you build what they need and are able to empathize with them.
Step 2: Sketch, draw, doodle, and sketch. I should buy stock in post-it notes.
Step 3: Talk to your users, understand them more, run through the scenarios, map out affinity maps, understand constraints.
Step 4: More sketching. Get all of those bad ideas out.
Step 5: More talking. This is where you should understand if you're solving the right problems in the right way. Also, you're starting to talk to developers about how you could build it.
Step 6: Enter the pixels. Start designing really low-fidelity prototypes, or start mapping out user flows. Don't get too hasty and start being pixel perfect. All of this can change.
Step 7: Test your prototype with users. Understand where your tests work, and where they don't.
Step 8: Back to the pixels. No way your tests went perfectly on the first, second, or third round. If they did, you might have done them wrong. Embrace the shortcomings, and throw out bad ideas.
Step 9: Final testing. You should now understand how people will interact with your app, and try to simulate scenarios as close to real world as possible. Test out stress cases, edge cases, error codes, network drops. Test them all, and make sure your user can figure out how to solve problems if and when they arise.
Step 10: Hand off to developers. Provide clear documentation, and work with them to understand how your design will react to different screen sizes, orientations, languages, accessibility standards. Draw a ton of arrows.
Step 11: Launch. Gather feedback. Get ideas for the next release.
Step 12: Repeat.