The most important single aspect of software development is to be clear about what you are trying to build. Remarkable how often this is forgotten. You must understand the problem before you can solve it. Many projects fail not because the programmers couldn't code the solution, but because nobody properly understood what problem they were trying to solve in the first place.
— Bjarne Stroustrup