I was recently asked what I thought were the top 3 mistakes in software Development. Here's my reply:
Without a clear end point to draw all participants' efforts together, the
project fails for lack of cohesion. Participants include both programmers
and non, like graphic artists, marketing, management etc. Example of vision
can be identifying target markets. Example of mission can be (clear) high-level
requirements that are then translated into detailed technical requirements.
It can be a big thing or many little things, but it all comes down to accepting that 2+2=5 because nobody has the guts to challenge the assertion. This often takes the form of agreeing with the highest ranking pointy-haired boss present at any given moment. At other times, it takes the form of agreeing with whomever speaks first at a meeting.
Unfortunately, in the binary world of computing, some ideas are flat out WRONG.
They might be nice, but they just won't work within the constraints of a given
project (hardware, interfaces etc.). However groupthink occurs, if a team
follows it like lemmings into the sea, then a project can founder or be delayed
into unprofitability.
This can occur even when there is a vision and a mission. The problem is that creative people continue to create. Somebody needs to draw a line on the white-board and say "this is enough for version X; everything else will be put off until version Y or later." Without this firm project segmentation (which can be interleaved by competent management), the software is always "broken" because something new is always buggy.