"[software development] plan is a reasonably detailed description of all the activities you need to undertake".
Which, generally, can't exist.
If you actually have all the requirements fully understood, and you have all the technology issues fully understood, you could write such a document.
If, however, you're doing something new -- something which the users do not already have installed -- or you are using any new technology, you cannot provide even a "reasonably" detailed description of the activities you need to undertake.
You can provide an overview, which will summarize some of what you need to do. But, as you explore the requirements, the users will discover things, learn, and change their mind. Revising the plan. As you explore the technology, the developers will discover things, learn, and revise the plan.
It can't be that hard -- people do this all the time.
The plan's audience is management. Managers want a "reasonably" detailed description of all the activities. As the users and developers learn about the requirements and the technology, the details change. This makes the "reasonable" test very, very hard to satisfy. When the details change constantly, what level of detail is "reasonable"?
Changes to the plan can (and do) arrive on a daily basis. Most managers won't want to make daily changes to the plan. So too much detail becomes "unreasonable". In order to create a plan that doesn't change very often, the plan actually needs to be a summary of activities. The only workable version of a "Software Development Plan" is a series of goals defined -- not in terms of activities -- in terms of functionality to be released to users.
In short, people do it badly all the time. In 30+ years of software development (much of it as a military subcontractor) there is a fantasy about planning that is simply not born out by the facts. Projects are cancelled with "reasonably detailed" plans, overly detailed plans and no plan at all.
Indeed, a plan is often the leading cause of cancellation. Why? With a "reasonably detailed" list of activities, any learning means the plan is wrong. Since the plan diverges from actual execution something must be wrong. Toss a coin. If you deem that execution is wrong, cancel the project for not following the plan. If you deem the plan is wrong, fix the plan to match the real world. The more detailed the plan, the more it seems "right" and the more likely to deem execution as faulty.
Bottom Line.
A Software Development Plan can be a fantasy document written as part of a "Waterfall" development methodology in which all kinds of things are over-specified up front and changes (from learning as the team progresses) is punished.
OR
A Software Development Plan is an Agile burndown chart that simply shows the sprints to be completed. The "reasonable" level of detail is actually quite low -- it's just a summary. And it changes during each sprint retrospective.