The need for a sprint 0 probably varies across different businesses. I’m working as a consultant which means that at the start of the project the team usually doesn’t know each other well, the customer doesn’t know the team, the business analyst doesn’t know the business and the team doesn’t know the inherited legacy code (if there is inherited code).
Every single one of those issues is an impediment for a successful sprint planning. Together they make an effective sprint planning impossible. The purpose of a sprint 0 is to overcome these issues. The purpose of a sprint 0 is not to work in an unstructured manner and postpone the planning.
Sprint 0 Goals and Planning
As every sprint, sprint 0 should be planned and have a sprint goal. In my opinion, there is only one valid sprint goal to set for sprint 0:
Sprint 0 Goal: Make proper planning of sprint 1 possible.
Fortunately only two things are required to plan a sprint: a prioritized backlog and enough knowledge of the domain, technical aspects etc to make relevant time estimates.
Unfortunately those two things can be really hard to get. Until you have them, you’re running sprint 0.
Sprint 0 Planning: Going Kanban
Sprint 0 is not like other Scrum sprints. It’s usually run Kanban Style. This means that is lacks scope and time limits. It doesn’t mean it’s not planned.
I recommend that a sprint planning meeting is held just like with any sprint. Put all activities that you know about into the sprint. Set as good time estimates as you can.
During the sprint, constantly refine the backlog by adding additional activities discovered by the initial investigation activities. Set time estimates for those too.
At some point in time, there are no more items added to the sprint 0 backlog. The items that are there have clear estimates. That is when it’s time to set an end date for sprint 0 and set a date for the sprint 1 planning meeting.
Not an Alternative: Postponing the Project Start
One might argue that a sprint 0 is a sign of having started the project too early, before the product owner has formed a backlog. I don’t think that argument holds. To form a backlog requires both the product owner and technical expertise of the lead developer(s) of the to-be team. Sprint 0 is essentially a large project backlog grooming session, where both the product owner and developer team representatives are needed.