The people involved in the project build a list of requirements. They may talk with customers to find out what they want in a new application, or what additional features they want in an existing application. They may talk with experts in the product space to understand how the software needs to perform. They may check other existing applications. They may do combinations of these, and even try other options. Inexperienced development teams will jump right into writing code only to find they are wasting time building a product which doesn’t meet the market’s demands.
Once they have a concrete, specific set of requirements they will create a design for the software. This is typically done by senior software developers or even by people who have the title of software architect. Normally several designs will be considered. For complex projects it came be an iterative process. One design may be picked, modified, folded in with another design, being changed and changed again until a final design feels right and gets approved by various people.
If we'll be thoughtful about our end goals for homeschooling and how we do it, we'll have a much better chance of success.