The object of software development is working software, and all effort should be focused on this goal. Design does not result in working software, because clearly it is possible to write software full of errors and bugs given any design just as it is possible to build a ship that sinks or a bridge that breaks or a building which falls. It is not the presence or absence of design which has any bearing on this. This directly implies that design which is removed from implementation has no bearing on the implemenation itself; it has no bearing whatsoever on whether the software will work or not.
If the software does not work, it is irrelevant. Effort not directly focused on working software is irrelevant. Some would say that design by itself is important and relevant, and not directly focused on working software; I would say that such a design is simply not relevant to working software - it is only useful for abstract analysis. If this is where the "design" process stops, the result will be a poorly thought out struggle between wishful thinking and implementation realities.
The only software designs which have merit are those which are done alongside their implementation
Therefore, the majority of the effort should be in the development of software which works. It should work from the beginning, and it should always work. The question then is not whether it is "finished", it is whether it is mature.