Farming involves the creation of abstractions of the system requirements. The system requirements are represented at the software architecture level. These requirements provide insight into the general operation of the system. It should be noted that the requirements are a snapshot of the users current requirements and while a good software architecture should support these requirements, the architecture must be flexible to handle anticipated and unanticpated future needs. Dependencies on commercial API's or business rules should be isolated to avoid obsoloences.
Mining involves the study of current technology and legacy systems.
Models are developed of the existing subsystems. We wish to represent an idelaized API for each component. With an understanding of the components, we generalize the components. It is important to study enough components to create a generalized class. To few, and the generalized class could be biased towards one implementation.