Requirements gathering and software estimation are important parts of the development process. There are many techniques for gathering requirements such as use cases, user stories, and interviews to understand necessary features and avoid ambiguity. Estimates are also important but there is uncertainty involved since many factors can change. Estimates should be iterative and refined over time using techniques like counting lines of code or tasks.