Lifecycles of software systems that solve real world problems can be
broken down into distinct phases based on where it is with respect
to the problem and the eventual solution.
This article presents a taxonomy of these phases that should help
you understand how each part of the lifecycle fits together.