Sachverhalt: A. Am 29. April 2014 stellten D. und E. F._ ein Baugesuch für ein Einfamilienhaus mit Einliegerwohnung, einem Autounterstand und einem gedeckten Gartensitzplatz auf Parzelle Nr. 5539 in Chur. Die Parzelle gehört der Stadt Chur und liegt in der Wohnzone W1. Die Stadt hat D. und E. F._ ein selbständiges und dauerndes Baurecht eingeräumt. Die Eigentümer der benachbarten Parzellen Nrn. 5561 und 8057, A. und B. C._, erhoben gegen das Gesuch Einsprache. Sie machten geltend, der gedeckte Sitzplatz halte den Grenzabstand nicht ein und das Haus sei zu hoch. Mit Entscheid vom 30. September 2014 wies der Stadtrat Chur die Einsprache ab und erteilte die Baubewilligung unter Bedingungen und Auflagen. Eine von A. und B. C._ dagegen erhobene Beschwerde hiess das Verwaltungsgericht des Kantons Graubünden mit Urteil vom 14. April 2015 teilweise gut. Es hob die Baubewilligung für den Sitzplatz wegen Überschreitung des Grenzabstands auf. Im Übrigen wies es das Rechtsmittel ab. B. Mit Beschwerde in öffentlich-rechtlichen Angelegenheiten ans Bundesgericht vom 3. Juli 2015 beantragen B. und A. C._, das Urteil des Verwaltungsgerichts sei aufzuheben und die Baubewilligung zu verweigern. Eventualiter sei die Sache zur Neubeurteilung an die Vorinstanz zurückzuweisen. Das Verwaltungsgericht und die Beschwerdegegner schliessen auf Abweisung der Beschwerde. Die Stadt Chur beantragt, die Beschwerde sei abzuweisen, soweit darauf einzutreten sei. Die Beschwerdeführer halten in ihrer Replik an ihren Anträgen und Rechtsauffassungen fest, ebenso die Stadt Chur in ihrer Duplik. Mit Präsidialverfügung vom 1. September 2015 hat das Bundesgericht der Beschwerde die aufschiebende Wirkung zuerkannt.