When beginning a new project, the most important thing is to view it from the eventual end user's perspective. Determining how my software can improve a user's day-to-day life is my goal in any software project. To gain perspective of their workflow and goals, I seek out and solicit feedback from potential users early and often in the process.
Initially I try to capture the essence of the project on paper – taking notes, sketching interfaces, and drawing out data flow diagrams. This gives me a reference when speaking with and soliciting feedback from users. Once the concepts begin to gel, I'll transfer paper notes to a digital format. I store features as cards in trello or github issues via waffle.io, and begin a rough html mockup, typically using bootstrap for quick iterations. Moving project notes to digital feature cards allows for easy prioritization and focused communication with end users.
Once we are comfortable with the core concepts of a project, and have features prioritized, building the actual product can begin. Soliciting feedback throughout the coding process is crucial. The process is fluid though, as features always need to be clarified or tweaked to result in the best possible product.
From there, the iterative process continues, building the product, validating concepts, and gathering feedback. Another thing I strongly believe in is launching the product as early as possible. This allows me to gain perspective from even more potential users, and integrate that knowledge back into the product.