Software plays a vital role in our daily life, and with information technology evolving, software projects are getting more complex. Waterfall and agile are commonly used for software development. However, they are not sufficient for every software project. A pure waterfall or agile as a software development model is not enough. The solution to this dilemma is adopting a hybrid methodology that takes advantage of the strength of both methodologies. This research paper uses criteria for selecting an appropriate methodology depending on some factors. Moreover, enhancing the waterfall model is presented to improve its deficiency.